From 6d323385d8b7fe820583f95f0d4ccfe9ccfdc3f4 Mon Sep 17 00:00:00 2001 From: undercover-cactus Date: Tue, 24 Mar 2026 12:41:36 +0100 Subject: [PATCH 1/3] refactor: rename rewardsInitiator to snowbridgeInitiator (#476) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Renames the rewardsInitiator state variable, modifier, internal check function, setRewardsInitiator function, and RewardsInitiatorSet event in DataHavenServiceManager to their snowbridgeInitiator-prefixed equivalents, to better reflect the role of this address. ## Motivation The previous rewardsInitiator naming was misleading — the address filling this role is specifically the Snowbridge relayer/gateway. Renaming it end-to-end clarifies intent and aligns the codebase with the actual architecture. ## Changes * DataHavenServiceManager.sol: renamed state variable, modifier, internal check, setRewardsInitiator → -> setSnowbridgeInitiator, RewardsInitiatorSet -> SnowbridgeInitiatorSet * IDataHavenServiceManager.sol: updated event, function signature, and NatSpec * Deploy scripts & configs: updated field names across all environments (anvil, testnet, stagenet, mainnet) --- contracts/config/anvil.json | 2 +- contracts/config/example.jsonc | 2 +- contracts/config/mainnet-ethereum.json | 2 +- contracts/config/stagenet-hoodi.json | 2 +- contracts/config/testnet-hoodi.json | 2 +- contracts/deployments/anvil.json | 28 +- contracts/deployments/state-diff.checksum | 2 +- contracts/deployments/state-diff.json | 1074 +++++++++-------- contracts/script/deploy/Config.sol | 2 +- contracts/script/deploy/DeployBase.s.sol | 4 +- contracts/script/deploy/DeployLive.s.sol | 2 +- contracts/script/deploy/DeployLocal.s.sol | 2 +- contracts/script/deploy/DeployParams.s.sol | 2 +- .../DataHavenServiceManagerBadLayout.sol | 2 +- contracts/src/DataHavenServiceManager.sol | 34 +- .../interfaces/IDataHavenServiceManager.sol | 18 +- .../DataHavenServiceManager.storage.json | 2 +- contracts/test/OperatorAddressMappings.t.sol | 2 +- contracts/test/RewardsSubmitter.t.sol | 14 +- contracts/test/Slashing.t.sol | 6 +- contracts/test/ValidatorSetSubmitter.t.sol | 2 +- contracts/test/storage/StorageLayout.t.sol | 12 +- contracts/test/utils/AVSDeployer.sol | 5 +- test/cli/handlers/contracts/status.ts | 2 +- test/contract-bindings/generated.ts | 152 +-- test/e2e/suites/rewards-message.test.ts | 10 +- test/e2e/suites/slash.test.ts | 10 +- 27 files changed, 726 insertions(+), 671 deletions(-) diff --git a/contracts/config/anvil.json b/contracts/config/anvil.json index 4a134ced..e8c901f4 100644 --- a/contracts/config/anvil.json +++ b/contracts/config/anvil.json @@ -26,7 +26,7 @@ }, "avs": { "avsOwner": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", - "rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", + "snowbridgeInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", "validatorSetSubmitter": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", "validatorsStrategies": [] }, diff --git a/contracts/config/example.jsonc b/contracts/config/example.jsonc index aeef7cc4..99fc53b3 100644 --- a/contracts/config/example.jsonc +++ b/contracts/config/example.jsonc @@ -68,7 +68,7 @@ /// The address of the account that initiates the rewards calculation. /// This is for the EigenLayer rewards distribution way, using the RewardsCoordinator. /// But for now, we're not using it, and instead sending the rewards directly. - "rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", + "snowbridgeInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", /// The EigenLayer strategy addresses for the Validators to stake into. /// The beaconChainETHStrategy is a virtual address representing native beacon chain ETH. /// All networks: diff --git a/contracts/config/mainnet-ethereum.json b/contracts/config/mainnet-ethereum.json index 28775dad..378ae274 100644 --- a/contracts/config/mainnet-ethereum.json +++ b/contracts/config/mainnet-ethereum.json @@ -30,7 +30,7 @@ }, "avs": { "avsOwner": "0x0000000000000000000000000000000000000000", - "rewardsInitiator": "0x0000000000000000000000000000000000000000", + "snowbridgeInitiator": "0x0000000000000000000000000000000000000000", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0x93c4b944D05dfe6df7645A86cd2206016c51564D", diff --git a/contracts/config/stagenet-hoodi.json b/contracts/config/stagenet-hoodi.json index 40d80dbc..d71ce581 100644 --- a/contracts/config/stagenet-hoodi.json +++ b/contracts/config/stagenet-hoodi.json @@ -32,7 +32,7 @@ }, "avs": { "avsOwner": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", - "rewardsInitiator": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", + "snowbridgeInitiator": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0xf8a1a66130d614c7360e868576d5e59203475fe0", diff --git a/contracts/config/testnet-hoodi.json b/contracts/config/testnet-hoodi.json index 3396b7b4..cf37569c 100644 --- a/contracts/config/testnet-hoodi.json +++ b/contracts/config/testnet-hoodi.json @@ -32,7 +32,7 @@ }, "avs": { "avsOwner": "0x0000000000000000000000000000000000000000", - "rewardsInitiator": "0x0000000000000000000000000000000000000000", + "snowbridgeInitiator": "0x0000000000000000000000000000000000000000", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0xf8a1a66130d614c7360e868576d5e59203475fe0", diff --git a/contracts/deployments/anvil.json b/contracts/deployments/anvil.json index d73d6b8f..e2c535ad 100644 --- a/contracts/deployments/anvil.json +++ b/contracts/deployments/anvil.json @@ -1,27 +1 @@ -{ - "network": "anvil", - "BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "ProxyAdmin": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7", - "DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", - "StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", - "BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "DeployedStrategies": [ - { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" - } - ] -} +{"network": "anvil","BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf","AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF","Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688","ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D","ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570","ProxyAdmin": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788","RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7","DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82","StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508","AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016","EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1","EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1","RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE","AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed","PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c","ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141","BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36","DeployedStrategies": [{"address": "0x998abeb3E57409262aE5b751f60747921B33613E","underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778","tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"}]} \ No newline at end of file diff --git a/contracts/deployments/state-diff.checksum b/contracts/deployments/state-diff.checksum index a773892e..e01208ac 100644 --- a/contracts/deployments/state-diff.checksum +++ b/contracts/deployments/state-diff.checksum @@ -1 +1 @@ -d7d30510de741750e5b2069228eb2b037f20cc22 \ No newline at end of file +630d9358671b9af84c8ff6b14c76dd908a130321 \ No newline at end of file diff --git a/contracts/deployments/state-diff.json b/contracts/deployments/state-diff.json index 7772c5cd..376ea13a 100644 --- a/contracts/deployments/state-diff.json +++ b/contracts/deployments/state-diff.json @@ -1,31 +1,59 @@ { - "24": { - "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", - "storage": {} - }, - "8": { - "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220590055fea5441ad6e827390b16005643886d2dc4ffe2b97b43ed3ab207076ab664736f6c634300081c003300", - "storage": {} - }, - "13": { - "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220003d7f443094069cb023dc39fb36d6ba29922db6cd9b714ea95af972fc56405e64736f6c634300081c003300000000000000", + "43": { + "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", + "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212201363f1045faa90db6b9cd5e104a6adf153d8d9848b22c7129cad8df16e32d4e364736f6c634300081c00330000", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "27": { - "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "44": { + "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220d2f603e4644996fdd6f5bfe996a433ec4c63b91e433ec6617ddd8c10790babb164736f6c634300081c003300000000000000000000000000", + "storage": {} + }, + "15": { + "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "storage": {} + }, + "29": { + "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44" + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" } }, + "34": { + "address": "0x9A676e781A523b5d0C0e43731313A708CB607508", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "20": { + "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122073ac1b7fd03357e63bd1ea96fdd2a71a85f098cadb19e9ccc9fc7028bc1c9a9664736f6c634300081c00330000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "6": { + "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", + "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a264697066735822122048797f739f4990ae363e6737b404ae972b4684803172bd809c64956b6bae7dc264736f6c634300081c003300000000000000", + "storage": {} + }, + "0": { + "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", + "storage": {} + }, "2": { "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", "code": "0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80639100674511610088578063ad8aca7711610063578063ad8aca77146101df578063df595cb8146101f2578063eb5a4e8714610205578063fddbdefd14610218575f5ffd5b80639100674514610196578063950d806e146101b9578063ad5f2210146101cc575f5ffd5b806354fd4d50116100c357806354fd4d5014610124578063628806ef146101425780636bddfa1f14610155578063882a3b3814610175575f5ffd5b806306641201146100e9578063268959e5146100fe5780634f906cf914610111575b5f5ffd5b6100fc6100f7366004610dbd565b61022b565b005b6100fc61010c366004610e0e565b61034c565b6100fc61011f366004610e0e565b610427565b61012c6104ca565b6040516101399190610e3f565b60405180910390f35b6100fc610150366004610e74565b6104fa565b610168610163366004610e74565b610588565b6040516101399190610ed0565b610188610183366004610e0e565b6105b1565b604051610139929190610ee2565b6101a96101a4366004610e0e565b610712565b6040519015158152602001610139565b6100fc6101c7366004610dbd565b610782565b6101686101da366004610e74565b610893565b6101a96101ed366004610e0e565b610939565b6101a9610200366004610dbd565b61095a565b6100fc610213366004610e0e565b6109af565b610168610226366004610f44565b610a7d565b836102368133610712565b61025357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906102758585610abb565b6001600160a01b0387165f908152600484016020526040902090915061029b9082610ae8565b6102b85760405163262118cd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206102db9082610aff565b505f81815260058301602052604090206102f59087610b0a565b50856001600160a01b0316876001600160a01b03167f18242326b6b862126970679759169f01f646bd55ec5bfcab85ba9f337a74e0c6878760405161033b929190610f84565b60405180910390a350505050505050565b816103578133610712565b61037457604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602081905260409091206002019061039b82610b1e565b116103b9576040516310ce892b60e31b815260040160405180910390fd5b6103c38184610b0a565b6103e057604051630716d81b60e51b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce906020015b60405180910390a250505050565b816104328133610712565b61044f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206104708184610b0a565b61048d5760405163bed8295f60e01b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fd706ed7ae044d795b49e54c9f519f663053951011985f663a862cd9ee72a9ac790602001610419565b60606104f57f76312e302e300000000000000000000000000000000000000000000000000006610b27565b905090565b6001600160a01b0381165f90815260016020526040902061051b8133610b0a565b6105385760405163bed8295f60e01b815260040160405180910390fd5b6105456002820133610b64565b506040513381526001600160a01b038316907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff979060200160405180910390a25050565b6001600160a01b0381165f9081526001602052604090206060906105ab90610b78565b92915050565b6001600160a01b038083165f9081526001602090815260408083209385168352600490930190529081206060918291906105ea82610b1e565b90505f8167ffffffffffffffff81111561060657610606610fa7565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b5090505f8267ffffffffffffffff81111561064c5761064c610fa7565b604051908082528060200260200182016040528015610675578160200160208202803683370190505b5090505f5b83811015610704576106a861068f8683610b84565b606081901c9160a09190911b6001600160e01b03191690565b8483815181106106ba576106ba610fbb565b602002602001018484815181106106d3576106d3610fbb565b6001600160e01b0319909316602093840291909101909201919091526001600160a01b03909116905260010161067a565b509097909650945050505050565b6001600160a01b0382165f90815260016020526040812061073590600201610b1e565b5f0361075757816001600160a01b0316836001600160a01b03161490506105ab565b6001600160a01b0383165f90815260016020526040902061077b9060020183610b8f565b9392505050565b8361078d8133610712565b6107aa57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906107cc8585610abb565b6001600160a01b0387165f90815260048401602052604090209091506107f29082610ae8565b156108105760405163ad8efeb760e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206108339082610bb0565b505f818152600583016020526040902061084d9087610b64565b50856001600160a01b0316876001600160a01b03167f037f03a2ad6b967df4a01779b6d2b4c85950df83925d9e31362b519422fc0169878760405161033b929190610f84565b6001600160a01b0381165f9081526001602052604090206060906108b990600201610b1e565b5f03610911576040805160018082528183019092525f916020808301908036833701905050905082815f815181106108f3576108f3610fbb565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b0382165f9081526001602052604090206105ab90600201610b78565b919050565b6001600160a01b0382165f90815260016020526040812061077b9083610b8f565b5f6109658585610712565b806109a657506109a66109788484610abb565b6001600160a01b038088165f908152600160209081526040808320938a168352600490930190522090610ae8565b95945050505050565b816109ba8133610712565b6109d757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206109fb6002820184610b8f565b15610a195760405163130160e560e31b815260040160405180910390fd5b610a238184610b64565b610a40576040516319abede360e11b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fb14b9a3d448c5b04f0e5b087b6f5193390db7955482a6ffb841e7b3ba61a460c90602001610419565b60605f610a8a8484610abb565b6001600160a01b0386165f90815260016020908152604080832084845260050190915290209091506109a690610b78565b60609190911b6bffffffffffffffffffffffff191660a09190911c6bffffffff0000000000000000161790565b5f818152600183016020526040812054151561077b565b5f61077b8383610bbb565b5f61077b836001600160a01b038416610bbb565b5f6105ab825490565b60605f610b3383610c9e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f61077b836001600160a01b038416610cc5565b60605f61077b83610d11565b5f61077b8383610d6a565b6001600160a01b0381165f908152600183016020526040812054151561077b565b5f61077b8383610cc5565b5f8181526001830160205260408120548015610c95575f610bdd600183610fcf565b85549091505f90610bf090600190610fcf565b9050818114610c4f575f865f018281548110610c0e57610c0e610fbb565b905f5260205f200154905080875f018481548110610c2e57610c2e610fbb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610c6057610c60610fee565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105ab565b5f9150506105ab565b5f60ff8216601f8111156105ab57604051632cd44ac360e21b815260040160405180910390fd5b5f818152600183016020526040812054610d0a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105ab565b505f6105ab565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610d5e57602002820191905f5260205f20905b815481526020019060010190808311610d4a575b50505050509050919050565b5f825f018281548110610d7f57610d7f610fbb565b905f5260205f200154905092915050565b80356001600160a01b0381168114610934575f5ffd5b80356001600160e01b031981168114610934575f5ffd5b5f5f5f5f60808587031215610dd0575f5ffd5b610dd985610d90565b9350610de760208601610d90565b9250610df560408601610d90565b9150610e0360608601610da6565b905092959194509250565b5f5f60408385031215610e1f575f5ffd5b610e2883610d90565b9150610e3660208401610d90565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610e84575f5ffd5b61077b82610d90565b5f8151808452602084019350602083015f5b82811015610ec65781516001600160a01b0316865260209586019590910190600101610e9f565b5093949350505050565b602081525f61077b6020830184610e8d565b604081525f610ef46040830185610e8d565b82810360208401528084518083526020830191506020860192505f5b81811015610f385783516001600160e01b031916835260209384019390920191600101610f10565b50909695505050505050565b5f5f5f60608486031215610f56575f5ffd5b610f5f84610d90565b9250610f6d60208501610d90565b9150610f7b60408501610da6565b90509250925092565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156105ab57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea26469706673582212205138500ca3c7de3b4f716056e14d380d984b3b127ee87718876d2d91dcf14c6d64736f6c634300081c003300000000", @@ -33,354 +61,444 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "31": { - "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "14": { + "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", + "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220003d7f443094069cb023dc39fb36d6ba29922db6cd9b714ea95af972fc56405e64736f6c634300081c003300000000000000", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b" } }, - "32": { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", - "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "29": { - "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e", - "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "7": { - "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", - "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212207c195dc6c0dcf274cd547cf28d123e774d60cc2ca6ccfba9a4b62ae46152a83164736f6c634300081c003300", + "17": { + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea2646970667358221220046dc7d429ea210c611797c7b4d01fa9b6906f8c2a4299f763335c848dfa743864736f6c634300081c003300000000000000", "storage": {} }, "9": { - "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", - "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220bf51267d76cff7222c17d610dde7751957cfe3a183e053d0666ff0994eb90d2f64736f6c634300081c0033000000000000000000", - "storage": {} - }, - "28": { - "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "19": { - "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122073ac1b7fd03357e63bd1ea96fdd2a71a85f098cadb19e9ccc9fc7028bc1c9a9664736f6c634300081c00330000", + "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", + "code": "0x608060405260043610610207575f3560e01c8063a69d9bb611610113578063c63fd5021161009d578063d4c250081161006d578063d4c2500814610620578063d6e588d414610654578063e2148f5a14610673578063f2fde38b14610692578063fe776c2a146106b1575f5ffd5b8063c63fd502146105af578063ceb29d61146105ce578063d156b911146105ed578063d4b6b83414610601575f5ffd5b8063a997f0ca116100e3578063a997f0ca146104f7578063a9a899cd14610518578063b526578714610537578063be6ab6ef1461056f578063c1a8e2c514610590575f5ffd5b8063a69d9bb614610487578063a8294cd8146104a6578063a8315705146104b9578063a98fb355146104d8575f5ffd5b80636d4f5c0e11610194578063740d837711610164578063740d8377146103e557806374edeb6c1461041957806383821e8e146104385780638da5cb5b146104575780638f8ee55214610474575f5ffd5b80636d4f5c0e146103745780636deab01914610393578063715018a6146103b25780637240f9af146103c6575f5ffd5b8063303ca956116101da578063303ca956146102cd57806333dcde4c146102ec578063501060021461030d57806359b005341461032c5780635d8874621461034b575f5ffd5b80631500cd8d1461020b578063191088391461022c578063265973831461024b5780632fb31ef11461029c575b5f5ffd5b348015610216575f5ffd5b5061022a6102253660046134d0565b6106df565b005b348015610237575f5ffd5b5061022a6102463660046134eb565b610757565b348015610256575f5ffd5b5061027f6102653660046134d0565b606b6020525f90815260409020546001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b3480156102a7575f5ffd5b506067546001600160a01b03165b6040516001600160a01b039091168152602001610293565b3480156102d8575f5ffd5b5061022a6102e73660046135a1565b610977565b3480156102f7575f5ffd5b50610300610af4565b604051610293919061362f565b348015610318575f5ffd5b50610300610327366004613657565b610b84565b348015610337575f5ffd5b5061022a6103463660046134d0565b611374565b348015610356575f5ffd5b5061035f602081565b60405163ffffffff9091168152602001610293565b34801561037f575f5ffd5b506065546102b5906001600160a01b031681565b34801561039e575f5ffd5b5061022a6103ad36600461384d565b61149a565b3480156103bd575f5ffd5b5061022a6119ba565b3480156103d1575f5ffd5b5061022a6103e03660046138f7565b6119cd565b3480156103f0575f5ffd5b506102b56103ff3660046134d0565b60696020525f90815260409020546001600160a01b031681565b348015610424575f5ffd5b5061022a6104333660046134d0565b611afe565b348015610443575f5ffd5b5061022a610452366004613928565b611b7e565b348015610462575f5ffd5b506033546001600160a01b03166102b5565b34801561047f575f5ffd5b5061035f5f81565b348015610492575f5ffd5b5061022a6104a13660046134eb565b611ed2565b61022a6104b4366004613974565b6120d2565b3480156104c4575f5ffd5b5061022a6104d33660046139b4565b6121e8565b3480156104e3575f5ffd5b5061022a6104f23660046138f7565b6122d7565b348015610502575f5ffd5b5061050b61235d565b60405161029391906139f2565b348015610523575f5ffd5b5061022a6105323660046134d0565b612514565b348015610542575f5ffd5b5061055f6105513660046134d0565b6001600160a01b0316301490565b6040519015158152602001610293565b34801561057a575f5ffd5b50610583612564565b6040516102939190613a95565b34801561059b575f5ffd5b5061022a6105aa366004613aa7565b61260c565b3480156105ba575f5ffd5b5061022a6105c9366004613af7565b6126f4565b3480156105d9575f5ffd5b5061022a6105e83660046139b4565b61292a565b3480156105f8575f5ffd5b50610300612bc6565b34801561060c575f5ffd5b50606a546102b5906001600160a01b031681565b34801561062b575f5ffd5b506102b561063a3660046134d0565b60686020525f90815260409020546001600160a01b031681565b34801561065f575f5ffd5b5061022a61066e3660046134d0565b612be2565b34801561067e575f5ffd5b5061022a61068d3660046134d0565b612c62565b34801561069d575f5ffd5b5061022a6106ac3660046134d0565b612cdc565b3480156106bc575f5ffd5b5061055f6106cb3660046134d0565b60666020525f908152604090205460ff1681565b6106e7612d52565b6001600160a01b03811661070e5760405163d92e233d60e01b815260040160405180910390fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b61075f612d52565b6040805180820182523081525f60208201819052915163105dea1f60e21b81529091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c906107c1908590600401613bb6565b5f60405180830381865afa1580156107db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108029190810190613bde565b90505f5b83811015610937575f805b83518110156108845786868481811061082c5761082c613c77565b61084292602060409092020190810191506134d0565b6001600160a01b031684828151811061085d5761085d613c77565b60200260200101516001600160a01b03160361087c5760019150610884565b600101610811565b50806108a3576040516331bc342760e11b815260040160405180910390fd5b8585838181106108b5576108b5613c77565b90506040020160200160208101906108cd9190613c8b565b606b5f8888868181106108e2576108e2613c77565b6108f892602060409092020190810191506134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b039290921691909117905550600101610806565b507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac8484604051610969929190613ca4565b60405180910390a150505050565b61097f612dac565b6001600160a01b03831630146109a857604051631280731d60e21b815260040160405180910390fd5b600181146109c95760405163f37f411760e01b815260040160405180910390fd5b5f828282816109da576109da613c77565b90506020020160208101906109ef9190613d13565b63ffffffff1614610a135760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b038481165f9081526068602052604090205416610a4a576040516325ec6c1f60e01b815260040160405180910390fd5b6001600160a01b038085165f90815260686020908152604080832080546001600160a01b03198082169092559094168084526069909252822080549093169092558390839081610a9c57610a9c613c77565b9050602002016020810190610ab19190613d13565b63ffffffff16856001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a35050505050565b6060606c8054610b0390613d2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2f90613d2c565b8015610b7a5780601f10610b5157610100808354040283529160200191610b7a565b820191905f5260205f20905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610be7908590600401613bb6565b5f60405180830381865afa158015610c01573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c289190810190613d64565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316634177a87c846040518263ffffffff1660e01b8152600401610c779190613bb6565b5f60405180830381865afa158015610c91573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cb89190810190613bde565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316632b453a9a8585856040518463ffffffff1660e01b8152600401610d0b93929190613df3565b5f60405180830381865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d4c9190810190613ec4565b90505f83516001600160401b03811115610d6857610d68613670565b604051908082528060200260200182016040528015610d91578160200160208202803683370190505b5090505f84516001600160401b03811115610dae57610dae613670565b604051908082528060200260200182016040528015610dd7578160200160208202803683370190505b5090505f85516001600160401b03811115610df457610df4613670565b604051908082528060200260200182016040528015610e1d578160200160208202803683370190505b5090505f805b8751811015610fe8575f60685f8a8481518110610e4257610e42613c77565b6020908102919091018101516001600160a01b039081168352908201929092526040015f205416905080610e765750610fe0565b5f805b8951811015610f2b57606b5f8b8381518110610e9757610e97613c77565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160601b03166001600160601b0316898581518110610eec57610eec613c77565b60200260200101518281518110610f0557610f05613c77565b6020026020010151610f179190613f87565b610f219083613f9e565b9150600101610e79565b50805f03610f3a575050610fe0565b81878581518110610f4d57610f4d613c77565b60200260200101906001600160a01b031690816001600160a01b03168152505080868581518110610f8057610f80613c77565b602002602001018181525050898381518110610f9e57610f9e613c77565b6020026020010151858581518110610fb857610fb8613c77565b6001600160a01b039092166020928302919091019091015283610fda81613fb1565b94505050505b600101610e23565b50805f036110095760405163339e1ffb60e01b815260040160405180910390fd5b5f6020821061101957602061101b565b815b90505f5b8181101561123657805f611034826001613f9e565b90505b848110156110c0576110af87828151811061105457611054613c77565b602002602001015187838151811061106e5761106e613c77565b602002602001015189858151811061108857611088613c77565b60200260200101518986815181106110a2576110a2613c77565b6020026020010151612df5565b156110b8578091505b600101611037565b5081811461122d578681815181106110da576110da613c77565b60200260200101518783815181106110f4576110f4613c77565b602002602001015188848151811061110e5761110e613c77565b6020026020010189848151811061112757611127613c77565b6001600160a01b03938416602091820292909201015291169052855186908290811061115557611155613c77565b602002602001015186838151811061116f5761116f613c77565b602002602001015187848151811061118957611189613c77565b602002602001018884815181106111a2576111a2613c77565b60200260200101828152508281525050508481815181106111c5576111c5613c77565b60200260200101518583815181106111df576111df613c77565b60200260200101518684815181106111f9576111f9613c77565b6020026020010187848151811061121257611212613c77565b6001600160a01b039384166020918202929092010152911690525b5060010161101f565b505f816001600160401b0381111561125057611250613670565b604051908082528060200260200182016040528015611279578160200160208202803683370190505b5090505f5b828110156112d25786818151811061129857611298613c77565b60200260200101518282815181106112b2576112b2613c77565b6001600160a01b039092166020928302919091019091015260010161127e565b506040805180820182528281526001600160401b038e1660208201529051631a7611b760e31b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99163d3b08db8916113239190600401613fc9565b5f60405180830381865af415801561133d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113649190810190614039565b9c9b505050505050505050505050565b61137c612e26565b6001600160a01b0381166113a35760405163d92e233d60e01b815260040160405180910390fd5b335f908152606860205260409020546001600160a01b0390811690821681036113df5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f908152606960205260409020541680156114185760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260696020818152604080842080546001600160a01b031990811690915533808652606884528286208054978b169783168817905586865293909252808420805490921683179091555190917f03ddab9377727860d18575279a4fb19cf32e3e650ae962f6ce2feaed801cd3af91a3505050565b5f54610100900460ff16158080156114b857505f54600160ff909116105b806114d15750303b1580156114d157505f5460ff166001145b6115395760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561155a575f805461ff0019166101001790555b6001600160a01b0387166115815760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0386166115a85760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384166115cf5760405163d92e233d60e01b815260040160405180910390fd5b5f8251116115f057604051632e56a66b60e11b815260040160405180910390fd5b6115f8612ee1565b61160187612f0f565b606580546001600160a01b0319166001600160a01b0388169081179091556040515f907f36865e413bf7465ef494decdccf522701d4528249b08689f6b1b5b04eaa59a5e908290a3606c61165583826140f1565b507f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663a9821821306040518060a00160405280606d81526020016149bb606d91396040518363ffffffff1660e01b81526004016116bc9291906141ab565b5f604051808303815f87803b1580156116d3575f5ffd5b505af11580156116e5573d5f5f3e3d5ffd5b505050505f85516001600160401b0381111561170357611703613670565b60405190808252806020026020018201604052801561172c578160200160208202803683370190505b5090505f5b86518110156118055786818151811061174c5761174c613c77565b60200260200101515f015182828151811061176957611769613c77565b60200260200101906001600160a01b031690816001600160a01b03168152505086818151811061179b5761179b613c77565b602002602001015160200151606b5f8984815181106117bc576117bc613c77565b602090810291909101810151516001600160a01b031682528101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101611731565b506040805160018082528183019092525f91816020015b604080518082019091525f81526060602082015281526020019060019003908161181c57905050905060405180604001604052805f63ffffffff16815260200183815250815f8151811061187257611872613c77565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906118cb90309085906004016141ce565b5f604051808303815f87803b1580156118e2575f5ffd5b505af11580156118f4573d5f5f3e3d5ffd5b5050606780546001600160a01b0319166001600160a01b038a811691909117909155871615915061196a905057606a80546001600160a01b0319166001600160a01b0387169081179091556040515f907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb908290a35b505080156119b1575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6119c2612d52565b6119cb5f612f0f565b565b6119d5612f60565b5f815111611a255760405162461bcd60e51b815260206004820152601760248201527f56657273696f6e2063616e6e6f7420626520656d7074790000000000000000006044820152606401611530565b5f606c8054611a3390613d2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5f90613d2c565b8015611aaa5780601f10611a8157610100808354040283529160200191611aaa565b820191905f5260205f20905b815481529060010190602001808311611a8d57829003601f168201915b5050505050905081606c9081611ac091906140f1565b507f22efc5f993dce37856b77dd72d7d7661032380c9728c4133f3c071c591bc6ca78183604051611af292919061425d565b60405180910390a15050565b611b06612d52565b6001600160a01b038116611b2d5760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb905f90a35050565b611b86612fb0565b5f611b908261431e565b6040810151519091505f816001600160401b03811115611bb257611bb2613670565b604051908082528060200260200182016040528015611bf657816020015b604080518082019091525f8082526020820152815260200190600190039081611bd05790505b5090505f80805b84811015611cfe575f60695f88604001518481518110611c1f57611c1f613c77565b602090810291909101810151516001600160a01b039081168352908201929092526040015f205416905080611c545750611cf6565b86604001518281518110611c6a57611c6a613c77565b6020026020010151858481518110611c8457611c84613c77565b602002602001018190525080858481518110611ca257611ca2613c77565b60209081029190910101516001600160a01b0390911690528451859084908110611cce57611cce613c77565b60200260200101516020015184611ce59190613f9e565b935082611cf181613fb1565b935050505b600101611bfd565b5080835260408581018490528051838152602081018390527fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e81910160405180910390a1805f03611d5057505050505050565b611d5d8560400151612fdb565b611da27f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae83611d9260408a0160208b016134d0565b6001600160a01b031691906130d2565b6040805160018082528183019092525f91816020015b611e036040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b815260200190600190039081611db857905050905085815f81518110611e2b57611e2b613c77565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca2989990611e9a908490869060040161442c565b5f604051808303815f87803b158015611eb1575f5ffd5b505af1158015611ec3573d5f5f3e3d5ffd5b50505050505050505050505b50565b611eda612d52565b5f816001600160401b03811115611ef357611ef3613670565b604051908082528060200260200182016040528015611f1c578160200160208202803683370190505b5090505f5b8281101561201657838382818110611f3b57611f3b613c77565b611f5192602060409092020190810191506134d0565b828281518110611f6357611f63613c77565b60200260200101906001600160a01b031690816001600160a01b031681525050838382818110611f9557611f95613c77565b9050604002016020016020810190611fad9190613c8b565b606b5f868685818110611fc257611fc2613c77565b611fd892602060409092020190810191506134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101611f21565b50604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906120679030905f90869060040161457d565b5f604051808303815f87803b15801561207e575f5ffd5b505af1158015612090573d5f5f3e3d5ffd5b505050507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac83836040516120c5929190613ca4565b60405180910390a1505050565b6120da6131b4565b5f6120e484610b84565b6067549091506001600160a01b031663f2e500b234835f60405190808252806020026020018201604052801561212e57816020015b60608152602001906001900390816121195790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016121609594939291906145ac565b5f604051808303818588803b158015612177575f5ffd5b505af1158015612189573d5f5f3e3d5ffd5b5050505050336001600160a01b0316846001600160401b03167f08de23359763aa62302ebcf98e51ce5f9f71f925679c5b7fc9d6cf634e6b4a7383805190602001206040516121da91815260200190565b60405180910390a350505050565b6121f0612d52565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906122429030905f9087908790600401614656565b5f604051808303815f87803b158015612259575f5ffd5b505af115801561226b573d5f5f3e3d5ffd5b505f925050505b818110156122d257606b5f84848481811061228f5761228f613c77565b90506020020160208101906122a491906134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319169055600101612272565b505050565b6122df612d52565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a98218219061232d90309085906004016141ab565b5f604051808303815f87803b158015612344575f5ffd5b505af1158015612356573d5f5f3e3d5ffd5b5050505050565b6040805180820182523081525f60208201819052915163105dea1f60e21b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c906123c0908590600401613bb6565b5f60405180830381865afa1580156123da573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124019190810190613bde565b90505f81516001600160401b0381111561241d5761241d613670565b60405190808252806020026020018201604052801561246157816020015b604080518082019091525f808252602082015281526020019060019003908161243b5790505b5090505f5b825181101561250c57604051806040016040528084838151811061248c5761248c613c77565b60200260200101516001600160a01b03168152602001606b5f8685815181106124b7576124b7613c77565b6020908102919091018101516001600160a01b031682528101919091526040015f20546001600160601b0316905282518390839081106124f9576124f9613c77565b6020908102919091010152600101612466565b509392505050565b61251c612d52565b6001600160a01b0381165f81815260666020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c906125c5908490600401613bb6565b5f60405180830381865afa1580156125df573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126069190810190613bde565b91505090565b612614612d52565b5f6040518060600160405280856001600160a01b03168152602001306001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050915250604051636e3492b560e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b5906126c19084906004016146c0565b5f604051808303815f87803b1580156126d8575f5ffd5b505af11580156126ea573d5f5f3e3d5ffd5b5050505050505050565b6126fc612dac565b6001600160a01b038516301461272557604051631280731d60e21b815260040160405180910390fd5b600183146127465760405163b1698da560e01b815260040160405180910390fd5b5f8484828161275757612757613c77565b905060200201602081019061276c9190613d13565b63ffffffff16146127905760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526066602052604090205460ff166127c857604051630444d2e160e21b815260040160405180910390fd5b6001600160a01b038681165f908152606860205260409020541615612800576040516342ee68b560e01b815260040160405180910390fd5b5f61283f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506131df92505050565b6001600160a01b038082165f90815260696020526040902054919250161561287a5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038088165f81815260686020908152604080832080549587166001600160a01b03199687168117909155835260699091528120805490931690911790915585908590816128d0576128d0613c77565b90506020020160208101906128e59190613d13565b63ffffffff16876001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a350505050505050565b612932612fb0565b5f5b81811015612b99575f60695f85858581811061295257612952613c77565b9050602002810190612964919061472e565b6129729060208101906134d0565b6001600160a01b03908116825260208201929092526040015f20541690508061299b5750612b91565b5f6040518060a00160405280836001600160a01b031681526020015f63ffffffff1681526020018686868181106129d4576129d4613c77565b90506020028101906129e6919061472e565b6129f490602081019061474c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612a3c57612a3c613c77565b9050602002810190612a4e919061472e565b612a5c90604081019061474c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612aa457612aa4613c77565b9050602002810190612ab6919061472e565b612ac4906060810190614791565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051633635205760e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690633635205790612b4a90309085906004016147d3565b5f604051808303815f875af1158015612b65573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b8c9190810190614881565b505050505b600101612934565b506040517f69e2dc7f4757ef3cbac3a5423ac42ce1938cb3b79c4f35563460926176265ce0905f90a15050565b6040518060a00160405280606d81526020016149bb606d913981565b612bea612d52565b6001600160a01b038116612c115760405163d92e233d60e01b815260040160405180910390fd5b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f36865e413bf7465ef494decdccf522701d4528249b08689f6b1b5b04eaa59a5e905f90a35050565b612c6a612d52565b6001600160a01b038116612c915760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f81815260666020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b612ce4612d52565b6001600160a01b038116612d495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611530565b611ecf81612f0f565b6033546001600160a01b031633146119cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611530565b336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16146119cb576040516323d871a560e01b815260040160405180910390fd5b5f828514612e065750818411612e1e565b816001600160a01b0316846001600160a01b03161090505b949350505050565b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba290612e8590339085906004016148c5565b602060405180830381865afa158015612ea0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec491906148fb565b611ecf5760405163668191af60e11b815260040160405180910390fd5b5f54610100900460ff16612f075760405162461bcd60e51b81526004016115309061491a565b6119cb61322e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610380546001600160a01b0316338114612fac5760405163283fa43d60e11b815260040160405180910390fd5b5050565b6065546001600160a01b031633146119cb57604051638e79fdb560e01b815260040160405180910390fd5b805160015b818110156122d2575f838281518110612ffb57612ffb613c77565b602002602001015190505f8290505b5f81118015613051575081516001600160a01b03168561302b600184614965565b8151811061303b5761303b613c77565b60200260200101515f01516001600160a01b0316115b156130aa5784613062600183614965565b8151811061307257613072613c77565b602002602001015185828151811061308c5761308c613c77565b602002602001018190525080806130a290614978565b91505061300a565b818582815181106130bd576130bd613c77565b60209081029190910101525050600101612fe0565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa15801561311f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613143919061498d565b90506131ae8463095ea7b360e01b8561315c8686613f9e565b6040516001600160a01b039092166024830152604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261325d565b50505050565b606a546001600160a01b031633146119cb576040516305067f3b60e21b815260040160405180910390fd5b5f81516014146132025760405163526c487560e11b815260040160405180910390fd5b50602081015160601c806132295760405163d92e233d60e01b815260040160405180910390fd5b919050565b5f54610100900460ff166132545760405162461bcd60e51b81526004016115309061491a565b6119cb33612f0f565b5f6132b1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133309092919063ffffffff16565b905080515f14806132d15750808060200190518101906132d191906148fb565b6122d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611530565b606061333e84845f85613348565b90505b9392505050565b6060824710156133a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611530565b5f5f866001600160a01b031685876040516133c491906149a4565b5f6040518083038185875af1925050503d805f81146133fe576040519150601f19603f3d011682016040523d82523d5f602084013e613403565b606091505b50915091506134148783838761341f565b979650505050505050565b6060831561348d5782515f03613486576001600160a01b0385163b6134865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611530565b5081612e1e565b612e1e83838151156134a25781518083602001fd5b8060405162461bcd60e51b8152600401611530919061362f565b6001600160a01b0381168114611ecf575f5ffd5b5f602082840312156134e0575f5ffd5b8135613341816134bc565b5f5f602083850312156134fc575f5ffd5b82356001600160401b03811115613511575f5ffd5b8301601f81018513613521575f5ffd5b80356001600160401b03811115613536575f5ffd5b8560208260061b840101111561354a575f5ffd5b6020919091019590945092505050565b5f5f83601f84011261356a575f5ffd5b5081356001600160401b03811115613580575f5ffd5b6020830191508360208260051b850101111561359a575f5ffd5b9250929050565b5f5f5f5f606085870312156135b4575f5ffd5b84356135bf816134bc565b935060208501356135cf816134bc565b925060408501356001600160401b038111156135e9575f5ffd5b6135f58782880161355a565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6133416020830184613601565b80356001600160401b0381168114613229575f5ffd5b5f60208284031215613667575f5ffd5b61334182613641565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156136a6576136a6613670565b60405290565b60405160c081016001600160401b03811182821017156136a6576136a6613670565b604051601f8201601f191681016001600160401b03811182821017156136f6576136f6613670565b604052919050565b5f6001600160401b0382111561371657613716613670565b5060051b60200190565b80356001600160601b0381168114613229575f5ffd5b5f82601f830112613745575f5ffd5b8135613758613753826136fe565b6136ce565b8082825260208201915060208360061b860101925085831115613779575f5ffd5b602085015b838110156137d05760408188031215613795575f5ffd5b61379d613684565b81356137a8816134bc565b81526137b660208301613720565b60208201528084525060208301925060408101905061377e565b5095945050505050565b5f6001600160401b038211156137f2576137f2613670565b50601f01601f191660200190565b5f82601f83011261380f575f5ffd5b813561381d613753826137da565b818152846020838601011115613831575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f60c08789031215613862575f5ffd5b863561386d816134bc565b9550602087013561387d816134bc565b945060408701356001600160401b03811115613897575f5ffd5b6138a389828a01613736565b94505060608701356138b4816134bc565b925060808701356138c4816134bc565b915060a08701356001600160401b038111156138de575f5ffd5b6138ea89828a01613800565b9150509295509295509295565b5f60208284031215613907575f5ffd5b81356001600160401b0381111561391c575f5ffd5b612e1e84828501613800565b5f60208284031215613938575f5ffd5b81356001600160401b0381111561394d575f5ffd5b820160c08185031215613341575f5ffd5b80356001600160801b0381168114613229575f5ffd5b5f5f5f60608486031215613986575f5ffd5b61398f84613641565b925061399d6020850161395e565b91506139ab6040850161395e565b90509250925092565b5f5f602083850312156139c5575f5ffd5b82356001600160401b038111156139da575f5ffd5b6139e68582860161355a565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015613a4757835180516001600160a01b031684526020908101516001600160601b03168185015290930192604090920191600101613a0b565b509095945050505050565b5f8151808452602084019350602083015f5b82811015613a8b5781516001600160a01b0316865260209586019590910190600101613a64565b5093949350505050565b602081525f6133416020830184613a52565b5f5f5f60408486031215613ab9575f5ffd5b8335613ac4816134bc565b925060208401356001600160401b03811115613ade575f5ffd5b613aea8682870161355a565b9497909650939450505050565b5f5f5f5f5f5f60808789031215613b0c575f5ffd5b8635613b17816134bc565b95506020870135613b27816134bc565b945060408701356001600160401b03811115613b41575f5ffd5b613b4d89828a0161355a565b90955093505060608701356001600160401b03811115613b6b575f5ffd5b8701601f81018913613b7b575f5ffd5b80356001600160401b03811115613b90575f5ffd5b896020828401011115613ba1575f5ffd5b60208201935080925050509295509295509295565b81516001600160a01b0316815260208083015163ffffffff1690820152604081015b92915050565b5f60208284031215613bee575f5ffd5b81516001600160401b03811115613c03575f5ffd5b8201601f81018413613c13575f5ffd5b8051613c21613753826136fe565b8082825260208201915060208360051b850101925086831115613c42575f5ffd5b6020840193505b82841015613c6d578351613c5c816134bc565b825260209384019390910190613c49565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c9b575f5ffd5b61334182613720565b602080825281018290525f8360408301825b858110156137d0578235613cc9816134bc565b6001600160a01b031682526001600160601b03613ce860208501613720565b16602083015260409283019290910190600101613cb6565b803563ffffffff81168114613229575f5ffd5b5f60208284031215613d23575f5ffd5b61334182613d00565b600181811c90821680613d4057607f821691505b602082108103613d5e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d74575f5ffd5b81516001600160401b03811115613d89575f5ffd5b8201601f81018413613d99575f5ffd5b8051613da7613753826136fe565b8082825260208201915060208360051b850101925086831115613dc8575f5ffd5b6020840193505b82841015613c6d578351613de2816134bc565b825260209384019390910190613dcf565b83516001600160a01b0316815260208085015163ffffffff16908201525f6080820160806040840152845190819052602085019060a08401905f5b81811015613e555783516001600160a01b0316835260209384019390920191600101613e2e565b505083810360608501526134148186613a52565b5f82601f830112613e78575f5ffd5b8151613e86613753826136fe565b8082825260208201915060208360051b860101925085831115613ea7575f5ffd5b602085015b838110156137d0578051835260209283019201613eac565b5f60208284031215613ed4575f5ffd5b81516001600160401b03811115613ee9575f5ffd5b8201601f81018413613ef9575f5ffd5b8051613f07613753826136fe565b8082825260208201915060208360051b850101925086831115613f28575f5ffd5b602084015b83811015613f685780516001600160401b03811115613f4a575f5ffd5b613f5989602083890101613e69565b84525060209283019201613f2d565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417613bd857613bd8613f73565b80820180821115613bd857613bd8613f73565b5f60018201613fc257613fc2613f73565b5060010190565b602080825282516040838301528051606084018190525f929190910190829060808501905b808310156140195783516001600160a01b031682526020938401936001939093019290910190613fee565b506001600160401b03602087015116604086015280935050505092915050565b5f60208284031215614049575f5ffd5b81516001600160401b0381111561405e575f5ffd5b8201601f8101841361406e575f5ffd5b805161407c613753826137da565b818152856020838501011115614090575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b601f8211156122d257805f5260205f20601f840160051c810160208510156140d25750805b601f840160051c820191505b81811015612356575f81556001016140de565b81516001600160401b0381111561410a5761410a613670565b61411e816141188454613d2c565b846140ad565b6020601f821160018114614150575f83156141395750848201515b5f19600385901b1c1916600184901b178455612356565b5f84815260208120601f198516915b8281101561417f578785015182556020948501946001909201910161415f565b508482101561419c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03831681526040602082018190525f9061333e90830184613601565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b8281101561425057605f19878603018452815163ffffffff8151168652602081015190506040602087015261423a6040870182613a52565b9550506020938401939190910190600101614202565b5092979650505050505050565b604081525f61426f6040830185613601565b82810360208401526142818185613601565b95945050505050565b8035613229816134bc565b5f82601f8301126142a4575f5ffd5b81356142b2613753826136fe565b8082825260208201915060208360061b8601019250858311156142d3575f5ffd5b602085015b838110156137d057604081880312156142ef575f5ffd5b6142f7613684565b8135614302816134bc565b81526020828101358183015290845292909201916040016142d8565b5f60c0823603121561432e575f5ffd5b6143366136ac565b82356001600160401b0381111561434b575f5ffd5b61435736828601613736565b8252506143666020840161428a565b602082015260408301356001600160401b03811115614383575f5ffd5b61438f36828601614295565b6040830152506143a160608401613d00565b60608201526143b260808401613d00565b608082015260a08301356001600160401b038111156143cf575f5ffd5b6143db36828601613800565b60a08301525092915050565b5f8151808452602084019350602083015f5b82811015613a8b57815180516001600160a01b0316875260209081015181880152604090960195909101906001016143f9565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b8281101561425057868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b808310156144e357835180516001600160a01b031683526020908101516001600160601b0316908301526040820191506020840193506001830192506144a2565b506020840151925061450060208a01846001600160a01b03169052565b6040840151925088810360408a015261451981846143e7565b925050506060820151614534606089018263ffffffff169052565b50608082015161454c608089018263ffffffff169052565b5060a0820151915086810360a08801526145668183613601565b965050506020938401939190910190600101614472565b6001600160a01b038416815263ffffffff831660208201526060604082018190525f9061428190830184613a52565b60a081525f6145be60a0830188613601565b828103602084015280875180835260208301915060208160051b84010160208a015f5b8381101561461357601f198684030185526145fd838351613601565b60209586019590935091909101906001016145e1565b50508581036040870152614627818a613601565b94505050505061464260608301856001600160801b03169052565b6001600160801b0383166080830152613c6d565b6001600160a01b038516815263ffffffff8416602082015260606040820181905281018290525f8360808301825b858110156146b4578235614697816134bc565b6001600160a01b0316825260209283019290910190600101614684565b50979650505050505050565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b808310156137d05763ffffffff8451168252602082019150602084019350600183019250614705565b5f8235607e19833603018112614742575f5ffd5b9190910192915050565b5f5f8335601e19843603018112614761575f5ffd5b8301803591506001600160401b0382111561477a575f5ffd5b6020019150600581901b360382131561359a575f5ffd5b5f5f8335601e198436030181126147a6575f5ffd5b8301803591506001600160401b038211156147bf575f5ffd5b60200191503681900382131561359a575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f9061481b60e0840182613a52565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b808310156148635783518252602082019150602084019350600183019250614840565b506080860151858203603f190160c087015292506134148184613601565b5f5f60408385031215614892575f5ffd5b825160208401519092506001600160401b038111156148af575f5ffd5b6148bb85828601613e69565b9150509250929050565b6001600160a01b038316815260608101613341602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f6020828403121561490b575f5ffd5b81518015158114613341575f5ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81810381811115613bd857613bd8613f73565b5f8161498657614986613f73565b505f190190565b5f6020828403121561499d575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f64617461686176656e2d78797a2f64617461686176656e2f726566732f68656164732f6d61696e2f636f6e7472616374732f6465706c6f796d656e74732f6d657461646174612e6a736f6ea264697066735822122048ac0856e7f7d95ad025b2c185bc45d7ad359cba06f9ab1b39740f2c5557920f64736f6c634300081c00330000000000", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "30": { - "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955", - "0x000000000000000000000000000000000000000000000000000000000000006c": "0x302e312e3000000000000000000000000000000000000000000000000000000a", - "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000000000000000000000000000000000000000006a": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570", - "0xf028937c64180bb2d245c1eb4b6ebc3d79a092cccfbb2b854f9d7b4da63470b6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "0": { - "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", - "storage": {} - }, - "41": { - "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", - "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc93014608060405260043610610034575f3560e01c8063d3b08db814610038575b5f5ffd5b61004b610046366004610399565b610061565b604051610058919061049c565b60405180910390f35b80518051606091825f5b82518163ffffffff1610156101055781838263ffffffff1681518110610093576100936104d1565b60200260200101516040516020016100c3919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526100e192916020016104fc565b604051602081830303815290604052915080806100fd9061052c565b91505061006b565b50630e02a00760e31b5f80610119866101b9565b8461018b8a602001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6040516020016101a096959493929190610550565b6040516020818303038152906040529350505050919050565b6060603f8263ffffffff16116101f657604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff16116102555761023261021e6403fffffffc600285901b1660016105a9565b600881811b62ffff001691901c60ff161790565b6040516020016101e0919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102c7576102a460028363ffffffff16901b600261028091906105a9565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016101e0919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016101e0565b919050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561034b5761034b610314565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561037a5761037a610314565b604052919050565b803567ffffffffffffffff8116811461030f575f5ffd5b5f602082840312156103a9575f5ffd5b813567ffffffffffffffff8111156103bf575f5ffd5b8201604081850312156103d0575f5ffd5b6103d8610328565b813567ffffffffffffffff8111156103ee575f5ffd5b8201601f810186136103fe575f5ffd5b803567ffffffffffffffff81111561041857610418610314565b8060051b61042860208201610351565b91825260208184018101929081019089841115610443575f5ffd5b6020850194505b8385101561047c57843592506001600160a01b038316831461046a575f5ffd5b8282526020948501949091019061044a565b85525061048f9250505060208301610382565b6020820152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f61051061050a83866104e5565b846104e5565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff810361054757610547610518565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f61058c61058660068401876104e5565b856104e5565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908111156105c5576105c5610518565b9291505056fea264697066735822122025360fa68d61e06c0f66cb21e1db2778b987cc6ccef457fe1dbef98965e5dabb64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "14": { - "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "47": { - "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220d968f6e7b0fa23955f1f9580db081bbf816d7e99d0b3ab6d1bf5c644ea927f8d64736f6c634300081c003300", - "storage": { - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" - } - }, - "11": { - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a2646970667358221220d6b7192f32171e73f3ca8608f2cb38bc543e4d751099308262bcc0a34560c16464736f6c634300081c003300", - "storage": {} - }, - "20": { - "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1" - } - }, - "21": { - "address": "0x0000F90827F1C53a10cb7A02335B175320002935", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000003": "0xa99147a3667a8eb548084f3b6707464511f95729de23ece92d2338cd30089454", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0xb5170f167657a00342e3fe9e47d6b50620b82f7aab8adfaf0a1a9e8d0fe1826f", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0x7ade5f4741b6cd604c6c36220b849eec3e5506e694461eed042be0bee9b40e3a", - "0x000000000000000000000000000000000000000000000000000000000000001f": "0x13d15aee8a15e4b8749caf33a192ddcb7f032610a8c9838b5a789031ce7d04b1", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0x03ada285fc0312c1d6643a4dcd44757c6527afadbc2254963ca9fc141f442c6c", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0xdeba06e02a24b67806fe6a6e1e5caee731ce6fde3d3381c8a18c474b236cdf91", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x57dee98ad04d3ee2c64a80803197732c666b3ad5b81d46a47b1d3a36073b1b99", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x9f6909f2a37afdb30685fd8bebb2b4efa17e92badb1d637f6f9c3f8bb03598e0", - "0x0000000000000000000000000000000000000000000000000000000000000014": "0xc07698746c4b092f71f0626762be0ac73f6b6d4060ce748b83930c8e0feb5ec7", - "0x0000000000000000000000000000000000000000000000000000000000000017": "0xb578984ee5a25e491b8b91fe5738863afc9fd72e20db71a537bd0746f6501ae5", - "0x000000000000000000000000000000000000000000000000000000000000001e": "0xa0cdae7cf561423b2b9dd611c274ea070dacaabaaf08525e4ea5645eb1754238", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9baf8be0448ceb2fe4d7c6efcd97b5ff028717312e253405cdb3a97f18d9ff1d", - "0x0000000000000000000000000000000000000000000000000000000000000013": "0x283a15c7a951c1c1824323f27d4c5ce16b152042c0e63ffa4b26237e40918b26", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0xc4c579b8e50cb949172079f267619ab4f03e52279cce7657c7fd27883e11c2c4", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0xb75170a970878fd10d7a3004b868f0415f2dc8f3fe5d1d0c3115ca9a17262712", - "0x0000000000000000000000000000000000000000000000000000000000000020": "0x451eeee7b7fbcaacbbffb9092d03b7e965a5ff9708827ef224ddae71c3b0c54b", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0x59b2481df235be91dca67568850da8a42af918bca926bdbe8cad785a6d525b89", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0xebf7db7f90bf0348379eb5d85f128d2c2cad44e8357df3a9210edbc2f957d405", - "0x000000000000000000000000000000000000000000000000000000000000001c": "0xc7433e12844531c46e7759ea423f442d610016c725fe276703dbc9cb7c29e6b2", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xc612971b489e1dc6e8a492de2be48c2f8d7be33a1f6cc596f5cd499abda39f7c", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0xd09439c9ff098be14fe23dbef83b00d8fd0f1f35ce17b40c6bdb2337dc43f7a5", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0xde39f3b1ee749efb387b192f37076849963b6ba64d83ee36d7be59c359253008", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x38ab1fa72f0af199fdd3ac0a9c3ec18b063cc04fae7e480df86a0e691879afe3", - "0x0000000000000000000000000000000000000000000000000000000000000016": "0xf22a31fe4afcf737e317ac1605d0b7faacdc0d13c0c2e467b0a6680d1fd4cb79", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x167642acf19be769bfe02e92675ab0b0b8c1c458df9359abf6775b4ee3ce3d75", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x63d01129b1c2c0fb4bf0874c36150df34b6b91458b287f70254cd65dc5c59e0a", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x09b5091e8bd5510b18aeb0c50facc8249469b4241214f2adfc3b78aa98a67bec", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x96ebad3cf032c7e3988f4af7c2116a1be08ff9264dac4baf5ab9fe9465f285d0", - "0x0000000000000000000000000000000000000000000000000000000000000018": "0x4d0e4c829f3bfaf1ec2387b0cf3b1c026744a1bc9d1e8fb2f4642c5875200f46", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0xfaea7d763c2a8af2bfe5e45daab9330163d0dc069f962f8ac3a1ab44bdf06aef", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x49cef861dc6ab43198a4e02045405e88bcedc727f2b4c02bfe09b8d666192d0c", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0xb3142ba723aedb3c53c52996e64c1ecaede4e6c4fa7772ffdc11b959687cff60", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x91da0fa1a51c896293c7a55bac40f462f25e40069fd07dcf487966baa41fd98e", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf0d291edb3039a04bfb7538a50fd57a848aeb6b8a7895daa7f47337836714f21", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0x9ae6a2fb6d5e8eee7bcf9d70888e9d5e91b9820e65fe37a0d0dab4e62fd79646", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0xedc29ccbd503e6b6660b74d91542b5e4a0533397e9edbea8eb25e0cadec8f14f", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xf139622ae8803eeaf91cb537329faf9e65156fc262b04d24e13b547a96f28fb5", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0x80100777b1705e927eb4e2bd187762fa29334e926f3360328af6f8f76b91e213", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x7a540272d3fdbf6c2f7c497ad23a3beade50ad8273400797192f3004ee5c6346", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xde4fdc11e07447e57d0777b751f7933e376c40443c024a065b038ff7fdd9a579", - "0x0000000000000000000000000000000000000000000000000000000000000019": "0x35c95e6c9a4a17a7763b91e0717af31a8d071b9895aa5d0d985a9d83e1cf02ca", - "0x000000000000000000000000000000000000000000000000000000000000001a": "0xc96aadcb7e6f036336ebb127fd27baf235a5c24880d04c9689d0c3f567c28ad5", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x8127fce389e66429e5f310b67af0242f5c51d3c2d903daee4bf7c3f38f4968c8", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0x837545da27c056dd5596b4db83508ed611c26993b3b0fe63292aa7ee94499799", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xacecd2de3886666da7ca34057957544a82ef715f9be4ddf4462861bb8e1aea28", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0xe40d3dfdf95c08f8a286bd1f7ee68611e7362f7369fbc71ff938a3111f00a509", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0xafb411ed0115e909a2b03318d6b2447d1de5727049b08fdb9085f3ff44e83e67", - "0x0000000000000000000000000000000000000000000000000000000000000021": "0xc5afe51046fbfae11caafb4713e2a1a7682030cd042e9c229f9ad9ff1552a770", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x24e7bdc33ec55fff98c46d9cb391daeeed5859e0155f31b420f09b6bbca534e7", - "0x0000000000000000000000000000000000000000000000000000000000000015": "0x13aa23722d3bba93c9d9eb2596c04f69ca8bd5355a1fbcb39838277bef9b4557", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x6125d05861e4c32e12cf81c84b11daf64fe1dbc81bb322438ab25e3d222f65ac", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xbe3accdbd1aee065c69f9c5e24a0390d0724c553c1d73b7317efb8858b32b9b3", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0x7e94366e39484643875f5842255fa80e54853a3f38c52c3744ad9e28694130d1", - "0x000000000000000000000000000000000000000000000000000000000000001b": "0x6b383f9adbb00b6fd030c6e8b1bfbe11750148b6f7d8038d8c15266b773f6b72", - "0x000000000000000000000000000000000000000000000000000000000000001d": "0xb0078c69e5e2679a51f58060b0ad5071e441c2e127355920d50b45faecfea821", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0xdbe2c5135efd48f28fbfee4527928756e0fd034e09dd045f17ae3bde4c4b1072", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0xb93640ba68bb1ed67f8acc60cd728e0b3706b5f8258d9456334a9358aed34075", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0xa77928b816460ea9725084868c56588bb3e0c6210c0cc78f596c4878ce1c2423", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x51753e9d17e9b1d8eee925eea3c04f467087655a3e154a4bdcdd84524ab5fa18", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x27cc3744e726db695ee4811c6e72e7082261f72b0eede2514b6dde4dc2a3b3a0", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x809483d3c0ca7b38fe2ece49b50e68de78fc8f3df54556457738acd227fcc06d", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x74399ad53572167c11bea07f12bf35aa07d3fb2ef39e0adbc240a8de3591f16d", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0xb977713cb714284a5fde54b542e3b555400161a8672e89c6050fefd049a14075" - } - }, - "15": { - "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220d1857c1d79adf09a4456300c200565d4db0d5bcc151c34d3d6a7ed403fb9defd64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9" - } - }, - "44": { - "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", - "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220d2f603e4644996fdd6f5bfe996a433ec4c63b91e433ec6617ddd8c10790babb164736f6c634300081c003300000000000000000000000000", - "storage": {} - }, "1": { "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", "code": "0x732279b7a0a67db372996a5fab50d91eaa73d2ebe63014608060405260043610610034575f3560e01c8063a3499c7314610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610230565b610059565b005b61006b836001600160a01b03166101b3565b610088576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f146100b2576040516323e13ec960e21b815260040160405180910390fd5b6100da837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f5f846001600160a01b0316836040516024016100f79190610309565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161012c919061033e565b5f60405180830381855af49150503d805f8114610164576040519150601f19603f3d011682016040523d82523d5f602084013e610169565b606091505b509150915061017882826101fd565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f6001600160a01b0382163f158015906101f757507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383163f14155b92915050565b6060821561020c5750806101f7565b8151156100345781518083602001fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610242575f5ffd5b83356001600160a01b0381168114610258575f5ffd5b925060208401359150604084013567ffffffffffffffff81111561027a575f5ffd5b8401601f8101861361028a575f5ffd5b803567ffffffffffffffff8111156102a4576102a461021c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156102d3576102d361021c565b6040528181528282016020018810156102ea575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f82518060208501845e5f92019182525091905056fea26469706673582212204f9eff25a489952d6ace57dae13f4311e26f51d13db35754950e1446aa6c4c3264736f6c634300081c003300", "storage": {} }, - "16": { - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea2646970667358221220046dc7d429ea210c611797c7b4d01fa9b6906f8c2a4299f763335c848dfa743864736f6c634300081c003300000000000000", - "storage": {} - }, - "33": { - "address": "0x9A676e781A523b5d0C0e43731313A708CB607508", + "27": { + "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f", - "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001" + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319" } }, - "38": { + "30": { + "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "39": { "address": "0x59b670e9fA9D0A427751Af201D676719a970857b", "code": "0x6080604052600436106101bd575f3560e01c80636691954e116100f2578063b522538a11610092578063d06d558711610062578063d06d55871461063f578063dda3346c1461065e578063ee94d67c1461067d578063f074ba621461069c575f5ffd5b8063b522538a146105ce578063c44e30dc146105ed578063c490744214610601578063c4d66de814610620575f5ffd5b80637439841f116100cd5780637439841f1461053457806374cdd7981461056957806388676cad1461059c5780639b4e4634146105bb575f5ffd5b80636691954e146104d65780636c0d2d5a146104e95780636fcd0e5314610508575f5ffd5b806342ecff2a1161015d57806352396a591161013857806352396a591461043657806354fd4d501461046a578063587533571461048b57806358eaee79146104aa575f5ffd5b806342ecff2a146102f25780634665bcda1461031857806347d283721461034b575f5ffd5b80632340e8d3116101985780632340e8d31461027a5780633474aa161461028f5780633f5fa57a146102c05780633f65cf19146102d3575f5ffd5b8063039157d2146101fb5780630b18ff661461021c5780631e51553314610258575f5ffd5b366101f7576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b348015610206575f5ffd5b5061021a610215366004613a3e565b6106bb565b005b348015610227575f5ffd5b5060335461023b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610263575f5ffd5b5061026c6109f0565b60405190815260200161024f565b348015610285575f5ffd5b5061026c60395481565b34801561029a575f5ffd5b506034546001600160401b03165b6040516001600160401b03909116815260200161024f565b61021a6102ce366004613af9565b610a11565b3480156102de575f5ffd5b5061021a6102ed366004613b37565b610d49565b3480156102fd575f5ffd5b50603a546102a890600160401b90046001600160401b031681565b348015610323575f5ffd5b5061023b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b348015610356575f5ffd5b506103db6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161024f91905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b348015610441575f5ffd5b506102a8610450366004613c0e565b603b6020525f90815260409020546001600160401b031681565b348015610475575f5ffd5b5061047e610fd2565b60405161024f9190613c57565b348015610496575f5ffd5b50603e5461023b906001600160a01b031681565b3480156104b5575f5ffd5b506104c96104c4366004613ca6565b610ffd565b60405161024f9190613d0c565b61021a6104e4366004613af9565b61105f565b3480156104f4575f5ffd5b5061026c610503366004613c0e565b611361565b348015610513575f5ffd5b50610527610522366004613d1a565b61146f565b60405161024f9190613d31565b34801561053f575f5ffd5b506104c961054e366004613d1a565b5f90815260366020526040902054600160c01b900460ff1690565b348015610574575f5ffd5b5061023b7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b3480156105a7575f5ffd5b5061021a6105b6366004613d91565b61151a565b61021a6105c9366004613dac565b61160f565b3480156105d9575f5ffd5b506105276105e8366004613ca6565b61178d565b3480156105f8575f5ffd5b5061026c61187c565b34801561060c575f5ffd5b5061021a61061b366004613e41565b611898565b34801561062b575f5ffd5b5061021a61063a366004613e6b565b6119cf565b34801561064a575f5ffd5b5061021a610659366004613e6b565b611b19565b348015610669575f5ffd5b5061021a610678366004613f56565b611bad565b348015610688575f5ffd5b50603a546102a8906001600160401b031681565b3480156106a7575f5ffd5b5061021a6106b6366004614028565b611d0c565b604051635ac86ab760e01b8152600660048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610721573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610745919061408f565b156107635760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ed919061408f565b1561080b5760405163840a48d560e01b815260040160405180910390fd5b5f61084f61081985806140aa565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156108bd576108bd613cd8565b60028111156108ce576108ce613cd8565b81525050905080604001516001600160401b0316876001600160401b03161161090a576040516337e07ffd60e01b815260040160405180910390fd5b60018160600151600281111561092257610922613cd8565b146109405760405163d49e19a760e01b815260040160405180910390fd5b61098361094d86806140aa565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061212a92505050565b6109a05760405163161ce5ed60e31b815260040160405180910390fd5b6109b26109ac88611361565b87612152565b6109de6109be886121f7565b87356109ca88806140aa565b6109d760208b018b6140ef565b87516122ce565b6109e75f612402565b50505050505050565b5f610a0c71bbddc7ce488642fb579f8b00f3a590007251612582565b905090565b604051635ac86ab760e01b8152600a60048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b919061408f565b15610ab95760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b0316331480610adc5750603e546001600160a01b031633145b610af95760405163427a777960e01b815260040160405180910390fd5b5f610b0261187c565b90505f610b0f8483614145565b905080341015610b325760405163356680b760e01b815260040160405180910390fd5b5f610b3d823461415c565b90505f5b85811015610d305736878783818110610b5c57610b5c61416f565b9050602002810190610b6e9190614183565b90505f610bb7610b7e83806140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b90505f610bc483806140ef565b610bd46040860160208701613c0e565b604051602001610be6939291906141a1565b60405160208183030381529060405290505f710961ef480eb55e80d19ad83579a64c0070026001600160a01b03168883604051610c2391906141d9565b5f6040518083038185875af1925050503d805f8114610c5d576040519150601f19603f3d011682016040523d82523d5f602084013e610c62565b606091505b5050905080610c845760405163fc52d48360e01b815260040160405180910390fd5b610c946040850160208601613c0e565b6001600160401b03165f03610cd25760405183907f60d8ca014d4765a2b8b389e25714cb1cef83b574222911a01d90c1bd69d2d320905f90a2610d20565b827f8b2737bb64ab2f2dc09552dfa1c250399e6a42c7ea9f0e1c658f5d65d708ec05610d046040870160208801613c0e565b6040516001600160401b03909116815260200160405180910390a25b505060019092019150610b419050565b508015610d4157610d413382612699565b505050505050565b6033546001600160a01b0316331480610d6c5750603e546001600160a01b031633145b610d895760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610def573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e13919061408f565b15610e315760405163840a48d560e01b815260040160405180910390fd5b8584148015610e3f57508382145b610e5c576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610e92576040516337e07ffd60e01b815260040160405180910390fd5b610ea4610e9e8a611361565b89612152565b5f805b87811015610f3d57610f298b8b358b8b85818110610ec757610ec761416f565b9050602002016020810190610edc91906141e4565b8a8a86818110610eee57610eee61416f565b9050602002810190610f0091906140ef565b8a8a88818110610f1257610f1261416f565b9050602002810190610f2491906140aa565b6127ae565b610f339083614208565b9150600101610ea7565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a1ca780b906064015f604051808303815f87803b158015610fb0575f5ffd5b505af1158015610fc2573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610a0c7f76312e302e300000000000000000000000000000000000000000000000000006612caf565b5f5f61103d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b604051635ac86ab760e01b8152600960048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156110c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e9919061408f565b156111075760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b031633148061112a5750603e546001600160a01b031633145b6111475760405163427a777960e01b815260040160405180910390fd5b5f6111506109f0565b90505f61115d8483614145565b9050803410156111805760405163356680b760e01b815260040160405180910390fd5b5f61118b823461415c565b90505f5b85811015610d3057368787838181106111aa576111aa61416f565b90506020028101906111bc9190614183565b90505f6111cc610b7e83806140ef565b90505f6111df610b7e60208501856140ef565b90505f6111eb8261146f565b905060018160600151600281111561120557611205613cd8565b146112235760405163d49e19a760e01b815260040160405180910390fd5b5f61122e85806140ef565b61123b60208801886140ef565b60405160200161124e949392919061421b565b60405160208183030381529060405290505f71bbddc7ce488642fb579f8b00f3a5900072516001600160a01b03168a8360405161128b91906141d9565b5f6040518083038185875af1925050503d805f81146112c5576040519150601f19603f3d011682016040523d82523d5f602084013e6112ca565b606091505b50509050806112ec5760405163fc52d48360e01b815260040160405180910390fd5b8385036113225760405185907fc97b965b92ae7fd20095fe8eb7b99f81f95f8c4adffb22a19116d8eb2846b016905f90a261134f565b604051849086907f42f9c9db2ca443e9ec62f4588bd0c9b241065c02c2a8001ac164ae1282dc7b94905f90a35b50506001909401935061118f92505050565b5f61136f611fff600c614145565b6113826001600160401b0384164261415c565b106113a057604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f19818403018152908290526113e7916141d9565b5f60405180830381855afa9150503d805f811461141f576040519150601f19603f3d011682016040523d82523d5f602084013e611424565b606091505b509150915081801561143657505f8151115b6114535760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190611467919061423a565b949350505050565b611496604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561150057611500613cd8565b600281111561151157611511613cd8565b90525092915050565b6033546001600160a01b031633148061153d5750603e546001600160a01b031633145b61155a5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156115c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e4919061408f565b156116025760405163840a48d560e01b815260040160405180910390fd5b61160b82612402565b5050565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461165857604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec800000146116815760405163049696b360e31b815260040160405180910390fd5b7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1416001600160a01b031663228951186801bc16d674ec80000087876116c4612cec565b8888886040518863ffffffff1660e01b81526004016116e896959493929190614279565b5f604051808303818588803b1580156116ff575f5ffd5b505af1158015611711573d5f5f3e3d5ffd5b50505050507fa01003766d3cd97cf2ade5429690bf5d206be7fb01ef9d3a0089ecf67bc1121961177586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b60405190815260200160405180910390a15050505050565b6117b4604080516080810182525f8082526020820181905291810182905290606082015290565b60365f6117f585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561186157611861613cd8565b600281111561187257611872613cd8565b9052509392505050565b5f610a0c710961ef480eb55e80d19ad83579a64c007002612582565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116146118e157604051633213a66160e21b815260040160405180910390fd5b5f6118f0633b9aca00836142db565b9050611909633b9aca006001600160401b038316614145565b6034549092506001600160401b03908116908216111561193c576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906119599084906001600160401b03166142ee565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516119b891815260200190565b60405180910390a26119ca8383612699565b505050565b5f54610100900460ff16158080156119ed57505f54600160ff909116105b80611a065750303b158015611a0657505f5460ff166001145b611a6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611a8f575f805461ff0019166101001790555b6001600160a01b038216611ab6576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b038416179055801561160b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b03163314611b445760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314611bd85760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015611c3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c62919061408f565b15611c805760405163840a48d560e01b815260040160405180910390fd5b8251845114611ca2576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611d0557611cfd83858381518110611cc357611cc361416f565b6020026020010151878481518110611cdd57611cdd61416f565b60200260200101516001600160a01b0316612d1c9092919063ffffffff16565b600101611ca4565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015611d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d96919061408f565b15611db45760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f819003611de857604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b90049091166080820152611e4f611e47836121f7565b825188612d6e565b5f805b858110156120af5736878783818110611e6d57611e6d61416f565b9050602002810190611e7f919061430d565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611eef57611eef613cd8565b6002811115611f0057611f00613cd8565b9052509050600181606001516002811115611f1d57611f1d613cd8565b14611f295750506120a7565b856001600160401b031681604001516001600160401b031610611f4d5750506120a7565b5f8080611f5d848a8f3588612e2f565b60208b0180519396509194509250611f7482614321565b62ffffff16905250608088018051849190611f9090839061433e565b6001600160401b0316905250606088018051839190611fb090839061435d565b60070b905250611fc0818861433e565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561206457612064613cd8565b021790555050604051863591506001600160401b038b16907fe4866335761a51dcaff766448ab0af6064291ee5dc94e68492bb9cd757c1e350905f90a350505050505b600101611e52565b506001600160401b038084165f908152603b60205260408120805484939192916120db9185911661433e565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506109e782612f45565b5f815f8151811061211b5761211b61416f565b60200260200101519050919050565b5f8160038151811061213e5761213e61416f565b60200260200101515f5f1b14159050919050565b61215e60036020614145565b61216b60208301836140ef565b90501461218b576040516313717da960e21b815260040160405180910390fd5b6121da61219b60208301836140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925050843590506003613165565b61160b576040516309bde33960e01b815260040160405180910390fd5b5f5f7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612255573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612279919061438c565b9050806001600160401b03165f036122a4576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b031611156122c55760016122c7565b5f5b9392505050565b600884146122ef5760405163200591bd60e01b815260040160405180910390fd5b5f6122f98861319a565b90508061230860286001614208565b6123129190614208565b61231d906020614145565b831461233c576040516313717da960e21b815260040160405180910390fd5b5f6123788787808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506131c292505050565b90505f64ffffffffff841661238f60286001614208565b600b901b1790506123d986868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d9250869150859050613165565b6123f6576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b0316156124325760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603612460576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b031661247c633b9aca00476142db565b61248691906142ee565b905081801561249c57506001600160401b038116155b156124ba576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a001604052806124cf42611361565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff000000000000000019909216919091179055905061253381612f45565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f5f836001600160a01b03166040515f60405180830381855afa9150503d805f81146125ca576040519150601f19603f3d011682016040523d82523d5f602084013e6125cf565b606091505b50915091508180156125e2575080516020145b6125ff5760405163c90158af60e01b815260040160405180910390fd5b611467816143a7565b5f815160301461262b57604051634f88323960e11b815260040160405180910390fd5b6040516002906126419084905f906020016143ca565b60408051601f198184030181529082905261265b916141d9565b602060405180830381855afa158015612676573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611059919061423a565b804710156126e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611a65565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612732576040519150601f19603f3d011682016040523d82523d5f602084013e612737565b606091505b50509050806119ca5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611a65565b5f5f6127eb8484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561285957612859613cd8565b600281111561286a5761286a613cd8565b90525090505f8160600151600281111561288657612886613cd8565b146128a4576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b0380166128e98686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061349092505050565b6001600160401b03160361291057604051631958236d60e21b815260040160405180910390fd5b6001600160401b0380166129558686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134b492505050565b6001600160401b03161461297c57604051632eade63760e01b815260040160405180910390fd5b612984612cec565b61298d906143a7565b6129c88686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134cb92505050565b1480612a1d57506129d76134df565b6129e0906143a7565b612a1b8686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134cb92505050565b145b612a3a57604051633772dd5360e11b815260040160405180910390fd5b5f612a768686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134fb92505050565b9050612a8f612a848c6121f7565b8b88888c8c8f6122ce565b60398054905f612a9e836143ee565b9091555050603a545f90600160401b90046001600160401b031615612ad557603a54600160401b90046001600160401b0316612ae2565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612bb757612bb7613cd8565b021790555050603d8054849250601390612be2908490600160981b90046001600160401b031661433e565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f101790c2993f6a4d962bd17c786126823ba1c4cf04ff4cccb2659d50fb20aee884604051612c3791815260200190565b60405180910390a1604080518581526001600160401b03838116602083015284168183015290517fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f9181900360600190a1612c9f633b9aca006001600160401b038416614145565b9c9b505050505050505050505050565b60605f612cbb83613512565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604051606090612d0890600160f81b905f903090602001614406565b604051602081830303815290604052905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119ca908490613539565b5f612d788461319a565b9050612d85816003614208565b612d90906020614145565b612d9d60208401846140ef565b905014612dbd576040516313717da960e21b815260040160405180910390fd5b6003811b600c17612e12612dd460208501856140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250508635905084613165565b611d05576040516309bde33960e01b815260040160405180910390fd5b5f5f5f866020015192505f612e4886895f01518761360c565b9050836001600160401b0316816001600160401b031614612ebc57612e6d8482614444565b60408051873581526001600160401b038a8116602083015284168183015290519194507fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f919081900360600190a15b6001600160401b0380821660208a0181905290881660408a01525f03612f3a5760398054905f612eeb83614473565b909155505060026060890152612f0083614488565b6040519092508535906001600160401b038916907f5ce0aa04ae51d52da6e680fbe0336d2e2432f7c3dc2d4f3193204c57b9072107905f90a35b509450945094915050565b8051603c556020810151603d805460408401516060850151608086015162ffffff9095166affffffffffffffffffffff19909316831763010000006001600160401b0393841602176fffffffffffffffffffffffffffffffff60581b1916600160581b9183169190910267ffffffffffffffff60981b191617600160981b919094160292909217905515612fd65750565b60808101516034545f91612ff2916001600160401b031661433e565b90505f82606001518360400151613009919061435d565b60408401516034805492935090915f9061302d9084906001600160401b031661433e565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061307d90633b9aca00908516614145565b90505f613092633b9aca00600785900b6144ad565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a1ca780b906064015f604051808303815f87803b158015613148575f5ffd5b505af115801561315a573d5f5f3e3d5ffd5b505050505050505050565b5f83613184576040516329e7276760e11b815260040160405180910390fd5b836131908685856136ea565b1495945050505050565b5f808260018111156131ae576131ae613cd8565b146131ba576006611059565b600592915050565b5f60018251116131e55760405163f8ef036760e01b815260040160405180910390fd5b6131ef82516137dd565b61320c5760405163f6558f5160e01b815260040160405180910390fd5b5f6002835161321b91906142db565b90505f816001600160401b0381111561323657613236613e86565b60405190808252806020026020018201604052801561325f578160200160208202803683370190505b5090505f5b82811015613359576002856132798383614145565b815181106132895761328961416f565b60200260200101518683600261329f9190614145565b6132aa906001614208565b815181106132ba576132ba61416f565b60200260200101516040516020016132dc929190918252602082015260400190565b60408051601f19818403018152908290526132f6916141d9565b602060405180830381855afa158015613311573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613334919061423a565b8282815181106133465761334661416f565b6020908102919091010152600101613264565b505b8160011461346d5761336e6002836142db565b91505f5b82811015613467576002826133878383614145565b815181106133975761339761416f565b6020026020010151838360026133ad9190614145565b6133b8906001614208565b815181106133c8576133c861416f565b60200260200101516040516020016133ea929190918252602082015260400190565b60408051601f1981840301815290829052613404916141d9565b602060405180830381855afa15801561341f573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613442919061423a565b8282815181106134545761345461416f565b6020908102919091010152600101613372565b5061335b565b805f8151811061347f5761347f61416f565b602002602001015192505050919050565b5f611059826005815181106134a7576134a761416f565b60200260200101516137fc565b5f611059826006815181106134a7576134a761416f565b5f8160018151811061211b5761211b61416f565b604051606090612d0890600160f91b905f903090602001614406565b5f611059826002815181106134a7576134a761416f565b5f60ff8216601f81111561105957604051632cd44ac360e21b815260040160405180910390fd5b5f61358d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138639092919063ffffffff16565b905080515f14806135ad5750808060200190518101906135ad919061408f565b6119ca5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a65565b5f61361960266001614208565b613624906020614145565b61363160408401846140ef565b905014613651576040516313717da960e21b815260040160405180910390fd5b5f61365d6004856144dc565b64ffffffffff1690506136b661367660408501856140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992505050602086013584613165565b6136d3576040516309bde33960e01b815260040160405180910390fd5b6136e1836020013585613871565b95945050505050565b5f83515f141580156137075750602084516137059190614505565b155b613724576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b855181116137b457613748600285614505565b5f0361377a5781515f528086015160205260208260405f60026107d05a03fa61376f575f5ffd5b6002840493506137a2565b808601515f52815160205260208260405f60026107d05a03fa61379b575f5ffd5b6002840493505b6137ad602082614208565b9050613735565b5082156137d4576040516363df817160e01b815260040160405180910390fd5b51949350505050565b5f811580159061105957506137f360018361415c565b82161592915050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b606061146784845f8561389d565b5f8061387e600484614518565b613889906040614541565b64ffffffffff16905061146784821b6137fc565b6060824710156138fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611a65565b5f5f866001600160a01b0316858760405161391991906141d9565b5f6040518083038185875af1925050503d805f8114613953576040519150601f19603f3d011682016040523d82523d5f602084013e613958565b606091505b509150915061396987838387613974565b979650505050505050565b606083156139e25782515f036139db576001600160a01b0385163b6139db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a65565b5081611467565b61146783838151156139f75781518083602001fd5b8060405162461bcd60e51b8152600401611a659190613c57565b6001600160401b0381168114613a25575f5ffd5b50565b5f60408284031215613a38575f5ffd5b50919050565b5f5f5f60608486031215613a50575f5ffd5b8335613a5b81613a11565b925060208401356001600160401b03811115613a75575f5ffd5b613a8186828701613a28565b92505060408401356001600160401b03811115613a9c575f5ffd5b613aa886828701613a28565b9150509250925092565b5f5f83601f840112613ac2575f5ffd5b5081356001600160401b03811115613ad8575f5ffd5b6020830191508360208260051b8501011115613af2575f5ffd5b9250929050565b5f5f60208385031215613b0a575f5ffd5b82356001600160401b03811115613b1f575f5ffd5b613b2b85828601613ab2565b90969095509350505050565b5f5f5f5f5f5f5f5f60a0898b031215613b4e575f5ffd5b8835613b5981613a11565b975060208901356001600160401b03811115613b73575f5ffd5b613b7f8b828c01613a28565b97505060408901356001600160401b03811115613b9a575f5ffd5b613ba68b828c01613ab2565b90975095505060608901356001600160401b03811115613bc4575f5ffd5b613bd08b828c01613ab2565b90955093505060808901356001600160401b03811115613bee575f5ffd5b613bfa8b828c01613ab2565b999c989b5096995094979396929594505050565b5f60208284031215613c1e575f5ffd5b81356122c781613a11565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122c76020830184613c29565b5f5f83601f840112613c79575f5ffd5b5081356001600160401b03811115613c8f575f5ffd5b602083019150836020828501011115613af2575f5ffd5b5f5f60208385031215613cb7575f5ffd5b82356001600160401b03811115613ccc575f5ffd5b613b2b85828601613c69565b634e487b7160e01b5f52602160045260245ffd5b60038110613d0857634e487b7160e01b5f52602160045260245ffd5b9052565b602081016110598284613cec565b5f60208284031215613d2a575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b0360408401511660408301526060830151613d7d6060840182613cec565b5092915050565b8015158114613a25575f5ffd5b5f60208284031215613da1575f5ffd5b81356122c781613d84565b5f5f5f5f5f60608688031215613dc0575f5ffd5b85356001600160401b03811115613dd5575f5ffd5b613de188828901613c69565b90965094505060208601356001600160401b03811115613dff575f5ffd5b613e0b88828901613c69565b96999598509660400135949350505050565b6001600160a01b0381168114613a25575f5ffd5b8035613e3c81613e1d565b919050565b5f5f60408385031215613e52575f5ffd5b8235613e5d81613e1d565b946020939093013593505050565b5f60208284031215613e7b575f5ffd5b81356122c781613e1d565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613ec257613ec2613e86565b604052919050565b5f6001600160401b03821115613ee257613ee2613e86565b5060051b60200190565b5f82601f830112613efb575f5ffd5b8135613f0e613f0982613eca565b613e9a565b8082825260208201915060208360051b860101925085831115613f2f575f5ffd5b602085015b83811015613f4c578035835260209283019201613f34565b5095945050505050565b5f5f5f60608486031215613f68575f5ffd5b83356001600160401b03811115613f7d575f5ffd5b8401601f81018613613f8d575f5ffd5b8035613f9b613f0982613eca565b8082825260208201915060208360051b850101925088831115613fbc575f5ffd5b6020840193505b82841015613fe7578335613fd681613e1d565b825260209384019390910190613fc3565b955050505060208401356001600160401b03811115614004575f5ffd5b61401086828701613eec565b92505061401f60408501613e31565b90509250925092565b5f5f5f6040848603121561403a575f5ffd5b83356001600160401b0381111561404f575f5ffd5b61405b86828701613a28565b93505060208401356001600160401b03811115614076575f5ffd5b61408286828701613ab2565b9497909650939450505050565b5f6020828403121561409f575f5ffd5b81516122c781613d84565b5f5f8335601e198436030181126140bf575f5ffd5b8301803591506001600160401b038211156140d8575f5ffd5b6020019150600581901b3603821315613af2575f5ffd5b5f5f8335601e19843603018112614104575f5ffd5b8301803591506001600160401b0382111561411d575f5ffd5b602001915036819003821315613af2575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761105957611059614131565b8181038181111561105957611059614131565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112614197575f5ffd5b9190910192915050565b8284823760c09190911b6001600160c01b0319169101908152600801919050565b5f81518060208401855e5f93019283525090919050565b5f6122c782846141c2565b5f602082840312156141f4575f5ffd5b813564ffffffffff811681146122c7575f5ffd5b8082018082111561105957611059614131565b838582375f8482015f8152838582375f93019283525090949350505050565b5f6020828403121561424a575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61428c60808301888a614251565b828103602084015261429e8188613c29565b905082810360408401526142b3818688614251565b915050826060830152979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826142e9576142e96142c7565b500490565b6001600160401b03828116828216039081111561105957611059614131565b5f8235605e19833603018112614197575f5ffd5b5f62ffffff82168061433557614335614131565b5f190192915050565b6001600160401b03818116838216019081111561105957611059614131565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff198212171561105957611059614131565b5f6020828403121561439c575f5ffd5b81516122c781613a11565b80516020808301519190811015613a38575f1960209190910360031b1b16919050565b5f6143d582856141c2565b6001600160801b03199390931683525050601001919050565b5f600182016143ff576143ff614131565b5060010190565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff8213171561105957611059614131565b5f8161448157614481614131565b505f190190565b5f8160070b677fffffffffffffff1981036144a5576144a5614131565b5f0392915050565b8082025f8212600160ff1b841416156144c8576144c8614131565b818105831482151761105957611059614131565b5f64ffffffffff8316806144f2576144f26142c7565b8064ffffffffff84160491505092915050565b5f82614513576145136142c7565b500690565b5f64ffffffffff83168061452e5761452e6142c7565b8064ffffffffff84160691505092915050565b64ffffffffff8181168382160290811690818114613d7d57613d7d61413156fea2646970667358221220d7f03c11afe2f1c649534ba5e4f99bc743e129e34f9d832c789daea8e1e84efe64736f6c634300081c00330000000000000000", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "18": { - "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa2646970667358221220bb783e6f87d678903cb96088c2c12d2cac558d531f4f913f330f95e9f12638ce64736f6c634300081c003300", + "46": { + "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402" + "0x00000000000000000000000000000000000000000000000000000000000011c4": "0x0000000000000000000000000000000000000000000000000000000069c103a2", + "0x00000000000000000000000000000000000000000000000000000000000031c9": "0x6c6df398e91468776811cb4aa0943019297b986ca5b66bbc4c50a6c67afae899", + "0x00000000000000000000000000000000000000000000000000000000000011c1": "0x0000000000000000000000000000000000000000000000000000000069c1039f", + "0x00000000000000000000000000000000000000000000000000000000000011bb": "0x0000000000000000000000000000000000000000000000000000000069c10399", + "0x00000000000000000000000000000000000000000000000000000000000011b5": "0x0000000000000000000000000000000000000000000000000000000069c10393", + "0x00000000000000000000000000000000000000000000000000000000000011e0": "0x0000000000000000000000000000000000000000000000000000000069c103be", + "0x00000000000000000000000000000000000000000000000000000000000031bf": "0x37435fb1f02441b879e6ffeedd0dfdc6a9ad23c09738d9203fec44d4664ef3be", + "0x00000000000000000000000000000000000000000000000000000000000011f5": "0x0000000000000000000000000000000000000000000000000000000069c103d3", + "0x00000000000000000000000000000000000000000000000000000000000011a7": "0x0000000000000000000000000000000000000000000000000000000069c10385", + "0x00000000000000000000000000000000000000000000000000000000000011d4": "0x0000000000000000000000000000000000000000000000000000000069c103b2", + "0x00000000000000000000000000000000000000000000000000000000000011b9": "0x0000000000000000000000000000000000000000000000000000000069c10397", + "0x00000000000000000000000000000000000000000000000000000000000011f3": "0x0000000000000000000000000000000000000000000000000000000069c103d1", + "0x00000000000000000000000000000000000000000000000000000000000031a1": "0xb375558bdd95447960308bae61357d619c09c3cfdbbb6a46e490fb26dd80e1c1", + "0x00000000000000000000000000000000000000000000000000000000000031b8": "0x472f5ae126cad10fe302d81dd9bcff9ace0fd9965a90b3f2c9ffb610e874b9e2", + "0x00000000000000000000000000000000000000000000000000000000000031c3": "0xb632e91f02a41458dc1e7a413eac6372dd68ab5b0344b31543526fdbcaa8ffa9", + "0x00000000000000000000000000000000000000000000000000000000000031b4": "0x2b124263b302f88a9f3992218cc9b4aeda64815abb5473a50680c62ebca85d70", + "0x00000000000000000000000000000000000000000000000000000000000031d4": "0xc2373dc37d15f817963efe6ffb0e6d8c8d401b495497ba73b464a6e4c3be7c22", + "0x00000000000000000000000000000000000000000000000000000000000031a4": "0x09bdf546b83837121cc44ee93a145ed838f63b14fc7f1b9d66dfea9478d45dfd", + "0x00000000000000000000000000000000000000000000000000000000000031d7": "0xae9ac3c6a61293d904a1541a0d54232bb0621442d39ea37b9ec1e90c97198f20", + "0x00000000000000000000000000000000000000000000000000000000000031df": "0xb6090414746e584d1744f58e29b11173960d25dfdc500ed4fb92598577c9d324", + "0x00000000000000000000000000000000000000000000000000000000000011b6": "0x0000000000000000000000000000000000000000000000000000000069c10394", + "0x00000000000000000000000000000000000000000000000000000000000031e3": "0xed824514e39baa7ca53d02e784dd091d6db1b07b0346a3373d37fb8786b5f619", + "0x00000000000000000000000000000000000000000000000000000000000031b0": "0xee4becee072dee30d9262bae02a196e558129ccbb42aee8886785063e406ed52", + "0x00000000000000000000000000000000000000000000000000000000000031f1": "0x4c9d1a153370b6d0b6a8a5aa479acda67f3f65ea3b5921ab9d7e482ceaa8e058", + "0x00000000000000000000000000000000000000000000000000000000000031bb": "0x2f5127851072f63d092bd97966cf2e0d950be93aecb75c5f5dce695f7c7229dd", + "0x00000000000000000000000000000000000000000000000000000000000031f4": "0x3f4fe250b7d701cf320e79eb0e055155a402f9f00ac08bd16d1e014d4f976478", + "0x00000000000000000000000000000000000000000000000000000000000031dc": "0x8913b904c8c286552c49962213faa6369e5f3b900ed2efb498b71e38736464f4", + "0x000000000000000000000000000000000000000000000000000000000000319f": "0xd2a3a48464707fe8ef23baa503db040fd382101eae31ee61c43b7ba8d22df73a", + "0x00000000000000000000000000000000000000000000000000000000000011dc": "0x0000000000000000000000000000000000000000000000000000000069c103ba", + "0x00000000000000000000000000000000000000000000000000000000000011b4": "0x0000000000000000000000000000000000000000000000000000000069c10392", + "0x00000000000000000000000000000000000000000000000000000000000011bd": "0x0000000000000000000000000000000000000000000000000000000069c1039b", + "0x00000000000000000000000000000000000000000000000000000000000031b5": "0x5212f3aca730645819ddccc812eb97439db877fcfde3d16be8ca4ba60c6cf12f", + "0x00000000000000000000000000000000000000000000000000000000000011e5": "0x0000000000000000000000000000000000000000000000000000000069c103c3", + "0x00000000000000000000000000000000000000000000000000000000000011f4": "0x0000000000000000000000000000000000000000000000000000000069c103d2", + "0x00000000000000000000000000000000000000000000000000000000000011ad": "0x0000000000000000000000000000000000000000000000000000000069c1038b", + "0x00000000000000000000000000000000000000000000000000000000000031ad": "0xaac7602a5dcb7cb9d113cf433182344381dd0166912a2a432c9acc13d92e642a", + "0x00000000000000000000000000000000000000000000000000000000000031ee": "0x5c9ab123553806feb54fa839c5236c23ccdde09664eaf7004add0df5d65ee6a5", + "0x00000000000000000000000000000000000000000000000000000000000011a4": "0x0000000000000000000000000000000000000000000000000000000069c10382", + "0x00000000000000000000000000000000000000000000000000000000000011f1": "0x0000000000000000000000000000000000000000000000000000000069c103cf", + "0x00000000000000000000000000000000000000000000000000000000000011a0": "0x0000000000000000000000000000000000000000000000000000000069c1037e", + "0x00000000000000000000000000000000000000000000000000000000000031f2": "0xb12604e1759294c18c1f6bc002b4fb6f4f5ad30d1287688d4635ba2f019a6e53", + "0x00000000000000000000000000000000000000000000000000000000000011cb": "0x0000000000000000000000000000000000000000000000000000000069c103a9", + "0x00000000000000000000000000000000000000000000000000000000000011ac": "0x0000000000000000000000000000000000000000000000000000000069c1038a", + "0x00000000000000000000000000000000000000000000000000000000000031c2": "0x2a7ab2860bcb155d92b486e6131275fcc25d990a3696bcace48553e28c8316d6", + "0x00000000000000000000000000000000000000000000000000000000000011db": "0x0000000000000000000000000000000000000000000000000000000069c103b9", + "0x00000000000000000000000000000000000000000000000000000000000031d1": "0x8e1e041e19c96d3a96d8ba1171f56dd73e3e51b945afa7997480d44a60fc6277", + "0x00000000000000000000000000000000000000000000000000000000000011e6": "0x0000000000000000000000000000000000000000000000000000000069c103c4", + "0x00000000000000000000000000000000000000000000000000000000000011da": "0x0000000000000000000000000000000000000000000000000000000069c103b8", + "0x00000000000000000000000000000000000000000000000000000000000031ba": "0x765b67b469ec043f4ee0b10d2dca8b63c26d10243eebcaed550369e711f115be", + "0x00000000000000000000000000000000000000000000000000000000000031ec": "0x077d226df6fe4e14d2b5d0f21fe93c30eb849f73ca507954e3062810355cef72", + "0x00000000000000000000000000000000000000000000000000000000000031ef": "0xb1de6c274d90606fcb15035144d63a6d2799ff1dc91eedf3bbdb23154dba5623", + "0x00000000000000000000000000000000000000000000000000000000000011bf": "0x0000000000000000000000000000000000000000000000000000000069c1039d", + "0x00000000000000000000000000000000000000000000000000000000000011c6": "0x0000000000000000000000000000000000000000000000000000000069c103a4", + "0x00000000000000000000000000000000000000000000000000000000000011a6": "0x0000000000000000000000000000000000000000000000000000000069c10384", + "0x00000000000000000000000000000000000000000000000000000000000031a5": "0xab1a3a33ae8dbf7d7c02b702386d19d12701973f8afe08d2d9a0fefce2f4bd31", + "0x00000000000000000000000000000000000000000000000000000000000011c9": "0x0000000000000000000000000000000000000000000000000000000069c103a7", + "0x00000000000000000000000000000000000000000000000000000000000031e4": "0x882ceecb1a102e9b18310af2f9efb76c8a81b93d49784c4753013537fe146b2c", + "0x00000000000000000000000000000000000000000000000000000000000031ed": "0x5b560bf1a43f6106ae9e7c7d2c022a43b9e0f8171fb3222760843eb2086e0b2f", + "0x00000000000000000000000000000000000000000000000000000000000011dd": "0x0000000000000000000000000000000000000000000000000000000069c103bb", + "0x00000000000000000000000000000000000000000000000000000000000031be": "0x3faf969927b85024ef1541d213458d5befd9a530bb8aaf44fb87b50e67d8d555", + "0x00000000000000000000000000000000000000000000000000000000000031ce": "0x8f7932a263baa823a80f13dbe63c08d5c1c81b0dc4b324a61f833d5dfe810d20", + "0x00000000000000000000000000000000000000000000000000000000000011cf": "0x0000000000000000000000000000000000000000000000000000000069c103ad", + "0x00000000000000000000000000000000000000000000000000000000000011ed": "0x0000000000000000000000000000000000000000000000000000000069c103cb", + "0x00000000000000000000000000000000000000000000000000000000000011ea": "0x0000000000000000000000000000000000000000000000000000000069c103c8", + "0x00000000000000000000000000000000000000000000000000000000000011cd": "0x0000000000000000000000000000000000000000000000000000000069c103ab", + "0x00000000000000000000000000000000000000000000000000000000000011aa": "0x0000000000000000000000000000000000000000000000000000000069c10388", + "0x00000000000000000000000000000000000000000000000000000000000011bc": "0x0000000000000000000000000000000000000000000000000000000069c1039a", + "0x00000000000000000000000000000000000000000000000000000000000011de": "0x0000000000000000000000000000000000000000000000000000000069c103bc", + "0x00000000000000000000000000000000000000000000000000000000000011d6": "0x0000000000000000000000000000000000000000000000000000000069c103b4", + "0x00000000000000000000000000000000000000000000000000000000000031a6": "0x9cc7f311325fe6904da69718bc7a7b8539f838216b691ca6b0ca37e3a4de4861", + "0x00000000000000000000000000000000000000000000000000000000000011e9": "0x0000000000000000000000000000000000000000000000000000000069c103c7", + "0x00000000000000000000000000000000000000000000000000000000000011b2": "0x0000000000000000000000000000000000000000000000000000000069c10390", + "0x00000000000000000000000000000000000000000000000000000000000011b8": "0x0000000000000000000000000000000000000000000000000000000069c10396", + "0x00000000000000000000000000000000000000000000000000000000000011d3": "0x0000000000000000000000000000000000000000000000000000000069c103b1", + "0x00000000000000000000000000000000000000000000000000000000000031c6": "0xa639386ee96ce6790f65de0d51a482437e7d8e785686cc42a5fa354d99251839", + "0x00000000000000000000000000000000000000000000000000000000000011a2": "0x0000000000000000000000000000000000000000000000000000000069c10380", + "0x00000000000000000000000000000000000000000000000000000000000031cd": "0x7791e8e75f06ae6f310fb1c5f941ede25acc2b864f71e995955496e84ca3084e", + "0x00000000000000000000000000000000000000000000000000000000000031cf": "0x77761a83a480149f3b7dd02694c0d30c6041575d39bfdcf8afa49047fc43ec6b", + "0x00000000000000000000000000000000000000000000000000000000000011cc": "0x0000000000000000000000000000000000000000000000000000000069c103aa", + "0x00000000000000000000000000000000000000000000000000000000000031eb": "0x4be388c93f86beb23d33249d34f74cab890eadf38d08429d7aefe18df6fd2762", + "0x00000000000000000000000000000000000000000000000000000000000011ab": "0x0000000000000000000000000000000000000000000000000000000069c10389", + "0x00000000000000000000000000000000000000000000000000000000000031aa": "0xdcf20fe65e2b41a2364379f00693e0e8093c189366e9c59249bab8904daea8e2", + "0x00000000000000000000000000000000000000000000000000000000000031b6": "0xe6d88f95fa2e172646a22f6f28470b873dc38b24ae1ad743bc9f68c3b642cca4", + "0x00000000000000000000000000000000000000000000000000000000000031b7": "0xfd05bdb3f8fb477ddf55a081d3cf6308c0beb26e5bd109fd2afbba63f1d551ae", + "0x00000000000000000000000000000000000000000000000000000000000031d2": "0x0da8c1548d22bb2083d213931e7e89898d5d937ef775419c67a4dd974e007d73", + "0x00000000000000000000000000000000000000000000000000000000000031e6": "0xceac5ee5114b22a74d8c5ad93eb7f653219b60740e30a15a9553638f05afeb7c", + "0x00000000000000000000000000000000000000000000000000000000000011b7": "0x0000000000000000000000000000000000000000000000000000000069c10395", + "0x00000000000000000000000000000000000000000000000000000000000011ee": "0x0000000000000000000000000000000000000000000000000000000069c103cc", + "0x00000000000000000000000000000000000000000000000000000000000031bd": "0xc017c061a27cbf422343157ba4edd13719ddbcb4b865180b445d5641afc7d893", + "0x00000000000000000000000000000000000000000000000000000000000031e2": "0xbc80934847787294f66cd6fbaf0a82611be82acf1fbf82141e715645ac9e609c", + "0x00000000000000000000000000000000000000000000000000000000000031c7": "0xc78bbe0fe8a3558934e5a6f50e438d9338a4bcaaae1308c4f5168ed77a01e91f", + "0x00000000000000000000000000000000000000000000000000000000000031a3": "0xb05c84a5201b04fdb922406d7ce86883d03634921408df13dff9b4099319d100", + "0x00000000000000000000000000000000000000000000000000000000000011d2": "0x0000000000000000000000000000000000000000000000000000000069c103b0", + "0x00000000000000000000000000000000000000000000000000000000000031e8": "0x76176cb5073723f7c47e5a087f2f63e80ee56c3bf0d5697570cc9bc10a6a5211", + "0x00000000000000000000000000000000000000000000000000000000000031f5": "0xe50ebdcf02714e3d2bebffc693c3a5e13e1ea655e75e760d0352b93cc30d09bc", + "0x00000000000000000000000000000000000000000000000000000000000031a9": "0xc96b0c58b029dc8e95fc2377ecf6ad56f5c8737529fd2fadf70e44468e5bdf3c", + "0x00000000000000000000000000000000000000000000000000000000000031d0": "0x9606c367f66a8e5a2a28169d13f0d87e2de228b182dee9438b8eeb817368853d", + "0x00000000000000000000000000000000000000000000000000000000000031d9": "0x19c2ac5a7839f9ab46b3262e6f0b1b5088f86a7bc7a5583f18a903d22499e013", + "0x00000000000000000000000000000000000000000000000000000000000031c0": "0x702128359f4b1758d8a2a0f0e5d37beedc3db9e9a06f24fb7171b447125f6b07", + "0x00000000000000000000000000000000000000000000000000000000000011d7": "0x0000000000000000000000000000000000000000000000000000000069c103b5", + "0x00000000000000000000000000000000000000000000000000000000000031d6": "0xd471bcb288ff4987621c51c5d170fd6fd106ace0d8499b2aaf63a131d2eafa84", + "0x00000000000000000000000000000000000000000000000000000000000031e7": "0x8019db43847c26faf42b9f61e8834c8dc2ea30ee45579b470f4cbb32a558f488", + "0x00000000000000000000000000000000000000000000000000000000000011a5": "0x0000000000000000000000000000000000000000000000000000000069c10383", + "0x00000000000000000000000000000000000000000000000000000000000011ae": "0x0000000000000000000000000000000000000000000000000000000069c1038c", + "0x00000000000000000000000000000000000000000000000000000000000011a1": "0x0000000000000000000000000000000000000000000000000000000069c1037f", + "0x00000000000000000000000000000000000000000000000000000000000031c1": "0xff51944ad7a6cdc7597b40f9250c3d2e0bf5bb2b1d82af7ebe54ef59dbed9117", + "0x00000000000000000000000000000000000000000000000000000000000031d3": "0xce843a510b8c54d297f3d183281f27d490309d09c9ddc10f8da8e553b03122c3", + "0x00000000000000000000000000000000000000000000000000000000000031c5": "0xe2a78f92c1e658c22e0e08f3a8c723de57a400769d7114aab2bd354830a18f75", + "0x00000000000000000000000000000000000000000000000000000000000031e0": "0x0f70048b4f92cca1b1d1382bcf149d643f63eba950d8e18a70e439c7c1326b5d", + "0x00000000000000000000000000000000000000000000000000000000000031d5": "0x9c3b5966562c9fb3402bf42d965ca0cfe5f40f77503e8673074f3e479f299dca", + "0x00000000000000000000000000000000000000000000000000000000000011ef": "0x0000000000000000000000000000000000000000000000000000000069c103cd", + "0x00000000000000000000000000000000000000000000000000000000000011e2": "0x0000000000000000000000000000000000000000000000000000000069c103c0", + "0x00000000000000000000000000000000000000000000000000000000000031a2": "0x327cd1f6376b66f1c68484fae32a7e0bd18534866432227118bdea7c825a043a", + "0x00000000000000000000000000000000000000000000000000000000000031e1": "0xaf7db3ce63d5ffe4a4d35b934e6683b952f9eb1a5b4986210ddfaeacff477e1d", + "0x00000000000000000000000000000000000000000000000000000000000031f0": "0x60c17eb1adc4756822a2010c7ba3d4d7fd19ec649d779eb02835ef2d25a8c836", + "0x00000000000000000000000000000000000000000000000000000000000011f0": "0x0000000000000000000000000000000000000000000000000000000069c103ce", + "0x00000000000000000000000000000000000000000000000000000000000011f2": "0x0000000000000000000000000000000000000000000000000000000069c103d0", + "0x00000000000000000000000000000000000000000000000000000000000031c4": "0x39ba1cc813691b385951ac5bbfe0aeb748430a1e0d4c5d32488b88a3759f59b0", + "0x00000000000000000000000000000000000000000000000000000000000011d0": "0x0000000000000000000000000000000000000000000000000000000069c103ae", + "0x00000000000000000000000000000000000000000000000000000000000011e1": "0x0000000000000000000000000000000000000000000000000000000069c103bf", + "0x00000000000000000000000000000000000000000000000000000000000011c7": "0x0000000000000000000000000000000000000000000000000000000069c103a5", + "0x00000000000000000000000000000000000000000000000000000000000011af": "0x0000000000000000000000000000000000000000000000000000000069c1038d", + "0x00000000000000000000000000000000000000000000000000000000000011a9": "0x0000000000000000000000000000000000000000000000000000000069c10387", + "0x00000000000000000000000000000000000000000000000000000000000031ae": "0x1b24e9128e7c3ed0b35ade584f45f61285ce58737d62ec7c287f4363ab0bb965", + "0x00000000000000000000000000000000000000000000000000000000000031cb": "0xcffc3fad407819d0ba65719ff2b0b6753c7173e07324bdce9e5d65c6718e0e27", + "0x00000000000000000000000000000000000000000000000000000000000011ce": "0x0000000000000000000000000000000000000000000000000000000069c103ac", + "0x00000000000000000000000000000000000000000000000000000000000011e7": "0x0000000000000000000000000000000000000000000000000000000069c103c5", + "0x00000000000000000000000000000000000000000000000000000000000011ec": "0x0000000000000000000000000000000000000000000000000000000069c103ca", + "0x00000000000000000000000000000000000000000000000000000000000011eb": "0x0000000000000000000000000000000000000000000000000000000069c103c9", + "0x00000000000000000000000000000000000000000000000000000000000031ca": "0xc494f079cdfd04f97f56fd8d03a4ee550495e9a065ccf7239710f1b2a1c60460", + "0x00000000000000000000000000000000000000000000000000000000000031da": "0xcd4758ef5b2f43fbbbe737820f77ef93c43d977eaa81eb32d8b261245f2b8a7a", + "0x00000000000000000000000000000000000000000000000000000000000011d9": "0x0000000000000000000000000000000000000000000000000000000069c103b7", + "0x00000000000000000000000000000000000000000000000000000000000011df": "0x0000000000000000000000000000000000000000000000000000000069c103bd", + "0x00000000000000000000000000000000000000000000000000000000000031db": "0x1e29df5b3bf5abcedf70ee7db2219e6163d97565caf85bc81fbe69180452caed", + "0x00000000000000000000000000000000000000000000000000000000000031de": "0x6c33b4c64c9d2771f8448fdec55945703b0bfb549eaa33234c1b1344167ebbb6", + "0x00000000000000000000000000000000000000000000000000000000000011ca": "0x0000000000000000000000000000000000000000000000000000000069c103a8", + "0x00000000000000000000000000000000000000000000000000000000000011c2": "0x0000000000000000000000000000000000000000000000000000000069c103a0", + "0x00000000000000000000000000000000000000000000000000000000000011d5": "0x0000000000000000000000000000000000000000000000000000000069c103b3", + "0x00000000000000000000000000000000000000000000000000000000000031a8": "0x2126818909fdf9cf58b8170ebbf304c5a6af1ab1820d8d8a75c89321a85f6c76", + "0x00000000000000000000000000000000000000000000000000000000000031bc": "0x17ee3cf29e20a5ef283da49264a652590ef212ec24df209abb76229f849d8dcd", + "0x00000000000000000000000000000000000000000000000000000000000011d1": "0x0000000000000000000000000000000000000000000000000000000069c103af", + "0x00000000000000000000000000000000000000000000000000000000000031a7": "0x5dee7ecd67e87c8d9efe9bbe8f4266adb9b0d1152065fbfb038eeb14dba754e4", + "0x00000000000000000000000000000000000000000000000000000000000011b1": "0x0000000000000000000000000000000000000000000000000000000069c1038f", + "0x00000000000000000000000000000000000000000000000000000000000011c0": "0x0000000000000000000000000000000000000000000000000000000069c1039e", + "0x00000000000000000000000000000000000000000000000000000000000031af": "0x561f3e26de4b1cbda7dd3cb7e19e96876a7705c82d31d7230684fb7f3555bc8e", + "0x00000000000000000000000000000000000000000000000000000000000031a0": "0x49e5fbadb9ea3e3eb0a7200e3280b746ea15113f1b5fd306034702326b66f4aa", + "0x00000000000000000000000000000000000000000000000000000000000011be": "0x0000000000000000000000000000000000000000000000000000000069c1039c", + "0x00000000000000000000000000000000000000000000000000000000000031b1": "0x3fd3f09adf23e3627e47c304b19c5a3db1b3b71976abd53c86436b3025852b04", + "0x00000000000000000000000000000000000000000000000000000000000031b2": "0xa33ec7d1f714dfc796404db23b7f277762884d0dee538553df7438670d4b1d03", + "0x00000000000000000000000000000000000000000000000000000000000011c8": "0x0000000000000000000000000000000000000000000000000000000069c103a6", + "0x00000000000000000000000000000000000000000000000000000000000011c5": "0x0000000000000000000000000000000000000000000000000000000069c103a3", + "0x00000000000000000000000000000000000000000000000000000000000011c3": "0x0000000000000000000000000000000000000000000000000000000069c103a1", + "0x00000000000000000000000000000000000000000000000000000000000011b3": "0x0000000000000000000000000000000000000000000000000000000069c10391", + "0x00000000000000000000000000000000000000000000000000000000000031b3": "0x986fcfd7863b994a3171f34e38e70b55e5044b51670610cad4da1068d2c76232", + "0x00000000000000000000000000000000000000000000000000000000000011a3": "0x0000000000000000000000000000000000000000000000000000000069c10381", + "0x00000000000000000000000000000000000000000000000000000000000011d8": "0x0000000000000000000000000000000000000000000000000000000069c103b6", + "0x00000000000000000000000000000000000000000000000000000000000031b9": "0x01e93846ab84da17a824a2eb5ec13060eaf6c741334d417a51f4accee3811d45", + "0x00000000000000000000000000000000000000000000000000000000000031c8": "0x6176bea0a237edd295b0f99ca8cc4405832980f77b1d5e8528513f0d1dfefc0e", + "0x00000000000000000000000000000000000000000000000000000000000031e5": "0xa35cc5079e9c273db3d9b947718ba1779e307e2c1dcf54b5ed8b3f20827c1ac9", + "0x00000000000000000000000000000000000000000000000000000000000031ab": "0x899579f9ae853a445f8f84155973b75355f31a9d0bc5ac9511731db1c6c00fd8", + "0x00000000000000000000000000000000000000000000000000000000000011e3": "0x0000000000000000000000000000000000000000000000000000000069c103c1", + "0x00000000000000000000000000000000000000000000000000000000000031e9": "0x8e2719d8a95033cc67f7872db51576e982788900f45007974acf2578e350567b", + "0x00000000000000000000000000000000000000000000000000000000000011a8": "0x0000000000000000000000000000000000000000000000000000000069c10386", + "0x00000000000000000000000000000000000000000000000000000000000031cc": "0x9146ec80b8ed778cba39219381acc2f8947112bcb4a75e385b53daddcd17ab99", + "0x00000000000000000000000000000000000000000000000000000000000011ba": "0x0000000000000000000000000000000000000000000000000000000069c10398", + "0x00000000000000000000000000000000000000000000000000000000000011e8": "0x0000000000000000000000000000000000000000000000000000000069c103c6", + "0x00000000000000000000000000000000000000000000000000000000000031ea": "0x528e712ddf3ca9c49e21a6c31f842d3add79be1e3de32e184edf82669752215e", + "0x00000000000000000000000000000000000000000000000000000000000031dd": "0xa651f9538bc2807e5292f08794550d1c9aab0b7a0bc407f83398d3957ed55fe7", + "0x00000000000000000000000000000000000000000000000000000000000011e4": "0x0000000000000000000000000000000000000000000000000000000069c103c2", + "0x00000000000000000000000000000000000000000000000000000000000011b0": "0x0000000000000000000000000000000000000000000000000000000069c1038e", + "0x00000000000000000000000000000000000000000000000000000000000031ac": "0x66bdcc77cb2f1bd450f305d0637c0a2198973331160d75ed199bb719596f5da5", + "0x00000000000000000000000000000000000000000000000000000000000031f3": "0xdb673688bea883b4c197f1a741f64a3d46c3c1b5917440d1209fde240a41b6f9", + "0x00000000000000000000000000000000000000000000000000000000000031d8": "0x396b3ca6ed45a52d2540ac4c53b10aa07052351663bef5f237958768b7ba2b8b", + "0x00000000000000000000000000000000000000000000000000000000000011f6": "0x0000000000000000000000000000000000000000000000000000000069c103d4" } }, - "12": { - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea2646970667358221220202aa32fed9b1043addbc14e73c73106e521b4a0cbd4090b88a279664688a3ca64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "36": { - "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "6": { - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", - "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a264697066735822122048797f739f4990ae363e6737b404ae972b4684803172bd809c64956b6bae7dc264736f6c634300081c003300000000000000", - "storage": {} - }, "4": { "address": "0x1111111111111111111111111111111111111111", "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" } }, "22": { - "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea26469706673582212200294a24180b18f81e47bb4c278ebbaa0cad18043e20afac6f0159b7940a7867a64736f6c634300081c003300", + "address": "0x0000F90827F1C53a10cb7A02335B175320002935", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008", - "0xd19bcde47e0ffe1c643525c3cff070e266ec404a07f499b41fcbc480ff16fff7": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000" + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x3c3ce98a442118b10a88d91904d28b84ee7cd9f4da81b008511e0ef05ec40ae3", + "0x0000000000000000000000000000000000000000000000000000000000000015": "0x25daef53fbf34505e6cc7bf5dd51ca51082d47620897f3dc9069c84eda6f05d0", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0xca9a9761e688d22b6da9835cc1fa4d6da5a83ec368f57fe9a422f95da793bd76", + "0x0000000000000000000000000000000000000000000000000000000000000044": "0x696d4d72e4e308a62549f6357fcb497bd61d85ea4850d4a35dadcbd513595875", + "0x0000000000000000000000000000000000000000000000000000000000000016": "0xa98139473daa451c67f6c3028e26757d3f5b1c6510eee1f702924a2e7a91d9e5", + "0x0000000000000000000000000000000000000000000000000000000000000042": "0xf95d50b73cfc819e1280319647c0d702bc3311f3f81e0dd9c00017ffe74d192c", + "0x000000000000000000000000000000000000000000000000000000000000001b": "0xde5e20199406f5eb29c9e3ae6683092c5c136e106c35140533569111d48cf724", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0x51e18d311c28b7e855a440d44898c93daedfcde5febabd487d941bf6bb5d44db", + "0x0000000000000000000000000000000000000000000000000000000000000056": "0x1c2d69beb4d9e8b384b55e876da8a05cd115c2e54c731dace373e68d080828c3", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x5e96a8f99e1d3fad6d454c977fa16bbb74305cfd655748dbef6293ff1447cf07", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0x04250364d3e312f999b4ee55b543442a230a79aa8968531fad2af961cdf80abf", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x342af3f47b0e5f5699335e30ed1dcf1a79a2e74b7a842bfc71db8c5d14640dcd", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xfe6e8e3295c87e272a0cb5cfc320e71795a53fb94a86d880e97ebd9c0a336d90", + "0x0000000000000000000000000000000000000000000000000000000000000019": "0xf7133327415ebc196b5559cfa57c837f12db990cc79b176a354d6eb4898b6f6c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0xd643814d9d5c1167c44fbbc053bf415cfca1e8655a08283589365cf1c043881e", + "0x000000000000000000000000000000000000000000000000000000000000001c": "0x4c9b13168f3a6bd0b585189a20407675f6890c689c7ee3f3d8d39a51bf977283", + "0x000000000000000000000000000000000000000000000000000000000000004e": "0xba147fbaef3ca7719533e07e114fb500d74649ca5f9b2ad44d95a7ce7a607161", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x81c4aaec2d16039d6d30bf484261d7a5f533ec7fbf91d2cf14f30407a6c59e72", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0xf43acb6d6a5e0712412ea4bbc7424dde0598f36bde23535b399571f1bdaa748a", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xe0602c9a41652bb9a91c9c6d246e2bb141b122a427bcd29837f588742ca14337", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0x75888559a450e4f43b994206695706fbba14fc6f4526fed2f68cab205bbde3ce", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xed463a63ce427a627f238727146e05128121b32978b47c00f5bc26e103feccb7", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0xfecd0cce7d7830e2a8efa686ca782cf1ae206c57597ef64f76e985b62cf2391e", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0xda97e5df5459843a1856363a51f08e5d505311ec0aa25bb1bec5d6e38b2aa49e", + "0x0000000000000000000000000000000000000000000000000000000000000014": "0x6f8651233db56a79f04e0e58837b1c4e38ca0bbb444113a4c4bcce6913b1b4c2", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xe3817de6bf51e96070d1f69fac9fa63f83bec5272768b621a35637e665e7ef42", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x6a8128b65d9bb712e31e6311ff13b0327ee828b48c46dcf37b8e1389fe8dacd9", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0xabb7b4efc33af38bd1a34dc28dd20db85b7773628d73a01a530c02dc5ce3cb3b", + "0x0000000000000000000000000000000000000000000000000000000000000052": "0xa2df7f012435835d340f5b071167467f10b097dd0f7c01038fbcec5d9e377225", + "0x0000000000000000000000000000000000000000000000000000000000000053": "0x055a5c5315954f7d596ee3f6dcf60170934922f8024ba34f778b85a6d2a3d230", + "0x0000000000000000000000000000000000000000000000000000000000000048": "0x7119d553e4e45b2b61fe25f2f10b0f651897caa1293239fd8f4817a2ef401fc3", + "0x000000000000000000000000000000000000000000000000000000000000001f": "0xae675ae49c4cd3ceddfff05e834a49d2552c9be353a928d114a512262b51b876", + "0x0000000000000000000000000000000000000000000000000000000000000045": "0xd1123a38b652784c45db7b3d4785b5d04b54b030e5c792dbfd49206773f032a1", + "0x0000000000000000000000000000000000000000000000000000000000000047": "0x14a1dccf3438faa64a46a9a34e5365f553a846d775f9704e451a0c9c74c946af", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x774286d909801bccb7e93e9f9c878b7265f875846a4352e99395e91626c749a2", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x3d744cbc4d5d784c5d1e77a517dda4f3f55f67130741ea1d1b615e71f4259bfa", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0xf90affc610d0c6ef11cacaf6fdb2e6dc788375cda42462223adebcdefe9e8621", + "0x0000000000000000000000000000000000000000000000000000000000000013": "0x1bd74ca82eca558a08eff8a9f325ddd4794a6d3b38838943521eea4803eaa021", + "0x000000000000000000000000000000000000000000000000000000000000004c": "0x359bb94a4ec38a23a38e8ea39850b8de507545eab6538617035266e1a6e4ac41", + "0x0000000000000000000000000000000000000000000000000000000000000050": "0x480f249ca9d9ebb211fd60752538200f9b632ffafef33468e4357bbb75d2684f", + "0x0000000000000000000000000000000000000000000000000000000000000051": "0x85a6a5d8c0a55bb1fa4b0fee3c30ea2d34a80943e89be471e71db8f18fddd36c", + "0x0000000000000000000000000000000000000000000000000000000000000020": "0xaece4ffe6ec16301feb3e6ea3b9ad786f43848cf1e0ae9669e01bb1a05b3cc4a", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0xb9ed8d76f68ce4f3340a6be86f1f4b1fb94e4bd18473b39c1f79479737df5388", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x638a9fdc97d860304f9009f7b1b9492a748b8e8ddd34c90cb34fafb46feab24b", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0x3e3492446276ba427a99667a53cb58cd84fe0a0aca35b9c90193247b44527eed", + "0x000000000000000000000000000000000000000000000000000000000000001a": "0x9d6013387d2fff46a5887d33582e6797af8d9139d606c62f9fee2a9579bef744", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0xd98f1f9688d7e3fa77a9f610c427888545d3452c754e746f73e9e82e8480172e", + "0x0000000000000000000000000000000000000000000000000000000000000021": "0x2a4cbbf6e76df564bfaf36c8c9d30413d97db864ebb83a31e789ebc861037e56", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x7ea33e4ce63f8f29b63a21afc057e5a03ede71c80d0426f7dadb408272fe93b2", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x8ef3df777967abaa746cda857b555653ea687d8995c287c92a93a05a7163a4d3", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0xe5c4b6ce8c985ab429c0bcc0a5a628db3a465a5660b29606948c84d0328cbbc6", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x15a6aa547e9f3ce7a7af0c34bf3c1c4bcc302667832d735b4f732f9a23ada1c5", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0xe4c26e7b20acbb456e2a78927e1da8bd7ca66ba47ed8b6aa8b2753e4424d598b", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0x3afaaf4efeecaa406297eb1dc2e0e61c49fb91a95ea95beded42a337a62a9c17", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0x8768df84ebd731309756342ed8a2491c4986f8aad9123915be31534596fa9af4", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0x60e5921020bde2a5c8b26eba426161a333b9f047ca1e95cc09daba83336f3f53", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x34b26a54cced061c69a6df5bf9b0c329ffb31a8005a88c1f2cd32e123199a9e2", + "0x000000000000000000000000000000000000000000000000000000000000001e": "0x93a1f933a96612bf455a2b039afef54a0f95b038dec5b6c7fbc8de1748a4e287", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0x8449f9899fec18318cdadf19a3da6b61e4806196112e9142846dd125c80386ad", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x4fd95faab85737d96331985ae738b3da0288837dd03d23830b03ddbb42ddfd22", + "0x0000000000000000000000000000000000000000000000000000000000000041": "0x82dfd344f93219e6aa2b97960d4fc71c92a8164bf98e7cd3b3776041188828f7", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x893c87c81e71221152bcec5a68b7f6734aa890d2fa78aa926e1699d6434f5952", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x273b5d74e7b3cf20db51f8acbeedc97bcd7d28d6d766ae00499f26b2105e1bf9", + "0x0000000000000000000000000000000000000000000000000000000000000049": "0xd52126473dbaf228b398fce267cdd3b0201da24881b540c652c697b4e89f93e6", + "0x0000000000000000000000000000000000000000000000000000000000000017": "0x4f6b5d4b674556a15700972bef922282c6e28e077820f99670b91a5a788dd562", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0x48199b9dfa08a4722b8c1e84a8408443820345f294bdbd8898f5f73cacc332f3", + "0x0000000000000000000000000000000000000000000000000000000000000046": "0x43b69f1f8e8d87bcde5d5571396f0f4ecb75132f9273aadf5d67609fa060a25f", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x140f4774c05335293ff01d8d4d774601e94c352c28b86c30b2cd0444ae0e8722", + "0x000000000000000000000000000000000000000000000000000000000000004f": "0xf1825434031344d8686f60aea096f8ddeb1a0e81ea96f751ae7f2fe8a4ef253b", + "0x0000000000000000000000000000000000000000000000000000000000000054": "0x2366486599576fe8a5c6e9a690afe557fc570bc861674863ff8a9eb90223f387", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x2ad15c004b4d395050a36be2856e1886a814ea8fdb959f7b78d983f576edc258", + "0x0000000000000000000000000000000000000000000000000000000000000018": "0xea9cfdfbc5ea7270d4e379707f3b9ee2848944a644a39502d9d7a1c91985a6cb", + "0x000000000000000000000000000000000000000000000000000000000000004b": "0xbf58f737862575724f56de9ba1876deb856882ab65e41c9eed47cbcd38716f70", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x23e9b37fbab92e0e7fe135c9de540db67bcb45b1c6671dddf4cec5aa8119dfc1", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x2ebaf310b90287113edb6a17826cc857f2f0d6c1c86e472d0d6d7e69061259da", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x3e12b7d50ace6d247f9adeb0388f795f3fc6b3d01ee27ec3af37ac3e67afdd2e", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x6c3655972972170b02c9d6e3415d3b7aeef65371afad4c87c93878361c142863", + "0x000000000000000000000000000000000000000000000000000000000000001d": "0x3eb340d854edcd8cf437b6c50ed921573e7f2925b49631c515e82005471ec611", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0xc6937b3cabf5f4536a3194b65ee449435366d4ab86ee1ce8e2137a867de37649", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0x7c25fd540617531bae88639ac249fdc53f0fc212e4efba8a6aad2c83726b149b", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xfb04d72ec7930d6f43e31a6ea3dc5a0bd6fcaa65a60e12ad7f22869ecffef317", + "0x0000000000000000000000000000000000000000000000000000000000000043": "0x69e8fd7fcd5d299d15bfa17d0825032bd795a5631d3e51e85aba29dda38ebe35", + "0x000000000000000000000000000000000000000000000000000000000000004a": "0x7028c289ca7d655ce55b4db5631631cc898a478f477343cefe617bb3ef82e307", + "0x0000000000000000000000000000000000000000000000000000000000000055": "0x2712fb1118613d5b3ebb380df7dfcc2bf38bd549667d79093922a4192ec05c27", + "0x000000000000000000000000000000000000000000000000000000000000004d": "0xc6b8ac990453644de5159b1c2a4dd58e532fdd144bd175cc9f15a8a1afe4502d", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x65a726ae75474dadca54ac2b23b06e3ae144f14b78eef415919807515313eae1", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0xdae0dc50874a69d18d60a161cf14ce8c023db2d69551ddf66f76255c30a1998c" } }, - "26": { - "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "36": { + "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", + "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea264697066735822122042eb79be1c5c1bf83d453ef1bcf09a68daefc0a952ec517c315a6e1a8ca586e264736f6c634300081c003300", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319" + "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", + "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf" } }, - "34": { - "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef" - } - }, - "37": { + "38": { "address": "0xac06641381166cf085281c45292147f833C622d7", "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", "storage": {} }, - "35": { - "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea264697066735822122042eb79be1c5c1bf83d453ef1bcf09a68daefc0a952ec517c315a6e1a8ca586e264736f6c634300081c003300", + "41": { + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220993e175405432033ed7aea33210be529d0ba9c2edc6085e7b95533cc13f90a0064736f6c634300081c003300", + "storage": {} + }, + "12": { + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a2646970667358221220d6b7192f32171e73f3ca8608f2cb38bc543e4d751099308262bcc0a34560c16464736f6c634300081c003300", + "storage": {} + }, + "19": { + "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", + "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa2646970667358221220bb783e6f87d678903cb96088c2c12d2cac558d531f4f913f330f95e9f12638ce64736f6c634300081c003300", "storage": { - "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", - "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "5": { + "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220367283a645a6f2ff4567a6b7f3c48a7618ad09eda48237419b569370b356fa4d64736f6c634300081c0033000000", + "storage": {} + }, + "7": { + "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212207c195dc6c0dcf274cd547cf28d123e774d60cc2ca6ccfba9a4b62ae46152a83164736f6c634300081c003300", + "storage": {} + }, + "26": { + "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d", + "code": "0x608060405234801561000f575f5ffd5b50600436106102ff575f3560e01c8063670d3ba211610195578063b2447af7116100e4578063db4df7611161009e578063f231bd0811610079578063f231bd08146107f7578063f605ce081461080a578063fabc1cbc1461081d578063fe4b84df14610830575f5ffd5b8063db4df76114610796578063dc2af692146107bd578063df5cf723146107d0575f5ffd5b8063b2447af714610708578063b66bd9891461071b578063b9fbaed11461072e578063ba1a84e51461075d578063c221d8ae14610770578063d3d96ff414610783575f5ffd5b8063886f11951161014f578063952899ee1161012a578063952899ee146106bc578063a9333ec8146106cf578063a9821821146106e2578063adc2e3d9146106f5575f5ffd5b8063886f1195146106625780638ce648541461068957806394d7d00c146106a9575f5ffd5b8063670d3ba2146105c45780636cfb4481146105d75780636e3492b5146106025780636e875dba1461061557806379ae50cd146106285780637bc1ef611461063b575f5ffd5b806340120dab1161025157806350feea201161020b57806356c483e6116101e657806356c483e61461057e578063595c6a67146105915780635ac86ab7146105995780635c975abb146105bc575f5ffd5b806350feea2014610543578063547afb871461055657806354fd4d5014610569575f5ffd5b806340120dab146104875780634177a87c146104a85780634657e26a146104c85780634a10ffe5146104ef5780634b5046ef1461050f5780634cfd293914610522575f5ffd5b8063261f84e0116102bc5780632bab2c4a116102975780632bab2c4a1461042d578063304c10cd1461044057806332a879e4146104535780633635205714610466575f5ffd5b8063261f84e0146103be5780632981eb77146103d15780632b453a9a1461040d575f5ffd5b80630f3df50e1461030357806310e1b9b8146103335780631352c3e614610353578063136439dd1461037657806315fe50281461038b578063260dc758146103ab575b5f5ffd5b610316610311366004614bf0565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b610346610341366004614c0a565b610884565b60405161032a9190614c51565b610366610361366004614c84565b6108bd565b604051901515815260200161032a565b610389610384366004614cb8565b610938565b005b61039e610399366004614ccf565b610972565b60405161032a9190614d4d565b6103666103b9366004614bf0565b610a89565b6103896103cc366004614d9f565b610aba565b6103f87f000000000000000000000000000000000000000000000000000000000000003281565b60405163ffffffff909116815260200161032a565b61042061041b366004614e84565b610b63565b60405161032a9190614f27565b61042061043b366004614f8a565b610b79565b61031661044e366004614ccf565b610c18565b61038961046136600461500e565b610c47565b61047961047436600461508e565b610d8e565b60405161032a9291906150e0565b61049a6104953660046150f8565b610ed1565b60405161032a929190615185565b6104bb6104b6366004614bf0565b61104c565b60405161032a91906151e2565b6103167f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6105026104fd3660046151f4565b611070565b60405161032a9190615237565b61038961051d36600461500e565b611118565b610535610530366004614bf0565b6111ab565b60405190815260200161032a565b610389610551366004615282565b6111cd565b6105026105643660046152e0565b6112be565b610571611366565b60405161032a9190615322565b61038961058c366004615357565b611396565b61038961149b565b6103666105a7366004615381565b606654600160ff9092169190911b9081161490565b606654610535565b6103666105d2366004614c84565b6114af565b6105ea6105e53660046150f8565b6114db565b6040516001600160401b03909116815260200161032a565b6103896106103660046153b7565b6114f0565b6104bb610623366004614bf0565b6118b3565b61039e610636366004614ccf565b6118c4565b6103f87f000000000000000000000000000000000000000000000000000000000000000081565b6103167f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61069c6106973660046153e8565b61199e565b60405161032a919061542b565b6105026106b736600461543d565b611a5a565b6103896106ca366004615498565b611b46565b6105ea6106dd3660046150f8565b611fe7565b6103896106f0366004615641565b612016565b6103896107033660046156bf565b6120c8565b610535610716366004614bf0565b612411565b610389610729366004615282565b612433565b61074161073c366004614ccf565b61258d565b60408051921515835263ffffffff90911660208301520161032a565b61053561076b366004614ccf565b612627565b6104bb61077e366004614c84565b612647565b6103896107913660046150f8565b612670565b6103167f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d81565b6103666107cb366004614ccf565b61279d565b6103167f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b610366610805366004614bf0565b6127d0565b6105ea6108183660046150f8565b6127ef565b61038961082b366004614cb8565b6127fb565b61038961083e366004614cb8565b612868565b5f5f60a65f61085185612979565b815260208101919091526040015f20546001600160a01b031690508015610878578061087d565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101829052906108b3856108ad86612979565b856129dc565b9695505050505050565b6001600160a01b0382165f908152609e602052604081208190816108e085612979565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff169282019290925291508061092e5750806020015163ffffffff164311155b9150505b92915050565b610940612b48565b60665481811681146109655760405163c61dca5d60e01b815260040160405180910390fd5b61096e82612beb565b5050565b6001600160a01b0381165f908152609d602052604081206060919061099690612c28565b90505f816001600160401b038111156109b1576109b1614b00565b6040519080825280602002602001820160405280156109f557816020015b604080518082019091525f80825260208201528152602001906001900390816109cf5790505b5090505f5b82811015610a81576001600160a01b0385165f908152609d60205260409020610a5c90610a279083612c31565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a6e57610a6e615701565b60209081029190910101526001016109fa565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206109329163ffffffff90811690612c3c16565b82610ac481612c53565b610ae15760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610b19576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610b5c57610b5485858584818110610b3957610b39615701565b9050602002810190610b4b9190615715565b620e16e4612cfd565b600101610b1b565b5050505050565b6060610b7184848443612eb1565b949350505050565b6060610b8785858585612eb1565b90505f5b8451811015610c0f57610bb7858281518110610ba957610ba9615701565b6020026020010151876108bd565b610c07575f5b8451811015610c05575f838381518110610bd957610bd9615701565b60200260200101518281518110610bf257610bf2615701565b6020908102919091010152600101610bbd565b505b600101610b8b565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610c40578061087d565b5090919050565b84610c5181612c53565b610c6e5760405163932d94f760e01b815260040160405180910390fd5b838214610c8e576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260a4602052604090205460ff16610cc6576040516348f7dbb960e01b815260040160405180910390fd5b5f5b84811015610d85575f848483818110610ce357610ce3615701565b9050602002016020810190610cf89190614ccf565b90506001600160a01b038116610d21576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601610d4e576040516364be1a3f60e11b815260040160405180910390fd5b610d7c88888885818110610d6457610d64615701565b9050602002810190610d769190615715565b83612cfd565b50600101610cc8565b50505050505050565b5f60606001610d9c8161319e565b84610da681612c53565b610dc35760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280886001600160a01b03168152602001876020016020810190610df19190615733565b63ffffffff1690529050610e08606087018761574c565b9050610e17604088018861574c565b905014610e37576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610e699163ffffffff90811690612c3c16565b610e8657604051631fb1705560e21b815260040160405180910390fd5b610e9c610e966020880188614ccf565b826108bd565b610eb95760405163ebbff49760e01b815260040160405180910390fd5b610ec386826131cc565b945094505050509250929050565b6001600160a01b0382165f908152609d602052604081206060918291610ef690612c28565b90505f816001600160401b03811115610f1157610f11614b00565b604051908082528060200260200182016040528015610f5557816020015b604080518082019091525f8082526020820152815260200190600190039081610f2f5790505b5090505f826001600160401b03811115610f7157610f71614b00565b604051908082528060200260200182016040528015610fba57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610f8f5790505b5090505f5b8381101561103d576001600160a01b0388165f908152609d60205260408120610fec90610a279084612c31565b90508084838151811061100157611001615701565b602002602001018190525061101789828a610884565b83838151811061102957611029615701565b602090810291909101015250600101610fbf565b509093509150505b9250929050565b60605f61087d60995f61105e86612979565b81526020019081526020015f2061390c565b60605f83516001600160401b0381111561108c5761108c614b00565b6040519080825280602002602001820160405280156110b5578160200160208202803683370190505b5090505f5b8451811015610a81576110e68582815181106110d8576110d8615701565b602002602001015185611fe7565b8282815181106110f8576110f8615701565b6001600160401b03909216602092830291909101909101526001016110ba565b5f6111228161319e565b838214611142576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610d85576111a38787878481811061116257611162615701565b90506020020160208101906111779190614ccf565b86868581811061118957611189615701565b905060200201602081019061119e9190615791565b613918565b600101611144565b5f60a55f6111b884612979565b81526020019081526020015f20549050919050565b836111d781612c53565b6111f45760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926112339291612c3c16565b61125057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d85576112b68286868481811061127057611270615701565b90506020020160208101906112859190614ccf565b6112b160405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506127d0565b613a1c565b600101611252565b60605f82516001600160401b038111156112da576112da614b00565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b5090505f5b8351811015610a81576113348585838151811061132757611327615701565b6020026020010151611fe7565b82828151811061134657611346615701565b6001600160401b0390921660209283029190910190910152600101611308565b60606113917f76312e302e300000000000000000000000000000000000000000000000000006613afc565b905090565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614611491576113cf82612c53565b6113ec576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611450573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147491906157b2565b6114915760405163ccea9e6f60e01b815260040160405180910390fd5b61096e8282613b39565b6114a3612b48565b6114ad5f19612beb565b565b5f61087d83609a5f6114c086612979565b81526020019081526020015f20613ce590919063ffffffff16565b5f5f6114e78484613d06565b95945050505050565b60026114fb8161319e565b61151061150b6020840184614ccf565b612c53565b80611529575061152961150b6040840160208501614ccf565b611546576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611555604084018461574c565b9050811015611817575f604051806040016040528085602001602081019061157d9190614ccf565b6001600160a01b03168152602001611598604087018761574c565b858181106115a8576115a8615701565b90506020020160208101906115bd9190615733565b63ffffffff16815250905061160a816020015163ffffffff1660985f8760200160208101906115ec9190614ccf565b6001600160a01b0316815260208101919091526040015f2090612c3c565b61162757604051631fb1705560e21b815260040160405180910390fd5b609e5f6116376020870187614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61166083612979565b815260208101919091526040015f205460ff16611690576040516325131d4f60e01b815260040160405180910390fd5b6116ca61169c82612979565b609c5f6116ac6020890189614ccf565b6001600160a01b0316815260208101919091526040015f2090613e75565b506117026116db6020860186614ccf565b609a5f6116e785612979565b81526020019081526020015f20613e8090919063ffffffff16565b506117106020850185614ccf565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe8260405161174891906157d1565b60405180910390a2604080518082019091525f81526020810161178b7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b63ffffffff169052609e5f6117a36020880188614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6117cc84612979565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611548565b5061182b61044e6040840160208501614ccf565b6001600160a01b031663303ca9566118466020850185614ccf565b6118566040860160208701614ccf565b611863604087018761574c565b6040518563ffffffff1660e01b81526004016118829493929190615848565b5f604051808303815f87803b158015611899575f5ffd5b505af11580156118ab573d5f5f3e3d5ffd5b505050505050565b6060610932609a5f61105e85612979565b6001600160a01b0381165f908152609c60205260408120606091906118e890612c28565b90505f816001600160401b0381111561190357611903614b00565b60405190808252806020026020018201604052801561194757816020015b604080518082019091525f80825260208201528152602001906001900390816119215790505b5090505f5b82811015610a81576001600160a01b0385165f908152609c6020526040902061197990610a279083612c31565b82828151811061198b5761198b615701565b602090810291909101015260010161194c565b60605f84516001600160401b038111156119ba576119ba614b00565b604051908082528060200260200182016040528015611a0357816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816119d85790505b5090505f5b8551811015610c0f57611a35868281518110611a2657611a26615701565b60200260200101518686610884565b828281518110611a4757611a47615701565b6020908102919091010152600101611a08565b60605f83516001600160401b03811115611a7657611a76614b00565b604051908082528060200260200182016040528015611a9f578160200160208202803683370190505b5090505f5b8451811015610c0f576001600160a01b0386165f90815260a1602052604081208651611b1492879291899086908110611adf57611adf615701565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20613e9490919063ffffffff16565b828281518110611b2657611b26615701565b6001600160401b0390921660209283029190910190910152600101611aa4565b5f611b508161319e565b611b5983612c53565b611b76576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f611b828661258d565b9150915081611ba45760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610b5c57838181518110611bc557611bc5615701565b60200260200101516040015151848281518110611be457611be4615701565b6020026020010151602001515114611c0f576040516343714afd60e01b815260040160405180910390fd5b5f848281518110611c2257611c22615701565b602090810291909101810151518082015181516001600160a01b03165f90815260989093526040909220909250611c629163ffffffff90811690612c3c16565b611c7f57604051631fb1705560e21b815260040160405180910390fd5b5f611c8a87836108bd565b90505f5b868481518110611ca057611ca0615701565b60200260200101516020015151811015611fdc575f878581518110611cc757611cc7615701565b6020026020010151602001518281518110611ce457611ce4615701565b60200260200101519050611cfb898261ffff613918565b5f5f611d0a8b6108ad88612979565b91509150806040015163ffffffff165f14611d3857604051630d8fcbe360e41b815260040160405180910390fd5b5f611d4587858489613ea8565b9050611d8a825f01518c8a81518110611d6057611d60615701565b6020026020010151604001518781518110611d7d57611d7d615701565b6020026020010151613ede565b600f0b602083018190525f03611db357604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b1215611ef7578015611e7957611e34611dd488612979565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b611e5e7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b611e699060016157f3565b63ffffffff166040830152611f64565b611e8b83602001518360200151613ef5565b6001600160401b031660208401528a518b9089908110611ead57611ead615701565b6020026020010151604001518581518110611eca57611eca615701565b6020908102919091018101516001600160401b031683525f9083015263ffffffff43166040830152611f64565b5f8260200151600f0b1315611f6457611f1883602001518360200151613ef5565b6001600160401b039081166020850181905284519091161015611f4e57604051636c9be0bf60e01b815260040160405180910390fd5b611f5889436157f3565b63ffffffff1660408301525b611f798c611f7189612979565b868686613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611fae865f01518760200151613ef5565b8660400151604051611fc4959493929190615874565b60405180910390a1505060019092019150611c8e9050565b505050600101611baa565b6001600160a01b038083165f90815260a160209081526040808320938516835292905290812061087d9061414c565b8261202081612c53565b61203d5760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff1661207f576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516120ba9291906158ed565b60405180910390a250505050565b60026120d38161319e565b826120dd81612c53565b6120fa5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218291906157b2565b61219f5760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b6121ae602085018561574c565b905081101561237657604080518082019091525f90806121d16020880188614ccf565b6001600160a01b031681526020018680602001906121ef919061574c565b858181106121ff576121ff615701565b90506020020160208101906122149190615733565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612250929190811690612c3c16565b61226d57604051631fb1705560e21b815260040160405180910390fd5b61227786826108bd565b1561229557604051636c6c6e2760e11b815260040160405180910390fd5b6122be6122a182612979565b6001600160a01b0388165f908152609c602052604090209061415f565b506122ea86609a5f6122cf85612979565b81526020019081526020015f2061416a90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e8260405161232491906157d1565b60405180910390a26001600160a01b0386165f908152609e6020526040812060019161234f84612979565b815260208101919091526040015f20805460ff1916911515919091179055506001016121a1565b5061238761044e6020850185614ccf565b6001600160a01b031663c63fd502856123a36020870187614ccf565b6123b0602088018861574c565b6123bd60408a018a615900565b6040518763ffffffff1660e01b81526004016123de96959493929190615942565b5f604051808303815f87803b1580156123f5575f5ffd5b505af1158015612407573d5f5f3e3d5ffd5b5050505050505050565b5f610932609a5f61242185612979565b81526020019081526020015f20612c28565b8361243d81612c53565b61245a5760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926124999291612c3c16565b6124b657604051631fb1705560e21b815260040160405180910390fd5b5f6124c082612979565b90505f5b84811015612407576125098686838181106124e1576124e1615701565b90506020020160208101906124f69190614ccf565b5f84815260996020526040902090613e80565b612526576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061255a5761255a615701565b905060200201602081019061256f9190614ccf565b60405161257d92919061598e565b60405180910390a16001016124c4565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b90910416606082018190528493919291901580159061260e5750826060015163ffffffff164310155b1561261d575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061093290612c28565b6001600160a01b0382165f908152609f602052604081206060919061092e908261105e86612979565b8161267a81612c53565b6126975760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff91906157b2565b61271c57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361277481610c18565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f6127a8836118c4565b90505f6127b484610972565b90506127c0848361417e565b80610b715750610b71848261417e565b5f620e16e46127de83610843565b6001600160a01b0316141592915050565b5f5f610c0f8484613d06565b6128036141f6565b6066548019821981161461282a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff161580801561288657505f54600160ff909116105b8061289f5750303b15801561289f57505f5460ff166001145b6129075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612928575f805461ff0019166101001790555b61293182612beb565b801561096e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016129c492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610932906159b4565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190612a3c9061414c565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff16918101829052919250431015612ade579092509050612b40565b612aef815f01518260200151613ef5565b6001600160401b0316815260208101515f600f9190910b1215612b2d57612b1e82602001518260200151613ef5565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce91906157b2565b6114ad57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f610932825490565b5f61087d83836142a7565b5f818152600183016020526040812054151561087d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af1158015612cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093291906157b2565b5f6040518060400160405280856001600160a01b03168152602001845f016020810190612d2a9190615733565b63ffffffff168152509050612d74816020015163ffffffff1660985f876001600160a01b03166001600160a01b031681526020019081526020015f2061415f90919063ffffffff16565b612d9157604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c81604051612dc091906157d1565b60405180910390a16001600160a01b038216620e16e414801590612e55578260a65f612deb85612979565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e8284604051612e4c92919061598e565b60405180910390a15b5f5b612e64602086018661574c565b90508110156118ab57612ea983612e7e602088018861574c565b84818110612e8e57612e8e615701565b9050602002016020810190612ea39190614ccf565b84613a1c565b600101612e57565b606083516001600160401b03811115612ecc57612ecc614b00565b604051908082528060200260200182016040528015612eff57816020015b6060815260200190600190039081612eea5790505b5090505f7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd826001600160a01b031663f0e0e67686866040518363ffffffff1660e01b8152600401612f519291906159d7565b5f60405180830381865afa158015612f6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f9291908101906159fb565b90505f5b8551811015613194575f868281518110612fb257612fb2615701565b6020026020010151905085516001600160401b03811115612fd557612fd5614b00565b604051908082528060200260200182016040528015612ffe578160200160208202803683370190505b5084838151811061301157613011615701565b60209081029190910101525f5b865181101561318a575f87828151811061303a5761303a615701565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506130759061414c565b9050806001600160401b03165f0361308e575050613182565b5f61309a858d85610884565b90508863ffffffff16816040015163ffffffff16111580156130c257505f8160200151600f0b125b156130e4576130d8815f01518260200151613ef5565b6001600160401b031681525b80515f906130ff906001600160401b039081169085166142cd565b90506131468189898151811061311757613117615701565b6020026020010151878151811061313057613130615701565b60200260200101516142e190919063ffffffff16565b89888151811061315857613158615701565b6020026020010151868151811061317157613171615701565b602002602001018181525050505050505b60010161301e565b5050600101612f96565b5050949350505050565b606654600160ff83161b908116036131c95760405163840a48d560e01b815260040160405180910390fd5b50565b5f6060816131dd604086018661574c565b90506001600160401b038111156131f6576131f6614b00565b60405190808252806020026020018201604052801561321f578160200160208202803683370190505b50905061322f604086018661574c565b90506001600160401b0381111561324857613248614b00565b604051908082528060200260200182016040528015613271578160200160208202803683370190505b50915060a55f61328086612979565b81526020019081526020015f205f815461329990615b07565b918290555092505f5b6132af604087018761574c565b905081101561389e5780158061334257506132cd604087018761574c565b6132d8600184615b1f565b8181106132e7576132e7615701565b90506020020160208101906132fc9190614ccf565b6001600160a01b0316613312604088018861574c565b8381811061332257613322615701565b90506020020160208101906133379190614ccf565b6001600160a01b0316115b61335f57604051639f1c805360e01b815260040160405180910390fd5b61336c606087018761574c565b8281811061337c5761337c615701565b905060200201355f1080156133bc5750670de0b6b3a76400006133a2606088018861574c565b838181106133b2576133b2615701565b9050602002013511155b6133d957604051631353603160e01b815260040160405180910390fd5b61341a6133e9604088018861574c565b838181106133f9576133f9615701565b905060200201602081019061340e9190614ccf565b60995f6114c089612979565b613437576040516331bc342760e11b815260040160405180910390fd5b5f8061348961344960208a018a614ccf565b61345289612979565b61345f60408c018c61574c565b8781811061346f5761346f615701565b90506020020160208101906134849190614ccf565b6129dc565b805191935091506001600160401b03165f036134a6575050613896565b5f6134e16134b760608b018b61574c565b868181106134c7576134c7615701565b85516001600160401b0316926020909102013590506142f5565b83519091506134fc6001600160401b038084169083166142cd565b86868151811061350e5761350e615701565b60200260200101818152505081835f0181815161352b9190615b32565b6001600160401b0316905250835182908590613548908390615b32565b6001600160401b0316905250602084018051839190613568908390615b32565b6001600160401b031690525060208301515f600f9190910b1215613680575f6135cb61359760608d018d61574c565b888181106135a7576135a7615701565b9050602002013585602001516135bc90615b51565b6001600160801b0316906142f5565b9050806001600160401b0316846020018181516135e89190615b75565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61361c60208d018d614ccf565b8b61362a60408f018f61574c565b8a81811061363a5761363a615701565b905060200201602081019061364f9190614ccf565b613660885f01518960200151613ef5565b8860400151604051613676959493929190615874565b60405180910390a1505b6136d261369060208c018c614ccf565b6136998b612979565b6136a660408e018e61574c565b898181106136b6576136b6615701565b90506020020160208101906136cb9190614ccf565b8787613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61370060208c018c614ccf565b8a61370e60408e018e61574c565b8981811061371e5761371e615701565b90506020020160208101906137339190614ccf565b865160405161374794939291904390615874565b60405180910390a161379861375f60208c018c614ccf565b61376c60408d018d61574c565b8881811061377c5761377c615701565b90506020020160208101906137919190614ccf565b865161430b565b6001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216635ae679a76137d460208d018d614ccf565b8b8b8e80604001906137e6919061574c565b8b8181106137f6576137f6615701565b905060200201602081019061380b9190614ccf565b89516040516001600160e01b031960e088901b16815261383395949392918991600401615ba2565b6020604051808303815f875af115801561384f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615bf5565b87868151811061388557613885615701565b602002602001018181525050505050505b6001016132a2565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56138cd6020870187614ccf565b856138db604089018961574c565b856138e960808c018c615900565b6040516138fc9796959493929190615c0c565b60405180910390a1509250929050565b60605f61087d8361438d565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f8111801561396257508261ffff1682105b15610b5c576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613996906143e6565b90505f5f6139a58884896129dc565b91509150806040015163ffffffff164310156139c357505050610b5c565b6139d08884898585613f14565b6001600160a01b038089165f90815260a360209081526040808320938b168352929052206139fd90614438565b50613a0785615b07565b9450613a1284615ca2565b9350505050613950565b8015613a9e576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014801590613a8157507f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d6001600160a01b0316826001600160a01b031614155b613a9e57604051632711b74d60e11b815260040160405180910390fd5b613aae8260995f6122cf87612979565b613acb5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b838360405161279092919061598e565b60605f613b08836144b5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613bb55750806060015163ffffffff164310155b15613bcf57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613c057f0000000000000000000000000000000000000000000000000000000000000000436157f3565b613c109060016157f3565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db9101612790565b6001600160a01b0381165f908152600183016020526040812054151561087d565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b81811015613e31576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613d9990836144dc565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff16918101829052919250431015613e14575050613e31565b613e22868260200151613ef5565b95505050806001019050613d61565b506001600160a01b038086165f90815260a1602090815260408083209388168352929052208390613e619061414c565b613e6b9190615b32565b9150509250929050565b5f61087d838361454b565b5f61087d836001600160a01b03841661454b565b5f61087d8383670de0b6b3a764000061462e565b5f613eb98460995f6114c089612979565b8015613ec25750815b80156114e757505090516001600160401b031615159392505050565b5f61087d6001600160401b03808516908416615cb7565b5f61087d613f0c836001600160401b038616615b75565b600f0b614683565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613fda57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b156140bc576001600160a01b0385165f908152609f602090815260408083208784529091529020614094908461416a565b506001600160a01b0385165f908152609d602052604090206140b6908561415f565b50610b5c565b80516001600160401b03165f03610b5c576001600160a01b0385165f908152609f6020908152604080832087845290915290206140f99084613e80565b506001600160a01b0385165f908152609f60209081526040808320878452909152902061412590612c28565b5f03610b5c576001600160a01b0385165f908152609d602052604090206118ab9085613e75565b5f61093282670de0b6b3a76400006146ee565b5f61087d8383614725565b5f61087d836001600160a01b038416614725565b5f805b82518110156141ed576141ad848483815181106141a0576141a0615701565b60200260200101516108bd565b80156141d657506141d68382815181106141c9576141c9615701565b60200260200101516127d0565b156141e5576001915050610932565b600101614181565b505f9392505050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614252573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615ce4565b6001600160a01b0316336001600160a01b0316146114ad5760405163794821ff60e01b815260040160405180910390fd5b5f825f0182815481106142bc576142bc615701565b905f5260205f200154905092915050565b5f61087d83670de0b6b3a764000084614771565b5f61087d8383670de0b6b3a7640000614771565b5f61087d8383670de0b6b3a76400006001614856565b6001600160a01b038084165f90815260a16020908152604080832093861683529290522061433a9043836148a5565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612790565b6060815f018054806020026020016040519081016040528092919081815260200182805480156143da57602002820191905f5260205f20905b8154815260200190600101908083116143c6575b50505050509050919050565b5f6144008254600f81810b600160801b909204900b131590565b1561441e57604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144528254600f81810b600160801b909204900b131590565b1561447057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561093257604051632cd44ac360e21b815260040160405180910390fd5b5f5f6144fe6144ea846148be565b85546144f99190600f0b615cff565b614927565b8454909150600160801b9004600f90810b9082900b1261453157604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614625575f61456d600183615b1f565b85549091505f9061458090600190615b1f565b90508181146145df575f865f01828154811061459e5761459e615701565b905f5260205f200154905080875f0184815481106145be576145be615701565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615d26565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610932565b5f915050610932565b82545f908161463f86868385614990565b905080156146795761466386614656600184615b1f565b5f91825260209091200190565b54600160201b90046001600160e01b03166108b3565b5091949350505050565b5f6001600160401b038211156146ea5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016128fe565b5090565b81545f90801561471d5761470784614656600184615b1f565b54600160201b90046001600160e01b031661092e565b509092915050565b5f81815260018301602052604081205461476a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610932565b505f610932565b5f80805f19858709858702925082811083820303915050805f036147a85783828161479e5761479e615d3a565b049250505061087d565b8084116147ef5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016128fe565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f614863868686614771565b9050600183600281111561487957614879615d4e565b14801561489557505f848061489057614890615d3a565b868809115b156114e7576108b3600182615d62565b6148b983836001600160401b0384166149e3565b505050565b5f6001600160ff1b038211156146ea5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016128fe565b80600f81900b811461498b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016128fe565b919050565b5f5b81831015610a81575f6149a58484614ae6565b5f8781526020902090915063ffffffff86169082015463ffffffff1611156149cf578092506149dd565b6149da816001615d62565b93505b50614992565b82548015614a99575f6149fb85614656600185615b1f565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509085161015614a4d5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614a975782614a6e86614656600186615b1f565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f614af46002848418615d75565b61087d90848416615d62565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b3657614b36614b00565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6457614b64614b00565b604052919050565b6001600160a01b03811681146131c9575f5ffd5b803563ffffffff8116811461498b575f5ffd5b5f60408284031215614ba3575f5ffd5b604080519081016001600160401b0381118282101715614bc557614bc5614b00565b6040529050808235614bd681614b6c565b8152614be460208401614b80565b60208201525092915050565b5f60408284031215614c00575f5ffd5b61087d8383614b93565b5f5f5f60808486031215614c1c575f5ffd5b8335614c2781614b6c565b9250614c368560208601614b93565b91506060840135614c4681614b6c565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff169082015260608101610932565b5f5f60608385031215614c95575f5ffd5b8235614ca081614b6c565b9150614caf8460208501614b93565b90509250929050565b5f60208284031215614cc8575f5ffd5b5035919050565b5f60208284031215614cdf575f5ffd5b813561087d81614b6c565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614d4357614d2d868351614cea565b6040959095019460209190910190600101614d1a565b5093949350505050565b602081525f61087d6020830184614d08565b5f5f83601f840112614d6f575f5ffd5b5081356001600160401b03811115614d85575f5ffd5b6020830191508360208260051b8501011115611045575f5ffd5b5f5f5f60408486031215614db1575f5ffd5b8335614dbc81614b6c565b925060208401356001600160401b03811115614dd6575f5ffd5b614de286828701614d5f565b9497909650939450505050565b5f6001600160401b03821115614e0757614e07614b00565b5060051b60200190565b5f82601f830112614e20575f5ffd5b8135614e33614e2e82614def565b614b3c565b8082825260208201915060208360051b860101925085831115614e54575f5ffd5b602085015b83811015614e7a578035614e6c81614b6c565b835260209283019201614e59565b5095945050505050565b5f5f5f60808486031215614e96575f5ffd5b614ea08585614b93565b925060408401356001600160401b03811115614eba575f5ffd5b614ec686828701614e11565b92505060608401356001600160401b03811115614ee1575f5ffd5b614eed86828701614e11565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614d43578151865260209586019590910190600101614f09565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f7e57603f19878603018452614f69858351614ef7565b94506020938401939190910190600101614f4d565b50929695505050505050565b5f5f5f5f60a08587031215614f9d575f5ffd5b614fa78686614b93565b935060408501356001600160401b03811115614fc1575f5ffd5b614fcd87828801614e11565b93505060608501356001600160401b03811115614fe8575f5ffd5b614ff487828801614e11565b92505061500360808601614b80565b905092959194509250565b5f5f5f5f5f60608688031215615022575f5ffd5b853561502d81614b6c565b945060208601356001600160401b03811115615047575f5ffd5b61505388828901614d5f565b90955093505060408601356001600160401b03811115615071575f5ffd5b61507d88828901614d5f565b969995985093965092949392505050565b5f5f6040838503121561509f575f5ffd5b82356150aa81614b6c565b915060208301356001600160401b038111156150c4575f5ffd5b830160a081860312156150d5575f5ffd5b809150509250929050565b828152604060208201525f610b716040830184614ef7565b5f5f60408385031215615109575f5ffd5b823561511481614b6c565b915060208301356150d581614b6c565b5f8151808452602084019350602083015f5b82811015614d435761516f86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101615136565b604081525f6151976040830185614d08565b82810360208401526114e78185615124565b5f8151808452602084019350602083015f5b82811015614d435781516001600160a01b03168652602095860195909101906001016151bb565b602081525f61087d60208301846151a9565b5f5f60408385031215615205575f5ffd5b82356001600160401b0381111561521a575f5ffd5b61522685828601614e11565b92505060208301356150d581614b6c565b602080825282518282018190525f918401906040840190835b818110156152775783516001600160401b0316835260209384019390920191600101615250565b509095945050505050565b5f5f5f5f60608587031215615295575f5ffd5b84356152a081614b6c565b93506152ae60208601614b80565b925060408501356001600160401b038111156152c8575f5ffd5b6152d487828801614d5f565b95989497509550505050565b5f5f604083850312156152f1575f5ffd5b82356152fc81614b6c565b915060208301356001600160401b03811115615316575f5ffd5b613e6b85828601614e11565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615368575f5ffd5b823561537381614b6c565b9150614caf60208401614b80565b5f60208284031215615391575f5ffd5b813560ff8116811461087d575f5ffd5b5f606082840312156153b1575f5ffd5b50919050565b5f602082840312156153c7575f5ffd5b81356001600160401b038111156153dc575f5ffd5b61092e848285016153a1565b5f5f5f608084860312156153fa575f5ffd5b83356001600160401b0381111561540f575f5ffd5b61541b86828701614e11565b935050614c368560208601614b93565b602081525f61087d6020830184615124565b5f5f5f6060848603121561544f575f5ffd5b833561545a81614b6c565b925060208401356001600160401b03811115615474575f5ffd5b61548086828701614e11565b92505061548f60408501614b80565b90509250925092565b5f5f604083850312156154a9575f5ffd5b82356154b481614b6c565b915060208301356001600160401b038111156154ce575f5ffd5b8301601f810185136154de575f5ffd5b80356154ec614e2e82614def565b8082825260208201915060208360051b85010192508783111561550d575f5ffd5b602084015b838110156156325780356001600160401b0381111561552f575f5ffd5b85016080818b03601f19011215615544575f5ffd5b61554c614b14565b6155598b60208401614b93565b815260608201356001600160401b03811115615573575f5ffd5b6155828c602083860101614e11565b60208301525060808201356001600160401b038111156155a0575f5ffd5b6020818401019250508a601f8301126155b7575f5ffd5b81356155c5614e2e82614def565b8082825260208201915060208360051b86010192508d8311156155e6575f5ffd5b6020850194505b8285101561561c5784356001600160401b038116811461560b575f5ffd5b8252602094850194909101906155ed565b6040840152505084525060209283019201615512565b50809450505050509250929050565b5f5f5f60408486031215615653575f5ffd5b833561565e81614b6c565b925060208401356001600160401b03811115615678575f5ffd5b8401601f81018613615688575f5ffd5b80356001600160401b0381111561569d575f5ffd5b8660208284010111156156ae575f5ffd5b939660209190910195509293505050565b5f5f604083850312156156d0575f5ffd5b82356156db81614b6c565b915060208301356001600160401b038111156156f5575f5ffd5b613e6b858286016153a1565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112615729575f5ffd5b9190910192915050565b5f60208284031215615743575f5ffd5b61087d82614b80565b5f5f8335601e19843603018112615761575f5ffd5b8301803591506001600160401b0382111561577a575f5ffd5b6020019150600581901b3603821315611045575f5ffd5b5f602082840312156157a1575f5ffd5b813561ffff8116811461087d575f5ffd5b5f602082840312156157c2575f5ffd5b8151801515811461087d575f5ffd5b604081016109328284614cea565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610932576109326157df565b8183526020830192505f815f5b84811015614d435763ffffffff61583283614b80565b168652602095860195919091019060010161581c565b6001600160a01b038581168252841660208201526060604082018190525f906108b3908301848661580f565b6001600160a01b038616815260c081016158916020830187614cea565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610b716020830184866158c5565b5f5f8335601e19843603018112615915575f5ffd5b8301803591506001600160401b0382111561592e575f5ffd5b602001915036819003821315611045575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f9061596e908301868861580f565b82810360608401526159818185876158c5565b9998505050505050505050565b6060810161599c8285614cea565b6001600160a01b039290921660409190910152919050565b805160208083015191908110156153b1575f1960209190910360031b1b16919050565b604081525f6159e960408301856151a9565b82810360208401526114e781856151a9565b5f60208284031215615a0b575f5ffd5b81516001600160401b03811115615a20575f5ffd5b8201601f81018413615a30575f5ffd5b8051615a3e614e2e82614def565b8082825260208201915060208360051b850101925086831115615a5f575f5ffd5b602084015b83811015615afc5780516001600160401b03811115615a81575f5ffd5b8501603f81018913615a91575f5ffd5b6020810151615aa2614e2e82614def565b808282526020820191506020808460051b8601010192508b831115615ac5575f5ffd5b6040840193505b82841015615ae7578351825260209384019390910190615acc565b86525050602093840193919091019050615a64565b509695505050505050565b5f60018201615b1857615b186157df565b5060010190565b81810381811115610932576109326157df565b6001600160401b038281168282160390811115610932576109326157df565b5f81600f0b60016001607f1b03198103615b6d57615b6d6157df565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610932576109326157df565b6001600160a01b038716815260e08101615bbf6020830188614cea565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f60208284031215615c05575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615c2a602084018a614cea565b60c060608401528690528660e083015f5b88811015615c6b578235615c4e81614b6c565b6001600160a01b0316825260209283019290910190600101615c3b565b508381036080850152615c7e8188614ef7565b91505082810360a0840152615c948185876158c5565b9a9950505050505050505050565b5f81615cb057615cb06157df565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610932576109326157df565b5f60208284031215615cf4575f5ffd5b815161087d81614b6c565b8082018281125f831280158216821582161715615d1e57615d1e6157df565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b80820180821115610932576109326157df565b5f82615d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212204822a3705860d0223c89242417e05d3a5345087df963e57606c2b5c3d238326364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "40": { + "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", + "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a9eb7922fcc5d3342ff9b5ab7a8bf23e57a11428d7ebabb9151464adde75010f64736f6c634300081c003300000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "35": { + "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "47": { + "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220d968f6e7b0fa23955f1f9580db081bbf816d7e99d0b3ab6d1bf5c644ea927f8d64736f6c634300081c003300", + "storage": { + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "11": { + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bfdf80ca4b361e8018a5f82c2bf79ca0703b2a580a1928bf0168143ae266103964736f6c634300081c0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, "3": { @@ -390,200 +508,154 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "10": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bfdf80ca4b361e8018a5f82c2bf79ca0703b2a580a1928bf0168143ae266103964736f6c634300081c0033000000000000000000", + "18": { + "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", + "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212204cd82bcd16986fe6b441e4b7c389c7f12dd596c825079086d78383b1e3d02f8364736f6c634300081c003300", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "39": { - "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", - "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a9eb7922fcc5d3342ff9b5ab7a8bf23e57a11428d7ebabb9151464adde75010f64736f6c634300081c003300000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "23": { - "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", - "code": "0x6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c181565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f76312e302e300000000000000000000000000000000000000000000000000006611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd82909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe49c3bbb4c8ae3857e9da2c037ca93049f5f5931a49706e5b29c897d23875e264736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "40": { - "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", - "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220993e175405432033ed7aea33210be529d0ba9c2edc6085e7b95533cc13f90a0064736f6c634300081c003300", - "storage": {} - }, - "43": { - "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "code": "0x608060405260043610610207575f3560e01c8063a69d9bb611610113578063c63fd5021161009d578063d4c250081161006d578063d4c2500814610620578063e2148f5a14610654578063f2fde38b14610673578063fc299dee14610692578063fe776c2a146106b1575f5ffd5b8063c63fd502146105af578063ceb29d61146105ce578063d156b911146105ed578063d4b6b83414610601575f5ffd5b8063a997f0ca116100e3578063a997f0ca146104f7578063a9a899cd14610518578063b526578714610537578063be6ab6ef1461056f578063c1a8e2c514610590575f5ffd5b8063a69d9bb614610487578063a8294cd8146104a6578063a8315705146104b9578063a98fb355146104d8575f5ffd5b80635d88746211610194578063740d837711610164578063740d8377146103e557806374edeb6c1461041957806383821e8e146104385780638da5cb5b146104575780638f8ee55214610474575f5ffd5b80635d8874621461036a5780636deab01914610393578063715018a6146103b25780637240f9af146103c6575f5ffd5b8063303ca956116101da578063303ca956146102cd57806333dcde4c146102ec5780633bc28c8c1461030d578063501060021461032c57806359b005341461034b575f5ffd5b80631500cd8d1461020b578063191088391461022c578063265973831461024b5780632fb31ef11461029c575b5f5ffd5b348015610216575f5ffd5b5061022a6102253660046134d0565b6106df565b005b348015610237575f5ffd5b5061022a6102463660046134eb565b610757565b348015610256575f5ffd5b5061027f6102653660046134d0565b606b6020525f90815260409020546001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b3480156102a7575f5ffd5b506067546001600160a01b03165b6040516001600160a01b039091168152602001610293565b3480156102d8575f5ffd5b5061022a6102e73660046135a1565b610977565b3480156102f7575f5ffd5b50610300610af4565b604051610293919061362f565b348015610318575f5ffd5b5061022a6103273660046134d0565b610b84565b348015610337575f5ffd5b50610300610346366004613657565b610c04565b348015610356575f5ffd5b5061022a6103653660046134d0565b6113f4565b348015610375575f5ffd5b5061037e602081565b60405163ffffffff9091168152602001610293565b34801561039e575f5ffd5b5061022a6103ad36600461384d565b61151a565b3480156103bd575f5ffd5b5061022a611a3a565b3480156103d1575f5ffd5b5061022a6103e03660046138f7565b611a4d565b3480156103f0575f5ffd5b506102b56103ff3660046134d0565b60696020525f90815260409020546001600160a01b031681565b348015610424575f5ffd5b5061022a6104333660046134d0565b611b7e565b348015610443575f5ffd5b5061022a610452366004613928565b611bfe565b348015610462575f5ffd5b506033546001600160a01b03166102b5565b34801561047f575f5ffd5b5061037e5f81565b348015610492575f5ffd5b5061022a6104a13660046134eb565b611f52565b61022a6104b4366004613974565b612152565b3480156104c4575f5ffd5b5061022a6104d33660046139b4565b612268565b3480156104e3575f5ffd5b5061022a6104f23660046138f7565b612357565b348015610502575f5ffd5b5061050b6123dd565b60405161029391906139f2565b348015610523575f5ffd5b5061022a6105323660046134d0565b612594565b348015610542575f5ffd5b5061055f6105513660046134d0565b6001600160a01b0316301490565b6040519015158152602001610293565b34801561057a575f5ffd5b506105836125e4565b6040516102939190613a95565b34801561059b575f5ffd5b5061022a6105aa366004613aa7565b61268c565b3480156105ba575f5ffd5b5061022a6105c9366004613af7565b612774565b3480156105d9575f5ffd5b5061022a6105e83660046139b4565b6129aa565b3480156105f8575f5ffd5b50610300612c46565b34801561060c575f5ffd5b50606a546102b5906001600160a01b031681565b34801561062b575f5ffd5b506102b561063a3660046134d0565b60686020525f90815260409020546001600160a01b031681565b34801561065f575f5ffd5b5061022a61066e3660046134d0565b612c62565b34801561067e575f5ffd5b5061022a61068d3660046134d0565b612cdc565b34801561069d575f5ffd5b506065546102b5906001600160a01b031681565b3480156106bc575f5ffd5b5061055f6106cb3660046134d0565b60666020525f908152604090205460ff1681565b6106e7612d52565b6001600160a01b03811661070e5760405163d92e233d60e01b815260040160405180910390fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b61075f612d52565b6040805180820182523081525f60208201819052915163105dea1f60e21b81529091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c906107c1908590600401613bb6565b5f60405180830381865afa1580156107db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108029190810190613bde565b90505f5b83811015610937575f805b83518110156108845786868481811061082c5761082c613c77565b61084292602060409092020190810191506134d0565b6001600160a01b031684828151811061085d5761085d613c77565b60200260200101516001600160a01b03160361087c5760019150610884565b600101610811565b50806108a3576040516331bc342760e11b815260040160405180910390fd5b8585838181106108b5576108b5613c77565b90506040020160200160208101906108cd9190613c8b565b606b5f8888868181106108e2576108e2613c77565b6108f892602060409092020190810191506134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b039290921691909117905550600101610806565b507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac8484604051610969929190613ca4565b60405180910390a150505050565b61097f612dac565b6001600160a01b03831630146109a857604051631280731d60e21b815260040160405180910390fd5b600181146109c95760405163f37f411760e01b815260040160405180910390fd5b5f828282816109da576109da613c77565b90506020020160208101906109ef9190613d13565b63ffffffff1614610a135760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b038481165f9081526068602052604090205416610a4a576040516325ec6c1f60e01b815260040160405180910390fd5b6001600160a01b038085165f90815260686020908152604080832080546001600160a01b03198082169092559094168084526069909252822080549093169092558390839081610a9c57610a9c613c77565b9050602002016020810190610ab19190613d13565b63ffffffff16856001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a35050505050565b6060606c8054610b0390613d2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2f90613d2c565b8015610b7a5780601f10610b5157610100808354040283529160200191610b7a565b820191905f5260205f20905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b610b8c612d52565b6001600160a01b038116610bb35760405163d92e233d60e01b815260040160405180910390fd5b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c905f90a35050565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610c67908590600401613bb6565b5f60405180830381865afa158015610c81573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ca89190810190613d64565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316634177a87c846040518263ffffffff1660e01b8152600401610cf79190613bb6565b5f60405180830381865afa158015610d11573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d389190810190613bde565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316632b453a9a8585856040518463ffffffff1660e01b8152600401610d8b93929190613df3565b5f60405180830381865afa158015610da5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcc9190810190613ec4565b90505f83516001600160401b03811115610de857610de8613670565b604051908082528060200260200182016040528015610e11578160200160208202803683370190505b5090505f84516001600160401b03811115610e2e57610e2e613670565b604051908082528060200260200182016040528015610e57578160200160208202803683370190505b5090505f85516001600160401b03811115610e7457610e74613670565b604051908082528060200260200182016040528015610e9d578160200160208202803683370190505b5090505f805b8751811015611068575f60685f8a8481518110610ec257610ec2613c77565b6020908102919091018101516001600160a01b039081168352908201929092526040015f205416905080610ef65750611060565b5f805b8951811015610fab57606b5f8b8381518110610f1757610f17613c77565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160601b03166001600160601b0316898581518110610f6c57610f6c613c77565b60200260200101518281518110610f8557610f85613c77565b6020026020010151610f979190613f87565b610fa19083613f9e565b9150600101610ef9565b50805f03610fba575050611060565b81878581518110610fcd57610fcd613c77565b60200260200101906001600160a01b031690816001600160a01b0316815250508086858151811061100057611000613c77565b60200260200101818152505089838151811061101e5761101e613c77565b602002602001015185858151811061103857611038613c77565b6001600160a01b03909216602092830291909101909101528361105a81613fb1565b94505050505b600101610ea3565b50805f036110895760405163339e1ffb60e01b815260040160405180910390fd5b5f6020821061109957602061109b565b815b90505f5b818110156112b657805f6110b4826001613f9e565b90505b848110156111405761112f8782815181106110d4576110d4613c77565b60200260200101518783815181106110ee576110ee613c77565b602002602001015189858151811061110857611108613c77565b602002602001015189868151811061112257611122613c77565b6020026020010151612df5565b15611138578091505b6001016110b7565b508181146112ad5786818151811061115a5761115a613c77565b602002602001015187838151811061117457611174613c77565b602002602001015188848151811061118e5761118e613c77565b602002602001018984815181106111a7576111a7613c77565b6001600160a01b0393841660209182029290920101529116905285518690829081106111d5576111d5613c77565b60200260200101518683815181106111ef576111ef613c77565b602002602001015187848151811061120957611209613c77565b6020026020010188848151811061122257611222613c77565b602002602001018281525082815250505084818151811061124557611245613c77565b602002602001015185838151811061125f5761125f613c77565b602002602001015186848151811061127957611279613c77565b6020026020010187848151811061129257611292613c77565b6001600160a01b039384166020918202929092010152911690525b5060010161109f565b505f816001600160401b038111156112d0576112d0613670565b6040519080825280602002602001820160405280156112f9578160200160208202803683370190505b5090505f5b828110156113525786818151811061131857611318613c77565b602002602001015182828151811061133257611332613c77565b6001600160a01b03909216602092830291909101909101526001016112fe565b506040805180820182528281526001600160401b038e1660208201529051631a7611b760e31b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99163d3b08db8916113a39190600401613fc9565b5f60405180830381865af41580156113bd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113e49190810190614039565b9c9b505050505050505050505050565b6113fc612e26565b6001600160a01b0381166114235760405163d92e233d60e01b815260040160405180910390fd5b335f908152606860205260409020546001600160a01b03908116908216810361145f5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f908152606960205260409020541680156114985760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260696020818152604080842080546001600160a01b031990811690915533808652606884528286208054978b169783168817905586865293909252808420805490921683179091555190917f03ddab9377727860d18575279a4fb19cf32e3e650ae962f6ce2feaed801cd3af91a3505050565b5f54610100900460ff161580801561153857505f54600160ff909116105b806115515750303b15801561155157505f5460ff166001145b6115b95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156115da575f805461ff0019166101001790555b6001600160a01b0387166116015760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0386166116285760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841661164f5760405163d92e233d60e01b815260040160405180910390fd5b5f82511161167057604051632e56a66b60e11b815260040160405180910390fd5b611678612ee1565b61168187612f0f565b606580546001600160a01b0319166001600160a01b0388169081179091556040515f907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c908290a3606c6116d583826140f1565b507f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663a9821821306040518060a00160405280606d81526020016149bb606d91396040518363ffffffff1660e01b815260040161173c9291906141ab565b5f604051808303815f87803b158015611753575f5ffd5b505af1158015611765573d5f5f3e3d5ffd5b505050505f85516001600160401b0381111561178357611783613670565b6040519080825280602002602001820160405280156117ac578160200160208202803683370190505b5090505f5b8651811015611885578681815181106117cc576117cc613c77565b60200260200101515f01518282815181106117e9576117e9613c77565b60200260200101906001600160a01b031690816001600160a01b03168152505086818151811061181b5761181b613c77565b602002602001015160200151606b5f89848151811061183c5761183c613c77565b602090810291909101810151516001600160a01b031682528101919091526040015f2080546001600160601b0319166001600160601b03929092169190911790556001016117b1565b506040805160018082528183019092525f91816020015b604080518082019091525f81526060602082015281526020019060019003908161189c57905050905060405180604001604052805f63ffffffff16815260200183815250815f815181106118f2576118f2613c77565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e09061194b90309085906004016141ce565b5f604051808303815f87803b158015611962575f5ffd5b505af1158015611974573d5f5f3e3d5ffd5b5050606780546001600160a01b0319166001600160a01b038a81169190911790915587161591506119ea905057606a80546001600160a01b0319166001600160a01b0387169081179091556040515f907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb908290a35b50508015611a31575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611a42612d52565b611a4b5f612f0f565b565b611a55612f60565b5f815111611aa55760405162461bcd60e51b815260206004820152601760248201527f56657273696f6e2063616e6e6f7420626520656d70747900000000000000000060448201526064016115b0565b5f606c8054611ab390613d2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611adf90613d2c565b8015611b2a5780601f10611b0157610100808354040283529160200191611b2a565b820191905f5260205f20905b815481529060010190602001808311611b0d57829003601f168201915b5050505050905081606c9081611b4091906140f1565b507f22efc5f993dce37856b77dd72d7d7661032380c9728c4133f3c071c591bc6ca78183604051611b7292919061425d565b60405180910390a15050565b611b86612d52565b6001600160a01b038116611bad5760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb905f90a35050565b611c06612fb0565b5f611c108261431e565b6040810151519091505f816001600160401b03811115611c3257611c32613670565b604051908082528060200260200182016040528015611c7657816020015b604080518082019091525f8082526020820152815260200190600190039081611c505790505b5090505f80805b84811015611d7e575f60695f88604001518481518110611c9f57611c9f613c77565b602090810291909101810151516001600160a01b039081168352908201929092526040015f205416905080611cd45750611d76565b86604001518281518110611cea57611cea613c77565b6020026020010151858481518110611d0457611d04613c77565b602002602001018190525080858481518110611d2257611d22613c77565b60209081029190910101516001600160a01b0390911690528451859084908110611d4e57611d4e613c77565b60200260200101516020015184611d659190613f9e565b935082611d7181613fb1565b935050505b600101611c7d565b5080835260408581018490528051838152602081018390527fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e81910160405180910390a1805f03611dd057505050505050565b611ddd8560400151612fdb565b611e227f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae83611e1260408a0160208b016134d0565b6001600160a01b031691906130d2565b6040805160018082528183019092525f91816020015b611e836040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b815260200190600190039081611e3857905050905085815f81518110611eab57611eab613c77565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca2989990611f1a908490869060040161442c565b5f604051808303815f87803b158015611f31575f5ffd5b505af1158015611f43573d5f5f3e3d5ffd5b50505050505050505050505b50565b611f5a612d52565b5f816001600160401b03811115611f7357611f73613670565b604051908082528060200260200182016040528015611f9c578160200160208202803683370190505b5090505f5b8281101561209657838382818110611fbb57611fbb613c77565b611fd192602060409092020190810191506134d0565b828281518110611fe357611fe3613c77565b60200260200101906001600160a01b031690816001600160a01b03168152505083838281811061201557612015613c77565b905060400201602001602081019061202d9190613c8b565b606b5f86868581811061204257612042613c77565b61205892602060409092020190810191506134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101611fa1565b50604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906120e79030905f90869060040161457d565b5f604051808303815f87803b1580156120fe575f5ffd5b505af1158015612110573d5f5f3e3d5ffd5b505050507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac8383604051612145929190613ca4565b60405180910390a1505050565b61215a6131b4565b5f61216484610c04565b6067549091506001600160a01b031663f2e500b234835f6040519080825280602002602001820160405280156121ae57816020015b60608152602001906001900390816121995790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016121e09594939291906145ac565b5f604051808303818588803b1580156121f7575f5ffd5b505af1158015612209573d5f5f3e3d5ffd5b5050505050336001600160a01b0316846001600160401b03167f08de23359763aa62302ebcf98e51ce5f9f71f925679c5b7fc9d6cf634e6b4a73838051906020012060405161225a91815260200190565b60405180910390a350505050565b612270612d52565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906122c29030905f9087908790600401614656565b5f604051808303815f87803b1580156122d9575f5ffd5b505af11580156122eb573d5f5f3e3d5ffd5b505f925050505b8181101561235257606b5f84848481811061230f5761230f613c77565b905060200201602081019061232491906134d0565b6001600160a01b0316815260208101919091526040015f2080546001600160601b03191690556001016122f2565b505050565b61235f612d52565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9821821906123ad90309085906004016141ab565b5f604051808303815f87803b1580156123c4575f5ffd5b505af11580156123d6573d5f5f3e3d5ffd5b5050505050565b6040805180820182523081525f60208201819052915163105dea1f60e21b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90612440908590600401613bb6565b5f60405180830381865afa15801561245a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124819190810190613bde565b90505f81516001600160401b0381111561249d5761249d613670565b6040519080825280602002602001820160405280156124e157816020015b604080518082019091525f80825260208201528152602001906001900390816124bb5790505b5090505f5b825181101561258c57604051806040016040528084838151811061250c5761250c613c77565b60200260200101516001600160a01b03168152602001606b5f86858151811061253757612537613c77565b6020908102919091018101516001600160a01b031682528101919091526040015f20546001600160601b03169052825183908390811061257957612579613c77565b60209081029190910101526001016124e6565b509392505050565b61259c612d52565b6001600160a01b0381165f81815260666020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90612645908490600401613bb6565b5f60405180830381865afa15801561265f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126869190810190613bde565b91505090565b612694612d52565b5f6040518060600160405280856001600160a01b03168152602001306001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050915250604051636e3492b560e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b5906127419084906004016146c0565b5f604051808303815f87803b158015612758575f5ffd5b505af115801561276a573d5f5f3e3d5ffd5b5050505050505050565b61277c612dac565b6001600160a01b03851630146127a557604051631280731d60e21b815260040160405180910390fd5b600183146127c65760405163b1698da560e01b815260040160405180910390fd5b5f848482816127d7576127d7613c77565b90506020020160208101906127ec9190613d13565b63ffffffff16146128105760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526066602052604090205460ff1661284857604051630444d2e160e21b815260040160405180910390fd5b6001600160a01b038681165f908152606860205260409020541615612880576040516342ee68b560e01b815260040160405180910390fd5b5f6128bf83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506131df92505050565b6001600160a01b038082165f9081526069602052604090205491925016156128fa5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038088165f81815260686020908152604080832080549587166001600160a01b031996871681179091558352606990915281208054909316909117909155859085908161295057612950613c77565b90506020020160208101906129659190613d13565b63ffffffff16876001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a350505050505050565b6129b2612fb0565b5f5b81811015612c19575f60695f8585858181106129d2576129d2613c77565b90506020028101906129e4919061472e565b6129f29060208101906134d0565b6001600160a01b03908116825260208201929092526040015f205416905080612a1b5750612c11565b5f6040518060a00160405280836001600160a01b031681526020015f63ffffffff168152602001868686818110612a5457612a54613c77565b9050602002810190612a66919061472e565b612a7490602081019061474c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612abc57612abc613c77565b9050602002810190612ace919061472e565b612adc90604081019061474c565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612b2457612b24613c77565b9050602002810190612b36919061472e565b612b44906060810190614791565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051633635205760e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690633635205790612bca90309085906004016147d3565b5f604051808303815f875af1158015612be5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c0c9190810190614881565b505050505b6001016129b4565b506040517f69e2dc7f4757ef3cbac3a5423ac42ce1938cb3b79c4f35563460926176265ce0905f90a15050565b6040518060a00160405280606d81526020016149bb606d913981565b612c6a612d52565b6001600160a01b038116612c915760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f81815260666020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b612ce4612d52565b6001600160a01b038116612d495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115b0565b611f4f81612f0f565b6033546001600160a01b03163314611a4b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115b0565b336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611a4b576040516323d871a560e01b815260040160405180910390fd5b5f828514612e065750818411612e1e565b816001600160a01b0316846001600160a01b03161090505b949350505050565b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba290612e8590339085906004016148c5565b602060405180830381865afa158015612ea0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec491906148fb565b611f4f5760405163668191af60e11b815260040160405180910390fd5b5f54610100900460ff16612f075760405162461bcd60e51b81526004016115b09061491a565b611a4b61322e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610380546001600160a01b0316338114612fac5760405163283fa43d60e11b815260040160405180910390fd5b5050565b6065546001600160a01b03163314611a4b57604051638e79fdb560e01b815260040160405180910390fd5b805160015b81811015612352575f838281518110612ffb57612ffb613c77565b602002602001015190505f8290505b5f81118015613051575081516001600160a01b03168561302b600184614965565b8151811061303b5761303b613c77565b60200260200101515f01516001600160a01b0316115b156130aa5784613062600183614965565b8151811061307257613072613c77565b602002602001015185828151811061308c5761308c613c77565b602002602001018190525080806130a290614978565b91505061300a565b818582815181106130bd576130bd613c77565b60209081029190910101525050600101612fe0565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa15801561311f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613143919061498d565b90506131ae8463095ea7b360e01b8561315c8686613f9e565b6040516001600160a01b039092166024830152604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261325d565b50505050565b606a546001600160a01b03163314611a4b576040516305067f3b60e21b815260040160405180910390fd5b5f81516014146132025760405163526c487560e11b815260040160405180910390fd5b50602081015160601c806132295760405163d92e233d60e01b815260040160405180910390fd5b919050565b5f54610100900460ff166132545760405162461bcd60e51b81526004016115b09061491a565b611a4b33612f0f565b5f6132b1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133309092919063ffffffff16565b905080515f14806132d15750808060200190518101906132d191906148fb565b6123525760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115b0565b606061333e84845f85613348565b90505b9392505050565b6060824710156133a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016115b0565b5f5f866001600160a01b031685876040516133c491906149a4565b5f6040518083038185875af1925050503d805f81146133fe576040519150601f19603f3d011682016040523d82523d5f602084013e613403565b606091505b50915091506134148783838761341f565b979650505050505050565b6060831561348d5782515f03613486576001600160a01b0385163b6134865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115b0565b5081612e1e565b612e1e83838151156134a25781518083602001fd5b8060405162461bcd60e51b81526004016115b0919061362f565b6001600160a01b0381168114611f4f575f5ffd5b5f602082840312156134e0575f5ffd5b8135613341816134bc565b5f5f602083850312156134fc575f5ffd5b82356001600160401b03811115613511575f5ffd5b8301601f81018513613521575f5ffd5b80356001600160401b03811115613536575f5ffd5b8560208260061b840101111561354a575f5ffd5b6020919091019590945092505050565b5f5f83601f84011261356a575f5ffd5b5081356001600160401b03811115613580575f5ffd5b6020830191508360208260051b850101111561359a575f5ffd5b9250929050565b5f5f5f5f606085870312156135b4575f5ffd5b84356135bf816134bc565b935060208501356135cf816134bc565b925060408501356001600160401b038111156135e9575f5ffd5b6135f58782880161355a565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6133416020830184613601565b80356001600160401b0381168114613229575f5ffd5b5f60208284031215613667575f5ffd5b61334182613641565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156136a6576136a6613670565b60405290565b60405160c081016001600160401b03811182821017156136a6576136a6613670565b604051601f8201601f191681016001600160401b03811182821017156136f6576136f6613670565b604052919050565b5f6001600160401b0382111561371657613716613670565b5060051b60200190565b80356001600160601b0381168114613229575f5ffd5b5f82601f830112613745575f5ffd5b8135613758613753826136fe565b6136ce565b8082825260208201915060208360061b860101925085831115613779575f5ffd5b602085015b838110156137d05760408188031215613795575f5ffd5b61379d613684565b81356137a8816134bc565b81526137b660208301613720565b60208201528084525060208301925060408101905061377e565b5095945050505050565b5f6001600160401b038211156137f2576137f2613670565b50601f01601f191660200190565b5f82601f83011261380f575f5ffd5b813561381d613753826137da565b818152846020838601011115613831575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f60c08789031215613862575f5ffd5b863561386d816134bc565b9550602087013561387d816134bc565b945060408701356001600160401b03811115613897575f5ffd5b6138a389828a01613736565b94505060608701356138b4816134bc565b925060808701356138c4816134bc565b915060a08701356001600160401b038111156138de575f5ffd5b6138ea89828a01613800565b9150509295509295509295565b5f60208284031215613907575f5ffd5b81356001600160401b0381111561391c575f5ffd5b612e1e84828501613800565b5f60208284031215613938575f5ffd5b81356001600160401b0381111561394d575f5ffd5b820160c08185031215613341575f5ffd5b80356001600160801b0381168114613229575f5ffd5b5f5f5f60608486031215613986575f5ffd5b61398f84613641565b925061399d6020850161395e565b91506139ab6040850161395e565b90509250925092565b5f5f602083850312156139c5575f5ffd5b82356001600160401b038111156139da575f5ffd5b6139e68582860161355a565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015613a4757835180516001600160a01b031684526020908101516001600160601b03168185015290930192604090920191600101613a0b565b509095945050505050565b5f8151808452602084019350602083015f5b82811015613a8b5781516001600160a01b0316865260209586019590910190600101613a64565b5093949350505050565b602081525f6133416020830184613a52565b5f5f5f60408486031215613ab9575f5ffd5b8335613ac4816134bc565b925060208401356001600160401b03811115613ade575f5ffd5b613aea8682870161355a565b9497909650939450505050565b5f5f5f5f5f5f60808789031215613b0c575f5ffd5b8635613b17816134bc565b95506020870135613b27816134bc565b945060408701356001600160401b03811115613b41575f5ffd5b613b4d89828a0161355a565b90955093505060608701356001600160401b03811115613b6b575f5ffd5b8701601f81018913613b7b575f5ffd5b80356001600160401b03811115613b90575f5ffd5b896020828401011115613ba1575f5ffd5b60208201935080925050509295509295509295565b81516001600160a01b0316815260208083015163ffffffff1690820152604081015b92915050565b5f60208284031215613bee575f5ffd5b81516001600160401b03811115613c03575f5ffd5b8201601f81018413613c13575f5ffd5b8051613c21613753826136fe565b8082825260208201915060208360051b850101925086831115613c42575f5ffd5b6020840193505b82841015613c6d578351613c5c816134bc565b825260209384019390910190613c49565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c9b575f5ffd5b61334182613720565b602080825281018290525f8360408301825b858110156137d0578235613cc9816134bc565b6001600160a01b031682526001600160601b03613ce860208501613720565b16602083015260409283019290910190600101613cb6565b803563ffffffff81168114613229575f5ffd5b5f60208284031215613d23575f5ffd5b61334182613d00565b600181811c90821680613d4057607f821691505b602082108103613d5e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d74575f5ffd5b81516001600160401b03811115613d89575f5ffd5b8201601f81018413613d99575f5ffd5b8051613da7613753826136fe565b8082825260208201915060208360051b850101925086831115613dc8575f5ffd5b6020840193505b82841015613c6d578351613de2816134bc565b825260209384019390910190613dcf565b83516001600160a01b0316815260208085015163ffffffff16908201525f6080820160806040840152845190819052602085019060a08401905f5b81811015613e555783516001600160a01b0316835260209384019390920191600101613e2e565b505083810360608501526134148186613a52565b5f82601f830112613e78575f5ffd5b8151613e86613753826136fe565b8082825260208201915060208360051b860101925085831115613ea7575f5ffd5b602085015b838110156137d0578051835260209283019201613eac565b5f60208284031215613ed4575f5ffd5b81516001600160401b03811115613ee9575f5ffd5b8201601f81018413613ef9575f5ffd5b8051613f07613753826136fe565b8082825260208201915060208360051b850101925086831115613f28575f5ffd5b602084015b83811015613f685780516001600160401b03811115613f4a575f5ffd5b613f5989602083890101613e69565b84525060209283019201613f2d565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417613bd857613bd8613f73565b80820180821115613bd857613bd8613f73565b5f60018201613fc257613fc2613f73565b5060010190565b602080825282516040838301528051606084018190525f929190910190829060808501905b808310156140195783516001600160a01b031682526020938401936001939093019290910190613fee565b506001600160401b03602087015116604086015280935050505092915050565b5f60208284031215614049575f5ffd5b81516001600160401b0381111561405e575f5ffd5b8201601f8101841361406e575f5ffd5b805161407c613753826137da565b818152856020838501011115614090575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b601f82111561235257805f5260205f20601f840160051c810160208510156140d25750805b601f840160051c820191505b818110156123d6575f81556001016140de565b81516001600160401b0381111561410a5761410a613670565b61411e816141188454613d2c565b846140ad565b6020601f821160018114614150575f83156141395750848201515b5f19600385901b1c1916600184901b1784556123d6565b5f84815260208120601f198516915b8281101561417f578785015182556020948501946001909201910161415f565b508482101561419c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03831681526040602082018190525f9061333e90830184613601565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b8281101561425057605f19878603018452815163ffffffff8151168652602081015190506040602087015261423a6040870182613a52565b9550506020938401939190910190600101614202565b5092979650505050505050565b604081525f61426f6040830185613601565b82810360208401526142818185613601565b95945050505050565b8035613229816134bc565b5f82601f8301126142a4575f5ffd5b81356142b2613753826136fe565b8082825260208201915060208360061b8601019250858311156142d3575f5ffd5b602085015b838110156137d057604081880312156142ef575f5ffd5b6142f7613684565b8135614302816134bc565b81526020828101358183015290845292909201916040016142d8565b5f60c0823603121561432e575f5ffd5b6143366136ac565b82356001600160401b0381111561434b575f5ffd5b61435736828601613736565b8252506143666020840161428a565b602082015260408301356001600160401b03811115614383575f5ffd5b61438f36828601614295565b6040830152506143a160608401613d00565b60608201526143b260808401613d00565b608082015260a08301356001600160401b038111156143cf575f5ffd5b6143db36828601613800565b60a08301525092915050565b5f8151808452602084019350602083015f5b82811015613a8b57815180516001600160a01b0316875260209081015181880152604090960195909101906001016143f9565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b8281101561425057868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b808310156144e357835180516001600160a01b031683526020908101516001600160601b0316908301526040820191506020840193506001830192506144a2565b506020840151925061450060208a01846001600160a01b03169052565b6040840151925088810360408a015261451981846143e7565b925050506060820151614534606089018263ffffffff169052565b50608082015161454c608089018263ffffffff169052565b5060a0820151915086810360a08801526145668183613601565b965050506020938401939190910190600101614472565b6001600160a01b038416815263ffffffff831660208201526060604082018190525f9061428190830184613a52565b60a081525f6145be60a0830188613601565b828103602084015280875180835260208301915060208160051b84010160208a015f5b8381101561461357601f198684030185526145fd838351613601565b60209586019590935091909101906001016145e1565b50508581036040870152614627818a613601565b94505050505061464260608301856001600160801b03169052565b6001600160801b0383166080830152613c6d565b6001600160a01b038516815263ffffffff8416602082015260606040820181905281018290525f8360808301825b858110156146b4578235614697816134bc565b6001600160a01b0316825260209283019290910190600101614684565b50979650505050505050565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b808310156137d05763ffffffff8451168252602082019150602084019350600183019250614705565b5f8235607e19833603018112614742575f5ffd5b9190910192915050565b5f5f8335601e19843603018112614761575f5ffd5b8301803591506001600160401b0382111561477a575f5ffd5b6020019150600581901b360382131561359a575f5ffd5b5f5f8335601e198436030181126147a6575f5ffd5b8301803591506001600160401b038211156147bf575f5ffd5b60200191503681900382131561359a575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f9061481b60e0840182613a52565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b808310156148635783518252602082019150602084019350600183019250614840565b506080860151858203603f190160c087015292506134148184613601565b5f5f60408385031215614892575f5ffd5b825160208401519092506001600160401b038111156148af575f5ffd5b6148bb85828601613e69565b9150509250929050565b6001600160a01b038316815260608101613341602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f6020828403121561490b575f5ffd5b81518015158114613341575f5ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81810381811115613bd857613bd8613f73565b5f8161498657614986613f73565b505f190190565b5f6020828403121561499d575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f64617461686176656e2d78797a2f64617461686176656e2f726566732f68656164732f6d61696e2f636f6e7472616374732f6465706c6f796d656e74732f6d657461646174612e6a736f6ea26469706673582212209122317ae3f70db0ab551576c693b5f033aba7f39516e80617d013c58912c98d64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "5": { - "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", - "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220367283a645a6f2ff4567a6b7f3c48a7618ad09eda48237419b569370b356fa4d64736f6c634300081c0033000000", - "storage": {} - }, "45": { "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", "code": "0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea26469706673582212204906941268839d569ecaf7e18f112ade90c540d0de5142ca9f7725e57df91e0964736f6c634300081c00330000000000000000", "storage": {} }, - "25": { - "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d", - "code": "0x608060405234801561000f575f5ffd5b50600436106102ff575f3560e01c8063670d3ba211610195578063b2447af7116100e4578063db4df7611161009e578063f231bd0811610079578063f231bd08146107f7578063f605ce081461080a578063fabc1cbc1461081d578063fe4b84df14610830575f5ffd5b8063db4df76114610796578063dc2af692146107bd578063df5cf723146107d0575f5ffd5b8063b2447af714610708578063b66bd9891461071b578063b9fbaed11461072e578063ba1a84e51461075d578063c221d8ae14610770578063d3d96ff414610783575f5ffd5b8063886f11951161014f578063952899ee1161012a578063952899ee146106bc578063a9333ec8146106cf578063a9821821146106e2578063adc2e3d9146106f5575f5ffd5b8063886f1195146106625780638ce648541461068957806394d7d00c146106a9575f5ffd5b8063670d3ba2146105c45780636cfb4481146105d75780636e3492b5146106025780636e875dba1461061557806379ae50cd146106285780637bc1ef611461063b575f5ffd5b806340120dab1161025157806350feea201161020b57806356c483e6116101e657806356c483e61461057e578063595c6a67146105915780635ac86ab7146105995780635c975abb146105bc575f5ffd5b806350feea2014610543578063547afb871461055657806354fd4d5014610569575f5ffd5b806340120dab146104875780634177a87c146104a85780634657e26a146104c85780634a10ffe5146104ef5780634b5046ef1461050f5780634cfd293914610522575f5ffd5b8063261f84e0116102bc5780632bab2c4a116102975780632bab2c4a1461042d578063304c10cd1461044057806332a879e4146104535780633635205714610466575f5ffd5b8063261f84e0146103be5780632981eb77146103d15780632b453a9a1461040d575f5ffd5b80630f3df50e1461030357806310e1b9b8146103335780631352c3e614610353578063136439dd1461037657806315fe50281461038b578063260dc758146103ab575b5f5ffd5b610316610311366004614bf0565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b610346610341366004614c0a565b610884565b60405161032a9190614c51565b610366610361366004614c84565b6108bd565b604051901515815260200161032a565b610389610384366004614cb8565b610938565b005b61039e610399366004614ccf565b610972565b60405161032a9190614d4d565b6103666103b9366004614bf0565b610a89565b6103896103cc366004614d9f565b610aba565b6103f87f000000000000000000000000000000000000000000000000000000000000003281565b60405163ffffffff909116815260200161032a565b61042061041b366004614e84565b610b63565b60405161032a9190614f27565b61042061043b366004614f8a565b610b79565b61031661044e366004614ccf565b610c18565b61038961046136600461500e565b610c47565b61047961047436600461508e565b610d8e565b60405161032a9291906150e0565b61049a6104953660046150f8565b610ed1565b60405161032a929190615185565b6104bb6104b6366004614bf0565b61104c565b60405161032a91906151e2565b6103167f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6105026104fd3660046151f4565b611070565b60405161032a9190615237565b61038961051d36600461500e565b611118565b610535610530366004614bf0565b6111ab565b60405190815260200161032a565b610389610551366004615282565b6111cd565b6105026105643660046152e0565b6112be565b610571611366565b60405161032a9190615322565b61038961058c366004615357565b611396565b61038961149b565b6103666105a7366004615381565b606654600160ff9092169190911b9081161490565b606654610535565b6103666105d2366004614c84565b6114af565b6105ea6105e53660046150f8565b6114db565b6040516001600160401b03909116815260200161032a565b6103896106103660046153b7565b6114f0565b6104bb610623366004614bf0565b6118b3565b61039e610636366004614ccf565b6118c4565b6103f87f000000000000000000000000000000000000000000000000000000000000000081565b6103167f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61069c6106973660046153e8565b61199e565b60405161032a919061542b565b6105026106b736600461543d565b611a5a565b6103896106ca366004615498565b611b46565b6105ea6106dd3660046150f8565b611fe7565b6103896106f0366004615641565b612016565b6103896107033660046156bf565b6120c8565b610535610716366004614bf0565b612411565b610389610729366004615282565b612433565b61074161073c366004614ccf565b61258d565b60408051921515835263ffffffff90911660208301520161032a565b61053561076b366004614ccf565b612627565b6104bb61077e366004614c84565b612647565b6103896107913660046150f8565b612670565b6103167f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d81565b6103666107cb366004614ccf565b61279d565b6103167f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b610366610805366004614bf0565b6127d0565b6105ea6108183660046150f8565b6127ef565b61038961082b366004614cb8565b6127fb565b61038961083e366004614cb8565b612868565b5f5f60a65f61085185612979565b815260208101919091526040015f20546001600160a01b031690508015610878578061087d565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101829052906108b3856108ad86612979565b856129dc565b9695505050505050565b6001600160a01b0382165f908152609e602052604081208190816108e085612979565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff169282019290925291508061092e5750806020015163ffffffff164311155b9150505b92915050565b610940612b48565b60665481811681146109655760405163c61dca5d60e01b815260040160405180910390fd5b61096e82612beb565b5050565b6001600160a01b0381165f908152609d602052604081206060919061099690612c28565b90505f816001600160401b038111156109b1576109b1614b00565b6040519080825280602002602001820160405280156109f557816020015b604080518082019091525f80825260208201528152602001906001900390816109cf5790505b5090505f5b82811015610a81576001600160a01b0385165f908152609d60205260409020610a5c90610a279083612c31565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a6e57610a6e615701565b60209081029190910101526001016109fa565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206109329163ffffffff90811690612c3c16565b82610ac481612c53565b610ae15760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610b19576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610b5c57610b5485858584818110610b3957610b39615701565b9050602002810190610b4b9190615715565b620e16e4612cfd565b600101610b1b565b5050505050565b6060610b7184848443612eb1565b949350505050565b6060610b8785858585612eb1565b90505f5b8451811015610c0f57610bb7858281518110610ba957610ba9615701565b6020026020010151876108bd565b610c07575f5b8451811015610c05575f838381518110610bd957610bd9615701565b60200260200101518281518110610bf257610bf2615701565b6020908102919091010152600101610bbd565b505b600101610b8b565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610c40578061087d565b5090919050565b84610c5181612c53565b610c6e5760405163932d94f760e01b815260040160405180910390fd5b838214610c8e576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260a4602052604090205460ff16610cc6576040516348f7dbb960e01b815260040160405180910390fd5b5f5b84811015610d85575f848483818110610ce357610ce3615701565b9050602002016020810190610cf89190614ccf565b90506001600160a01b038116610d21576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601610d4e576040516364be1a3f60e11b815260040160405180910390fd5b610d7c88888885818110610d6457610d64615701565b9050602002810190610d769190615715565b83612cfd565b50600101610cc8565b50505050505050565b5f60606001610d9c8161319e565b84610da681612c53565b610dc35760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280886001600160a01b03168152602001876020016020810190610df19190615733565b63ffffffff1690529050610e08606087018761574c565b9050610e17604088018861574c565b905014610e37576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610e699163ffffffff90811690612c3c16565b610e8657604051631fb1705560e21b815260040160405180910390fd5b610e9c610e966020880188614ccf565b826108bd565b610eb95760405163ebbff49760e01b815260040160405180910390fd5b610ec386826131cc565b945094505050509250929050565b6001600160a01b0382165f908152609d602052604081206060918291610ef690612c28565b90505f816001600160401b03811115610f1157610f11614b00565b604051908082528060200260200182016040528015610f5557816020015b604080518082019091525f8082526020820152815260200190600190039081610f2f5790505b5090505f826001600160401b03811115610f7157610f71614b00565b604051908082528060200260200182016040528015610fba57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610f8f5790505b5090505f5b8381101561103d576001600160a01b0388165f908152609d60205260408120610fec90610a279084612c31565b90508084838151811061100157611001615701565b602002602001018190525061101789828a610884565b83838151811061102957611029615701565b602090810291909101015250600101610fbf565b509093509150505b9250929050565b60605f61087d60995f61105e86612979565b81526020019081526020015f2061390c565b60605f83516001600160401b0381111561108c5761108c614b00565b6040519080825280602002602001820160405280156110b5578160200160208202803683370190505b5090505f5b8451811015610a81576110e68582815181106110d8576110d8615701565b602002602001015185611fe7565b8282815181106110f8576110f8615701565b6001600160401b03909216602092830291909101909101526001016110ba565b5f6111228161319e565b838214611142576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610d85576111a38787878481811061116257611162615701565b90506020020160208101906111779190614ccf565b86868581811061118957611189615701565b905060200201602081019061119e9190615791565b613918565b600101611144565b5f60a55f6111b884612979565b81526020019081526020015f20549050919050565b836111d781612c53565b6111f45760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926112339291612c3c16565b61125057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d85576112b68286868481811061127057611270615701565b90506020020160208101906112859190614ccf565b6112b160405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506127d0565b613a1c565b600101611252565b60605f82516001600160401b038111156112da576112da614b00565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b5090505f5b8351811015610a81576113348585838151811061132757611327615701565b6020026020010151611fe7565b82828151811061134657611346615701565b6001600160401b0390921660209283029190910190910152600101611308565b60606113917f76312e302e300000000000000000000000000000000000000000000000000006613afc565b905090565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614611491576113cf82612c53565b6113ec576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611450573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147491906157b2565b6114915760405163ccea9e6f60e01b815260040160405180910390fd5b61096e8282613b39565b6114a3612b48565b6114ad5f19612beb565b565b5f61087d83609a5f6114c086612979565b81526020019081526020015f20613ce590919063ffffffff16565b5f5f6114e78484613d06565b95945050505050565b60026114fb8161319e565b61151061150b6020840184614ccf565b612c53565b80611529575061152961150b6040840160208501614ccf565b611546576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611555604084018461574c565b9050811015611817575f604051806040016040528085602001602081019061157d9190614ccf565b6001600160a01b03168152602001611598604087018761574c565b858181106115a8576115a8615701565b90506020020160208101906115bd9190615733565b63ffffffff16815250905061160a816020015163ffffffff1660985f8760200160208101906115ec9190614ccf565b6001600160a01b0316815260208101919091526040015f2090612c3c565b61162757604051631fb1705560e21b815260040160405180910390fd5b609e5f6116376020870187614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61166083612979565b815260208101919091526040015f205460ff16611690576040516325131d4f60e01b815260040160405180910390fd5b6116ca61169c82612979565b609c5f6116ac6020890189614ccf565b6001600160a01b0316815260208101919091526040015f2090613e75565b506117026116db6020860186614ccf565b609a5f6116e785612979565b81526020019081526020015f20613e8090919063ffffffff16565b506117106020850185614ccf565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe8260405161174891906157d1565b60405180910390a2604080518082019091525f81526020810161178b7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b63ffffffff169052609e5f6117a36020880188614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6117cc84612979565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611548565b5061182b61044e6040840160208501614ccf565b6001600160a01b031663303ca9566118466020850185614ccf565b6118566040860160208701614ccf565b611863604087018761574c565b6040518563ffffffff1660e01b81526004016118829493929190615848565b5f604051808303815f87803b158015611899575f5ffd5b505af11580156118ab573d5f5f3e3d5ffd5b505050505050565b6060610932609a5f61105e85612979565b6001600160a01b0381165f908152609c60205260408120606091906118e890612c28565b90505f816001600160401b0381111561190357611903614b00565b60405190808252806020026020018201604052801561194757816020015b604080518082019091525f80825260208201528152602001906001900390816119215790505b5090505f5b82811015610a81576001600160a01b0385165f908152609c6020526040902061197990610a279083612c31565b82828151811061198b5761198b615701565b602090810291909101015260010161194c565b60605f84516001600160401b038111156119ba576119ba614b00565b604051908082528060200260200182016040528015611a0357816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816119d85790505b5090505f5b8551811015610c0f57611a35868281518110611a2657611a26615701565b60200260200101518686610884565b828281518110611a4757611a47615701565b6020908102919091010152600101611a08565b60605f83516001600160401b03811115611a7657611a76614b00565b604051908082528060200260200182016040528015611a9f578160200160208202803683370190505b5090505f5b8451811015610c0f576001600160a01b0386165f90815260a1602052604081208651611b1492879291899086908110611adf57611adf615701565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20613e9490919063ffffffff16565b828281518110611b2657611b26615701565b6001600160401b0390921660209283029190910190910152600101611aa4565b5f611b508161319e565b611b5983612c53565b611b76576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f611b828661258d565b9150915081611ba45760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610b5c57838181518110611bc557611bc5615701565b60200260200101516040015151848281518110611be457611be4615701565b6020026020010151602001515114611c0f576040516343714afd60e01b815260040160405180910390fd5b5f848281518110611c2257611c22615701565b602090810291909101810151518082015181516001600160a01b03165f90815260989093526040909220909250611c629163ffffffff90811690612c3c16565b611c7f57604051631fb1705560e21b815260040160405180910390fd5b5f611c8a87836108bd565b90505f5b868481518110611ca057611ca0615701565b60200260200101516020015151811015611fdc575f878581518110611cc757611cc7615701565b6020026020010151602001518281518110611ce457611ce4615701565b60200260200101519050611cfb898261ffff613918565b5f5f611d0a8b6108ad88612979565b91509150806040015163ffffffff165f14611d3857604051630d8fcbe360e41b815260040160405180910390fd5b5f611d4587858489613ea8565b9050611d8a825f01518c8a81518110611d6057611d60615701565b6020026020010151604001518781518110611d7d57611d7d615701565b6020026020010151613ede565b600f0b602083018190525f03611db357604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b1215611ef7578015611e7957611e34611dd488612979565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b611e5e7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b611e699060016157f3565b63ffffffff166040830152611f64565b611e8b83602001518360200151613ef5565b6001600160401b031660208401528a518b9089908110611ead57611ead615701565b6020026020010151604001518581518110611eca57611eca615701565b6020908102919091018101516001600160401b031683525f9083015263ffffffff43166040830152611f64565b5f8260200151600f0b1315611f6457611f1883602001518360200151613ef5565b6001600160401b039081166020850181905284519091161015611f4e57604051636c9be0bf60e01b815260040160405180910390fd5b611f5889436157f3565b63ffffffff1660408301525b611f798c611f7189612979565b868686613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611fae865f01518760200151613ef5565b8660400151604051611fc4959493929190615874565b60405180910390a1505060019092019150611c8e9050565b505050600101611baa565b6001600160a01b038083165f90815260a160209081526040808320938516835292905290812061087d9061414c565b8261202081612c53565b61203d5760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff1661207f576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516120ba9291906158ed565b60405180910390a250505050565b60026120d38161319e565b826120dd81612c53565b6120fa5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218291906157b2565b61219f5760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b6121ae602085018561574c565b905081101561237657604080518082019091525f90806121d16020880188614ccf565b6001600160a01b031681526020018680602001906121ef919061574c565b858181106121ff576121ff615701565b90506020020160208101906122149190615733565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612250929190811690612c3c16565b61226d57604051631fb1705560e21b815260040160405180910390fd5b61227786826108bd565b1561229557604051636c6c6e2760e11b815260040160405180910390fd5b6122be6122a182612979565b6001600160a01b0388165f908152609c602052604090209061415f565b506122ea86609a5f6122cf85612979565b81526020019081526020015f2061416a90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e8260405161232491906157d1565b60405180910390a26001600160a01b0386165f908152609e6020526040812060019161234f84612979565b815260208101919091526040015f20805460ff1916911515919091179055506001016121a1565b5061238761044e6020850185614ccf565b6001600160a01b031663c63fd502856123a36020870187614ccf565b6123b0602088018861574c565b6123bd60408a018a615900565b6040518763ffffffff1660e01b81526004016123de96959493929190615942565b5f604051808303815f87803b1580156123f5575f5ffd5b505af1158015612407573d5f5f3e3d5ffd5b5050505050505050565b5f610932609a5f61242185612979565b81526020019081526020015f20612c28565b8361243d81612c53565b61245a5760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926124999291612c3c16565b6124b657604051631fb1705560e21b815260040160405180910390fd5b5f6124c082612979565b90505f5b84811015612407576125098686838181106124e1576124e1615701565b90506020020160208101906124f69190614ccf565b5f84815260996020526040902090613e80565b612526576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061255a5761255a615701565b905060200201602081019061256f9190614ccf565b60405161257d92919061598e565b60405180910390a16001016124c4565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b90910416606082018190528493919291901580159061260e5750826060015163ffffffff164310155b1561261d575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061093290612c28565b6001600160a01b0382165f908152609f602052604081206060919061092e908261105e86612979565b8161267a81612c53565b6126975760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff91906157b2565b61271c57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361277481610c18565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f6127a8836118c4565b90505f6127b484610972565b90506127c0848361417e565b80610b715750610b71848261417e565b5f620e16e46127de83610843565b6001600160a01b0316141592915050565b5f5f610c0f8484613d06565b6128036141f6565b6066548019821981161461282a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff161580801561288657505f54600160ff909116105b8061289f5750303b15801561289f57505f5460ff166001145b6129075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612928575f805461ff0019166101001790555b61293182612beb565b801561096e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016129c492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610932906159b4565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190612a3c9061414c565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff16918101829052919250431015612ade579092509050612b40565b612aef815f01518260200151613ef5565b6001600160401b0316815260208101515f600f9190910b1215612b2d57612b1e82602001518260200151613ef5565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce91906157b2565b6114ad57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f610932825490565b5f61087d83836142a7565b5f818152600183016020526040812054151561087d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af1158015612cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093291906157b2565b5f6040518060400160405280856001600160a01b03168152602001845f016020810190612d2a9190615733565b63ffffffff168152509050612d74816020015163ffffffff1660985f876001600160a01b03166001600160a01b031681526020019081526020015f2061415f90919063ffffffff16565b612d9157604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c81604051612dc091906157d1565b60405180910390a16001600160a01b038216620e16e414801590612e55578260a65f612deb85612979565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e8284604051612e4c92919061598e565b60405180910390a15b5f5b612e64602086018661574c565b90508110156118ab57612ea983612e7e602088018861574c565b84818110612e8e57612e8e615701565b9050602002016020810190612ea39190614ccf565b84613a1c565b600101612e57565b606083516001600160401b03811115612ecc57612ecc614b00565b604051908082528060200260200182016040528015612eff57816020015b6060815260200190600190039081612eea5790505b5090505f7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd826001600160a01b031663f0e0e67686866040518363ffffffff1660e01b8152600401612f519291906159d7565b5f60405180830381865afa158015612f6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f9291908101906159fb565b90505f5b8551811015613194575f868281518110612fb257612fb2615701565b6020026020010151905085516001600160401b03811115612fd557612fd5614b00565b604051908082528060200260200182016040528015612ffe578160200160208202803683370190505b5084838151811061301157613011615701565b60209081029190910101525f5b865181101561318a575f87828151811061303a5761303a615701565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506130759061414c565b9050806001600160401b03165f0361308e575050613182565b5f61309a858d85610884565b90508863ffffffff16816040015163ffffffff16111580156130c257505f8160200151600f0b125b156130e4576130d8815f01518260200151613ef5565b6001600160401b031681525b80515f906130ff906001600160401b039081169085166142cd565b90506131468189898151811061311757613117615701565b6020026020010151878151811061313057613130615701565b60200260200101516142e190919063ffffffff16565b89888151811061315857613158615701565b6020026020010151868151811061317157613171615701565b602002602001018181525050505050505b60010161301e565b5050600101612f96565b5050949350505050565b606654600160ff83161b908116036131c95760405163840a48d560e01b815260040160405180910390fd5b50565b5f6060816131dd604086018661574c565b90506001600160401b038111156131f6576131f6614b00565b60405190808252806020026020018201604052801561321f578160200160208202803683370190505b50905061322f604086018661574c565b90506001600160401b0381111561324857613248614b00565b604051908082528060200260200182016040528015613271578160200160208202803683370190505b50915060a55f61328086612979565b81526020019081526020015f205f815461329990615b07565b918290555092505f5b6132af604087018761574c565b905081101561389e5780158061334257506132cd604087018761574c565b6132d8600184615b1f565b8181106132e7576132e7615701565b90506020020160208101906132fc9190614ccf565b6001600160a01b0316613312604088018861574c565b8381811061332257613322615701565b90506020020160208101906133379190614ccf565b6001600160a01b0316115b61335f57604051639f1c805360e01b815260040160405180910390fd5b61336c606087018761574c565b8281811061337c5761337c615701565b905060200201355f1080156133bc5750670de0b6b3a76400006133a2606088018861574c565b838181106133b2576133b2615701565b9050602002013511155b6133d957604051631353603160e01b815260040160405180910390fd5b61341a6133e9604088018861574c565b838181106133f9576133f9615701565b905060200201602081019061340e9190614ccf565b60995f6114c089612979565b613437576040516331bc342760e11b815260040160405180910390fd5b5f8061348961344960208a018a614ccf565b61345289612979565b61345f60408c018c61574c565b8781811061346f5761346f615701565b90506020020160208101906134849190614ccf565b6129dc565b805191935091506001600160401b03165f036134a6575050613896565b5f6134e16134b760608b018b61574c565b868181106134c7576134c7615701565b85516001600160401b0316926020909102013590506142f5565b83519091506134fc6001600160401b038084169083166142cd565b86868151811061350e5761350e615701565b60200260200101818152505081835f0181815161352b9190615b32565b6001600160401b0316905250835182908590613548908390615b32565b6001600160401b0316905250602084018051839190613568908390615b32565b6001600160401b031690525060208301515f600f9190910b1215613680575f6135cb61359760608d018d61574c565b888181106135a7576135a7615701565b9050602002013585602001516135bc90615b51565b6001600160801b0316906142f5565b9050806001600160401b0316846020018181516135e89190615b75565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61361c60208d018d614ccf565b8b61362a60408f018f61574c565b8a81811061363a5761363a615701565b905060200201602081019061364f9190614ccf565b613660885f01518960200151613ef5565b8860400151604051613676959493929190615874565b60405180910390a1505b6136d261369060208c018c614ccf565b6136998b612979565b6136a660408e018e61574c565b898181106136b6576136b6615701565b90506020020160208101906136cb9190614ccf565b8787613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61370060208c018c614ccf565b8a61370e60408e018e61574c565b8981811061371e5761371e615701565b90506020020160208101906137339190614ccf565b865160405161374794939291904390615874565b60405180910390a161379861375f60208c018c614ccf565b61376c60408d018d61574c565b8881811061377c5761377c615701565b90506020020160208101906137919190614ccf565b865161430b565b6001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216635ae679a76137d460208d018d614ccf565b8b8b8e80604001906137e6919061574c565b8b8181106137f6576137f6615701565b905060200201602081019061380b9190614ccf565b89516040516001600160e01b031960e088901b16815261383395949392918991600401615ba2565b6020604051808303815f875af115801561384f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615bf5565b87868151811061388557613885615701565b602002602001018181525050505050505b6001016132a2565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56138cd6020870187614ccf565b856138db604089018961574c565b856138e960808c018c615900565b6040516138fc9796959493929190615c0c565b60405180910390a1509250929050565b60605f61087d8361438d565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f8111801561396257508261ffff1682105b15610b5c576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613996906143e6565b90505f5f6139a58884896129dc565b91509150806040015163ffffffff164310156139c357505050610b5c565b6139d08884898585613f14565b6001600160a01b038089165f90815260a360209081526040808320938b168352929052206139fd90614438565b50613a0785615b07565b9450613a1284615ca2565b9350505050613950565b8015613a9e576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014801590613a8157507f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d6001600160a01b0316826001600160a01b031614155b613a9e57604051632711b74d60e11b815260040160405180910390fd5b613aae8260995f6122cf87612979565b613acb5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b838360405161279092919061598e565b60605f613b08836144b5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613bb55750806060015163ffffffff164310155b15613bcf57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613c057f0000000000000000000000000000000000000000000000000000000000000000436157f3565b613c109060016157f3565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db9101612790565b6001600160a01b0381165f908152600183016020526040812054151561087d565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b81811015613e31576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613d9990836144dc565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff16918101829052919250431015613e14575050613e31565b613e22868260200151613ef5565b95505050806001019050613d61565b506001600160a01b038086165f90815260a1602090815260408083209388168352929052208390613e619061414c565b613e6b9190615b32565b9150509250929050565b5f61087d838361454b565b5f61087d836001600160a01b03841661454b565b5f61087d8383670de0b6b3a764000061462e565b5f613eb98460995f6114c089612979565b8015613ec25750815b80156114e757505090516001600160401b031615159392505050565b5f61087d6001600160401b03808516908416615cb7565b5f61087d613f0c836001600160401b038616615b75565b600f0b614683565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613fda57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b156140bc576001600160a01b0385165f908152609f602090815260408083208784529091529020614094908461416a565b506001600160a01b0385165f908152609d602052604090206140b6908561415f565b50610b5c565b80516001600160401b03165f03610b5c576001600160a01b0385165f908152609f6020908152604080832087845290915290206140f99084613e80565b506001600160a01b0385165f908152609f60209081526040808320878452909152902061412590612c28565b5f03610b5c576001600160a01b0385165f908152609d602052604090206118ab9085613e75565b5f61093282670de0b6b3a76400006146ee565b5f61087d8383614725565b5f61087d836001600160a01b038416614725565b5f805b82518110156141ed576141ad848483815181106141a0576141a0615701565b60200260200101516108bd565b80156141d657506141d68382815181106141c9576141c9615701565b60200260200101516127d0565b156141e5576001915050610932565b600101614181565b505f9392505050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614252573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615ce4565b6001600160a01b0316336001600160a01b0316146114ad5760405163794821ff60e01b815260040160405180910390fd5b5f825f0182815481106142bc576142bc615701565b905f5260205f200154905092915050565b5f61087d83670de0b6b3a764000084614771565b5f61087d8383670de0b6b3a7640000614771565b5f61087d8383670de0b6b3a76400006001614856565b6001600160a01b038084165f90815260a16020908152604080832093861683529290522061433a9043836148a5565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612790565b6060815f018054806020026020016040519081016040528092919081815260200182805480156143da57602002820191905f5260205f20905b8154815260200190600101908083116143c6575b50505050509050919050565b5f6144008254600f81810b600160801b909204900b131590565b1561441e57604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144528254600f81810b600160801b909204900b131590565b1561447057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561093257604051632cd44ac360e21b815260040160405180910390fd5b5f5f6144fe6144ea846148be565b85546144f99190600f0b615cff565b614927565b8454909150600160801b9004600f90810b9082900b1261453157604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614625575f61456d600183615b1f565b85549091505f9061458090600190615b1f565b90508181146145df575f865f01828154811061459e5761459e615701565b905f5260205f200154905080875f0184815481106145be576145be615701565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615d26565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610932565b5f915050610932565b82545f908161463f86868385614990565b905080156146795761466386614656600184615b1f565b5f91825260209091200190565b54600160201b90046001600160e01b03166108b3565b5091949350505050565b5f6001600160401b038211156146ea5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016128fe565b5090565b81545f90801561471d5761470784614656600184615b1f565b54600160201b90046001600160e01b031661092e565b509092915050565b5f81815260018301602052604081205461476a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610932565b505f610932565b5f80805f19858709858702925082811083820303915050805f036147a85783828161479e5761479e615d3a565b049250505061087d565b8084116147ef5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016128fe565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f614863868686614771565b9050600183600281111561487957614879615d4e565b14801561489557505f848061489057614890615d3a565b868809115b156114e7576108b3600182615d62565b6148b983836001600160401b0384166149e3565b505050565b5f6001600160ff1b038211156146ea5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016128fe565b80600f81900b811461498b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016128fe565b919050565b5f5b81831015610a81575f6149a58484614ae6565b5f8781526020902090915063ffffffff86169082015463ffffffff1611156149cf578092506149dd565b6149da816001615d62565b93505b50614992565b82548015614a99575f6149fb85614656600185615b1f565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509085161015614a4d5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614a975782614a6e86614656600186615b1f565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f614af46002848418615d75565b61087d90848416615d62565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b3657614b36614b00565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6457614b64614b00565b604052919050565b6001600160a01b03811681146131c9575f5ffd5b803563ffffffff8116811461498b575f5ffd5b5f60408284031215614ba3575f5ffd5b604080519081016001600160401b0381118282101715614bc557614bc5614b00565b6040529050808235614bd681614b6c565b8152614be460208401614b80565b60208201525092915050565b5f60408284031215614c00575f5ffd5b61087d8383614b93565b5f5f5f60808486031215614c1c575f5ffd5b8335614c2781614b6c565b9250614c368560208601614b93565b91506060840135614c4681614b6c565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff169082015260608101610932565b5f5f60608385031215614c95575f5ffd5b8235614ca081614b6c565b9150614caf8460208501614b93565b90509250929050565b5f60208284031215614cc8575f5ffd5b5035919050565b5f60208284031215614cdf575f5ffd5b813561087d81614b6c565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614d4357614d2d868351614cea565b6040959095019460209190910190600101614d1a565b5093949350505050565b602081525f61087d6020830184614d08565b5f5f83601f840112614d6f575f5ffd5b5081356001600160401b03811115614d85575f5ffd5b6020830191508360208260051b8501011115611045575f5ffd5b5f5f5f60408486031215614db1575f5ffd5b8335614dbc81614b6c565b925060208401356001600160401b03811115614dd6575f5ffd5b614de286828701614d5f565b9497909650939450505050565b5f6001600160401b03821115614e0757614e07614b00565b5060051b60200190565b5f82601f830112614e20575f5ffd5b8135614e33614e2e82614def565b614b3c565b8082825260208201915060208360051b860101925085831115614e54575f5ffd5b602085015b83811015614e7a578035614e6c81614b6c565b835260209283019201614e59565b5095945050505050565b5f5f5f60808486031215614e96575f5ffd5b614ea08585614b93565b925060408401356001600160401b03811115614eba575f5ffd5b614ec686828701614e11565b92505060608401356001600160401b03811115614ee1575f5ffd5b614eed86828701614e11565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614d43578151865260209586019590910190600101614f09565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f7e57603f19878603018452614f69858351614ef7565b94506020938401939190910190600101614f4d565b50929695505050505050565b5f5f5f5f60a08587031215614f9d575f5ffd5b614fa78686614b93565b935060408501356001600160401b03811115614fc1575f5ffd5b614fcd87828801614e11565b93505060608501356001600160401b03811115614fe8575f5ffd5b614ff487828801614e11565b92505061500360808601614b80565b905092959194509250565b5f5f5f5f5f60608688031215615022575f5ffd5b853561502d81614b6c565b945060208601356001600160401b03811115615047575f5ffd5b61505388828901614d5f565b90955093505060408601356001600160401b03811115615071575f5ffd5b61507d88828901614d5f565b969995985093965092949392505050565b5f5f6040838503121561509f575f5ffd5b82356150aa81614b6c565b915060208301356001600160401b038111156150c4575f5ffd5b830160a081860312156150d5575f5ffd5b809150509250929050565b828152604060208201525f610b716040830184614ef7565b5f5f60408385031215615109575f5ffd5b823561511481614b6c565b915060208301356150d581614b6c565b5f8151808452602084019350602083015f5b82811015614d435761516f86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101615136565b604081525f6151976040830185614d08565b82810360208401526114e78185615124565b5f8151808452602084019350602083015f5b82811015614d435781516001600160a01b03168652602095860195909101906001016151bb565b602081525f61087d60208301846151a9565b5f5f60408385031215615205575f5ffd5b82356001600160401b0381111561521a575f5ffd5b61522685828601614e11565b92505060208301356150d581614b6c565b602080825282518282018190525f918401906040840190835b818110156152775783516001600160401b0316835260209384019390920191600101615250565b509095945050505050565b5f5f5f5f60608587031215615295575f5ffd5b84356152a081614b6c565b93506152ae60208601614b80565b925060408501356001600160401b038111156152c8575f5ffd5b6152d487828801614d5f565b95989497509550505050565b5f5f604083850312156152f1575f5ffd5b82356152fc81614b6c565b915060208301356001600160401b03811115615316575f5ffd5b613e6b85828601614e11565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615368575f5ffd5b823561537381614b6c565b9150614caf60208401614b80565b5f60208284031215615391575f5ffd5b813560ff8116811461087d575f5ffd5b5f606082840312156153b1575f5ffd5b50919050565b5f602082840312156153c7575f5ffd5b81356001600160401b038111156153dc575f5ffd5b61092e848285016153a1565b5f5f5f608084860312156153fa575f5ffd5b83356001600160401b0381111561540f575f5ffd5b61541b86828701614e11565b935050614c368560208601614b93565b602081525f61087d6020830184615124565b5f5f5f6060848603121561544f575f5ffd5b833561545a81614b6c565b925060208401356001600160401b03811115615474575f5ffd5b61548086828701614e11565b92505061548f60408501614b80565b90509250925092565b5f5f604083850312156154a9575f5ffd5b82356154b481614b6c565b915060208301356001600160401b038111156154ce575f5ffd5b8301601f810185136154de575f5ffd5b80356154ec614e2e82614def565b8082825260208201915060208360051b85010192508783111561550d575f5ffd5b602084015b838110156156325780356001600160401b0381111561552f575f5ffd5b85016080818b03601f19011215615544575f5ffd5b61554c614b14565b6155598b60208401614b93565b815260608201356001600160401b03811115615573575f5ffd5b6155828c602083860101614e11565b60208301525060808201356001600160401b038111156155a0575f5ffd5b6020818401019250508a601f8301126155b7575f5ffd5b81356155c5614e2e82614def565b8082825260208201915060208360051b86010192508d8311156155e6575f5ffd5b6020850194505b8285101561561c5784356001600160401b038116811461560b575f5ffd5b8252602094850194909101906155ed565b6040840152505084525060209283019201615512565b50809450505050509250929050565b5f5f5f60408486031215615653575f5ffd5b833561565e81614b6c565b925060208401356001600160401b03811115615678575f5ffd5b8401601f81018613615688575f5ffd5b80356001600160401b0381111561569d575f5ffd5b8660208284010111156156ae575f5ffd5b939660209190910195509293505050565b5f5f604083850312156156d0575f5ffd5b82356156db81614b6c565b915060208301356001600160401b038111156156f5575f5ffd5b613e6b858286016153a1565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112615729575f5ffd5b9190910192915050565b5f60208284031215615743575f5ffd5b61087d82614b80565b5f5f8335601e19843603018112615761575f5ffd5b8301803591506001600160401b0382111561577a575f5ffd5b6020019150600581901b3603821315611045575f5ffd5b5f602082840312156157a1575f5ffd5b813561ffff8116811461087d575f5ffd5b5f602082840312156157c2575f5ffd5b8151801515811461087d575f5ffd5b604081016109328284614cea565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610932576109326157df565b8183526020830192505f815f5b84811015614d435763ffffffff61583283614b80565b168652602095860195919091019060010161581c565b6001600160a01b038581168252841660208201526060604082018190525f906108b3908301848661580f565b6001600160a01b038616815260c081016158916020830187614cea565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610b716020830184866158c5565b5f5f8335601e19843603018112615915575f5ffd5b8301803591506001600160401b0382111561592e575f5ffd5b602001915036819003821315611045575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f9061596e908301868861580f565b82810360608401526159818185876158c5565b9998505050505050505050565b6060810161599c8285614cea565b6001600160a01b039290921660409190910152919050565b805160208083015191908110156153b1575f1960209190910360031b1b16919050565b604081525f6159e960408301856151a9565b82810360208401526114e781856151a9565b5f60208284031215615a0b575f5ffd5b81516001600160401b03811115615a20575f5ffd5b8201601f81018413615a30575f5ffd5b8051615a3e614e2e82614def565b8082825260208201915060208360051b850101925086831115615a5f575f5ffd5b602084015b83811015615afc5780516001600160401b03811115615a81575f5ffd5b8501603f81018913615a91575f5ffd5b6020810151615aa2614e2e82614def565b808282526020820191506020808460051b8601010192508b831115615ac5575f5ffd5b6040840193505b82841015615ae7578351825260209384019390910190615acc565b86525050602093840193919091019050615a64565b509695505050505050565b5f60018201615b1857615b186157df565b5060010190565b81810381811115610932576109326157df565b6001600160401b038281168282160390811115610932576109326157df565b5f81600f0b60016001607f1b03198103615b6d57615b6d6157df565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610932576109326157df565b6001600160a01b038716815260e08101615bbf6020830188614cea565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f60208284031215615c05575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615c2a602084018a614cea565b60c060608401528690528660e083015f5b88811015615c6b578235615c4e81614b6c565b6001600160a01b0316825260209283019290910190600101615c3b565b508381036080850152615c7e8188614ef7565b91505082810360a0840152615c948185876158c5565b9a9950505050505050505050565b5f81615cb057615cb06157df565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610932576109326157df565b5f60208284031215615cf4575f5ffd5b815161087d81614b6c565b8082018281125f831280158216821582161715615d1e57615d1e6157df565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b80820180821115610932576109326157df565b5f82615d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212204822a3705860d0223c89242417e05d3a5345087df963e57606c2b5c3d238326364736f6c634300081c003300", + "10": { + "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", + "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220bf51267d76cff7222c17d610dde7751957cfe3a183e053d0666ff0994eb90d2f64736f6c634300081c0033000000000000000000", + "storage": {} + }, + "13": { + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea2646970667358221220202aa32fed9b1043addbc14e73c73106e521b4a0cbd4090b88a279664688a3ca64736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "8": { + "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", + "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220590055fea5441ad6e827390b16005643886d2dc4ffe2b97b43ed3ab207076ab664736f6c634300081c003300", + "storage": {} + }, + "28": { + "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "37": { + "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "storage": {} + }, + "24": { + "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", + "code": "0x6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c181565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f76312e302e300000000000000000000000000000000000000000000000000006611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd82909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe49c3bbb4c8ae3857e9da2c037ca93049f5f5931a49706e5b29c897d23875e264736f6c634300081c003300", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, + "16": { + "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220d1857c1d79adf09a4456300c200565d4db0d5bcc151c34d3d6a7ed403fb9defd64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9" + } + }, + "21": { + "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c" + } + }, + "31": { + "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0xf028937c64180bb2d245c1eb4b6ebc3d79a092cccfbb2b854f9d7b4da63470b6": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", + "0x000000000000000000000000000000000000000000000000000000000000006c": "0x302e312e3000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000006a": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570" + } + }, + "25": { + "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", + "storage": {} + }, + "32": { + "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" + } + }, + "33": { + "address": "0x998abeb3E57409262aE5b751f60747921B33613E", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778" + } + }, + "23": { + "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", + "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea26469706673582212200294a24180b18f81e47bb4c278ebbaa0cad18043e20afac6f0159b7940a7867a64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008", + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", + "0xd19bcde47e0ffe1c643525c3cff070e266ec404a07f499b41fcbc480ff16fff7": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012" + } + }, "42": { - "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212201363f1045faa90db6b9cd5e104a6adf153d8d9848b22c7129cad8df16e32d4e364736f6c634300081c00330000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "46": { - "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000003d80": "0xe08c389234a2e702c286c3b044c354759d7f5431790d796c8d7c6efbf12d3492", - "0x0000000000000000000000000000000000000000000000000000000000001d79": "0x0000000000000000000000000000000000000000000000000000000069a5b032", - "0x0000000000000000000000000000000000000000000000000000000000003d6d": "0xef459fa5387e2117ab063876f745691af3c1aca2599e74da52d81699bf4116ba", - "0x0000000000000000000000000000000000000000000000000000000000001d4d": "0x0000000000000000000000000000000000000000000000000000000069a5b006", - "0x0000000000000000000000000000000000000000000000000000000000003d62": "0x542d90e52c10d78cd6aa09905a7211027692770fa5c03c5b3e6a92a13f15b23d", - "0x0000000000000000000000000000000000000000000000000000000000001d81": "0x0000000000000000000000000000000000000000000000000000000069a5b03a", - "0x0000000000000000000000000000000000000000000000000000000000003d82": "0x5485b37ca19657266a48b9bf44f25ca49c1450b1fd1f3ddea20a88b817d7a6f0", - "0x0000000000000000000000000000000000000000000000000000000000003d53": "0x842a0c0b90cb8004d892f33a87c72fda9e6c79d3dd645ffa228f9d7537015267", - "0x0000000000000000000000000000000000000000000000000000000000003d6a": "0x98644d0ceaaf09023b2a96ea8c9244b2b0505a26dacc412456806063bbd2e6ac", - "0x0000000000000000000000000000000000000000000000000000000000003d70": "0x4fdc11ac50647ba8616b0c925b0a6b96ab34a6537e10dd0f3cbbcfb5b1152cb7", - "0x0000000000000000000000000000000000000000000000000000000000003d5d": "0x9f85a8ca26fbcdd7bb346f350d8410becbe9dc93ae6106f21125ec46b683f6ad", - "0x0000000000000000000000000000000000000000000000000000000000001d73": "0x0000000000000000000000000000000000000000000000000000000069a5b02c", - "0x0000000000000000000000000000000000000000000000000000000000001d7d": "0x0000000000000000000000000000000000000000000000000000000069a5b036", - "0x0000000000000000000000000000000000000000000000000000000000003d6c": "0xaff9584450008447d28c21cf29d36bf5a4fd5703aec8640529ee118858d915d5", - "0x0000000000000000000000000000000000000000000000000000000000003d63": "0x781ab1428d305f9a93ef97000dc71329acbca321627ce3af0c4dbddbf61b9bb2", - "0x0000000000000000000000000000000000000000000000000000000000001d4e": "0x0000000000000000000000000000000000000000000000000000000069a5b007", - "0x0000000000000000000000000000000000000000000000000000000000003d60": "0x9b7765f2066348b4a38f2e21b516eb25ac3906bb106592966b64bf4f9b36a438", - "0x0000000000000000000000000000000000000000000000000000000000003d72": "0xa1a6dc669d485742cf94b9970773fe5c03320337c646f1f077d4799310c048ac", - "0x0000000000000000000000000000000000000000000000000000000000003d52": "0x4ea028da7bbf90597ba4e3043f734913cc5ba284e35a2cb7644e946b9ee19732", - "0x0000000000000000000000000000000000000000000000000000000000003d7e": "0x10b3b327070028ed3cd7b2333899270ff54b51c1a3cfde1b5e9413d784879f63", - "0x0000000000000000000000000000000000000000000000000000000000001d4b": "0x0000000000000000000000000000000000000000000000000000000069a5b004", - "0x0000000000000000000000000000000000000000000000000000000000001d53": "0x0000000000000000000000000000000000000000000000000000000069a5b00c", - "0x0000000000000000000000000000000000000000000000000000000000001d87": "0x0000000000000000000000000000000000000000000000000000000069a5b040", - "0x0000000000000000000000000000000000000000000000000000000000003d77": "0x14d3d223eae0d1bca8e20a230513bd80516f3d2c989226f2cadcd936ed63a0ab", - "0x0000000000000000000000000000000000000000000000000000000000001d4f": "0x0000000000000000000000000000000000000000000000000000000069a5b008", - "0x0000000000000000000000000000000000000000000000000000000000003d85": "0xc0fe5889b5e806f5be8ae5855ed69127ec24173b4a6fde470058d0d8d475517f", - "0x0000000000000000000000000000000000000000000000000000000000001d7b": "0x0000000000000000000000000000000000000000000000000000000069a5b034", - "0x0000000000000000000000000000000000000000000000000000000000001d52": "0x0000000000000000000000000000000000000000000000000000000069a5b00b", - "0x0000000000000000000000000000000000000000000000000000000000003d56": "0x4cd68159cb7f92f3e1452303e7b7670c948b48d8560349c6fe5fb1e7e4212f55", - "0x0000000000000000000000000000000000000000000000000000000000001d49": "0x0000000000000000000000000000000000000000000000000000000069a5b002", - "0x0000000000000000000000000000000000000000000000000000000000001d50": "0x0000000000000000000000000000000000000000000000000000000069a5b009", - "0x0000000000000000000000000000000000000000000000000000000000001d84": "0x0000000000000000000000000000000000000000000000000000000069a5b03d", - "0x0000000000000000000000000000000000000000000000000000000000003d54": "0x4c7be5d5a735909164ba3510e22d769b56b71db3427e26ff1f6944081d4216a6", - "0x0000000000000000000000000000000000000000000000000000000000001d62": "0x0000000000000000000000000000000000000000000000000000000069a5b01b", - "0x0000000000000000000000000000000000000000000000000000000000001d86": "0x0000000000000000000000000000000000000000000000000000000069a5b03f", - "0x0000000000000000000000000000000000000000000000000000000000003d73": "0x4f11926ac467da2d75bc4f23e650b1df35cba3a4dc0f7f0faf93b9e652b1990d", - "0x0000000000000000000000000000000000000000000000000000000000001d56": "0x0000000000000000000000000000000000000000000000000000000069a5b00f", - "0x0000000000000000000000000000000000000000000000000000000000001d6a": "0x0000000000000000000000000000000000000000000000000000000069a5b023", - "0x0000000000000000000000000000000000000000000000000000000000001d55": "0x0000000000000000000000000000000000000000000000000000000069a5b00e", - "0x0000000000000000000000000000000000000000000000000000000000001d83": "0x0000000000000000000000000000000000000000000000000000000069a5b03c", - "0x0000000000000000000000000000000000000000000000000000000000003d6e": "0xb0606c86627c085e7cc85b6529bb74a6186747eba00172bfd54f718fcffd939f", - "0x0000000000000000000000000000000000000000000000000000000000003d5b": "0xef37ae4a56b94a5179f0ad46b942eea4aad6c84fa6d52bc126402375b8f808fc", - "0x0000000000000000000000000000000000000000000000000000000000003d4b": "0x5ca7dc04a5c2abfc04d1615eef7bfa12c75a5225361c5ef95616b8453ff69b75", - "0x0000000000000000000000000000000000000000000000000000000000001d67": "0x0000000000000000000000000000000000000000000000000000000069a5b020", - "0x0000000000000000000000000000000000000000000000000000000000003d55": "0x33b075b802759a8b4d2b79fa638d3637619f5c4023f90960a9bdc6530cf57ae4", - "0x0000000000000000000000000000000000000000000000000000000000001d82": "0x0000000000000000000000000000000000000000000000000000000069a5b03b", - "0x0000000000000000000000000000000000000000000000000000000000003d5a": "0xa5485f5bf4e09dc7737310edde5b09a0339ab786d9d87f837e47892fadcaa9c2", - "0x0000000000000000000000000000000000000000000000000000000000003d71": "0x4f10110841f9c017438fa39c0b61676141200a16a5a64cf441a053bf7bfcd596", - "0x0000000000000000000000000000000000000000000000000000000000003d74": "0x13e8c8c9d09443f7e44355b3c6a336a0923347141fad6abdaf73881355be9341", - "0x0000000000000000000000000000000000000000000000000000000000003d86": "0x96ae107f8715e7284a846e04626ba99d5daa98f87b81245ec595191d3c75eacc", - "0x0000000000000000000000000000000000000000000000000000000000003d83": "0x18032ab301453025f524eb7c7ae8fcf6b7ac3d34638ba64ea5805820d8249886", - "0x0000000000000000000000000000000000000000000000000000000000001d6f": "0x0000000000000000000000000000000000000000000000000000000069a5b028", - "0x0000000000000000000000000000000000000000000000000000000000001d7c": "0x0000000000000000000000000000000000000000000000000000000069a5b035", - "0x0000000000000000000000000000000000000000000000000000000000003d5e": "0x05061a4b3c70da92fff6a696c1a73dc89ad07d09777fc5bac66b25694a3b568d", - "0x0000000000000000000000000000000000000000000000000000000000003d6b": "0x8f76744bc89437cd0a957fb4065974017d517651c5e422395fbbf818203019f8", - "0x0000000000000000000000000000000000000000000000000000000000003d4f": "0x7717342f2c538a0ea90682afacf4b2b6f3b45b1e8fc8a3dc14108f9e83d1c7ba", - "0x0000000000000000000000000000000000000000000000000000000000001d78": "0x0000000000000000000000000000000000000000000000000000000069a5b031", - "0x0000000000000000000000000000000000000000000000000000000000001d72": "0x0000000000000000000000000000000000000000000000000000000069a5b02b", - "0x0000000000000000000000000000000000000000000000000000000000003d79": "0x64bee1328e251f20d3ff41410b161c986fb07e3207ec4eaa9c2fa2f0464f09b8", - "0x0000000000000000000000000000000000000000000000000000000000001d74": "0x0000000000000000000000000000000000000000000000000000000069a5b02d", - "0x0000000000000000000000000000000000000000000000000000000000003d50": "0x5165d917e9e52c5e82b843563a27e5191ef07ffd4e184f9ab758678dcdd9d059", - "0x0000000000000000000000000000000000000000000000000000000000001d66": "0x0000000000000000000000000000000000000000000000000000000069a5b01f", - "0x0000000000000000000000000000000000000000000000000000000000001d5d": "0x0000000000000000000000000000000000000000000000000000000069a5b016", - "0x0000000000000000000000000000000000000000000000000000000000001d5e": "0x0000000000000000000000000000000000000000000000000000000069a5b017", - "0x0000000000000000000000000000000000000000000000000000000000003d7f": "0xdaa329522a096750aa0dc9813a8c17442100476062d8fd84b94006ae40bee82a", - "0x0000000000000000000000000000000000000000000000000000000000003d51": "0x56937392c66fc6ebe65d4437ef4568d9abe12c420f927d9dc09575bee883f3ae", - "0x0000000000000000000000000000000000000000000000000000000000001d5f": "0x0000000000000000000000000000000000000000000000000000000069a5b018", - "0x0000000000000000000000000000000000000000000000000000000000001d5b": "0x0000000000000000000000000000000000000000000000000000000069a5b014", - "0x0000000000000000000000000000000000000000000000000000000000001d63": "0x0000000000000000000000000000000000000000000000000000000069a5b01c", - "0x0000000000000000000000000000000000000000000000000000000000003d67": "0xd420b65493c686e0979b87934d5332d269dadd038bf4bd2387dd36b3bf0a60cc", - "0x0000000000000000000000000000000000000000000000000000000000001d80": "0x0000000000000000000000000000000000000000000000000000000069a5b039", - "0x0000000000000000000000000000000000000000000000000000000000001d7e": "0x0000000000000000000000000000000000000000000000000000000069a5b037", - "0x0000000000000000000000000000000000000000000000000000000000003d48": "0x2dc8bc8031b7a4c1cfc070b0294a7cded175b5d3f501834118acc8d647e300de", - "0x0000000000000000000000000000000000000000000000000000000000003d4a": "0xf6e8304566cf66b03e86c700261de4c179f4ee5f29e4b7be13db57eaa5e2776a", - "0x0000000000000000000000000000000000000000000000000000000000003d5f": "0xa4a2262c3b98365ca212f35a45617cb674494d747864db18fb705cf0929d440a", - "0x0000000000000000000000000000000000000000000000000000000000001d59": "0x0000000000000000000000000000000000000000000000000000000069a5b012", - "0x0000000000000000000000000000000000000000000000000000000000003d7b": "0x7d7c9af67e8285a5a95b5227c02d24946de4bb4970b749527536d427acd51b58", - "0x0000000000000000000000000000000000000000000000000000000000003d7c": "0xa1cfe491b2cd13740bb8e39e4af66a0b057d3aa9cf8c09302194ee0a00144ca9", - "0x0000000000000000000000000000000000000000000000000000000000003d4e": "0xd26414748d868abab1a4b5bac73188bcf28b030f030040e9604c0a9d10fbf458", - "0x0000000000000000000000000000000000000000000000000000000000003d58": "0xe2fc993a56bf5bb7ba2ebb7c89b20a69b625791cf545d87e5c2431bb661ef2e8", - "0x0000000000000000000000000000000000000000000000000000000000001d58": "0x0000000000000000000000000000000000000000000000000000000069a5b011", - "0x0000000000000000000000000000000000000000000000000000000000001d70": "0x0000000000000000000000000000000000000000000000000000000069a5b029", - "0x0000000000000000000000000000000000000000000000000000000000001d77": "0x0000000000000000000000000000000000000000000000000000000069a5b030", - "0x0000000000000000000000000000000000000000000000000000000000003d7a": "0xff4a0958bba67f27ade8a1bf913a0f8ae645783a8d0e5f9134a196a0dfd74d0e", - "0x0000000000000000000000000000000000000000000000000000000000003d81": "0xcd3d52c4325dabd54e6dc7e65339c01b652a1a40285bff8cec3b3e7b0112cb9f", - "0x0000000000000000000000000000000000000000000000000000000000001d61": "0x0000000000000000000000000000000000000000000000000000000069a5b01a", - "0x0000000000000000000000000000000000000000000000000000000000003d61": "0x4795d202a534a7823923723d21aa1524d56eb62b26d05684387194ab63da4d48", - "0x0000000000000000000000000000000000000000000000000000000000001d75": "0x0000000000000000000000000000000000000000000000000000000069a5b02e", - "0x0000000000000000000000000000000000000000000000000000000000001d7a": "0x0000000000000000000000000000000000000000000000000000000069a5b033", - "0x0000000000000000000000000000000000000000000000000000000000003d68": "0x69c1f7847cbd2942864a6265d2b88ae54d49ad0a86a1ab79fe3e74dd5581cd1f", - "0x0000000000000000000000000000000000000000000000000000000000001d64": "0x0000000000000000000000000000000000000000000000000000000069a5b01d", - "0x0000000000000000000000000000000000000000000000000000000000003d4d": "0xdb8b6d2ea80a26f76189cb532e7a0646162f8059448aab94f64ca721328f7bd1", - "0x0000000000000000000000000000000000000000000000000000000000003d57": "0x721e5f650106ab022de55f86afc8ea88b2a59294745100097878ccc8e667aa68", - "0x0000000000000000000000000000000000000000000000000000000000003d65": "0x827bc4255b0d185a6564493630c51e5dabeaed6dc00d6af9ee2049f432fcd88a", - "0x0000000000000000000000000000000000000000000000000000000000001d5a": "0x0000000000000000000000000000000000000000000000000000000069a5b013", - "0x0000000000000000000000000000000000000000000000000000000000001d51": "0x0000000000000000000000000000000000000000000000000000000069a5b00a", - "0x0000000000000000000000000000000000000000000000000000000000003d5c": "0x7b7bcac6a24aaacefc7b7157c0dcd1b89cb96692863792a1b0603557a766b24c", - "0x0000000000000000000000000000000000000000000000000000000000001d54": "0x0000000000000000000000000000000000000000000000000000000069a5b00d", - "0x0000000000000000000000000000000000000000000000000000000000001d68": "0x0000000000000000000000000000000000000000000000000000000069a5b021", - "0x0000000000000000000000000000000000000000000000000000000000003d64": "0xcb841a0439ed7df652236958b2f2c93ed2078f21a3b6c82e779ad11fd8a784cc", - "0x0000000000000000000000000000000000000000000000000000000000001d69": "0x0000000000000000000000000000000000000000000000000000000069a5b022", - "0x0000000000000000000000000000000000000000000000000000000000003d7d": "0x4f17955facb5aca68948ba5cbfe24906dff71a22161e603694e2112cc68c1711", - "0x0000000000000000000000000000000000000000000000000000000000003d69": "0x42bebb9d774f67a8aed97cdacd0241c6720dca415d1a40fc0042cd254a585637", - "0x0000000000000000000000000000000000000000000000000000000000001d57": "0x0000000000000000000000000000000000000000000000000000000069a5b010", - "0x0000000000000000000000000000000000000000000000000000000000003d76": "0xf4683ac927542604dd5dbd3181a97dfb62a92b49f89b1b6980acfe51bc4e9378", - "0x0000000000000000000000000000000000000000000000000000000000001d71": "0x0000000000000000000000000000000000000000000000000000000069a5b02a", - "0x0000000000000000000000000000000000000000000000000000000000003d78": "0xeba896b41eee7f770c04bec31be43e878a9445ba2c862d56bb1147c2e056fe9b", - "0x0000000000000000000000000000000000000000000000000000000000003d84": "0xda99a59de73543806a93ff330f0a42bc941214520119a41236b632e4ed0820da", - "0x0000000000000000000000000000000000000000000000000000000000003d4c": "0xe893e9b1fb9d528e6092f41cd1ea2165178fbafaaa0717ed312eded9c66c1603", - "0x0000000000000000000000000000000000000000000000000000000000003d49": "0x4a2b9f996b0a4bb7516aae4f329b003c73a71b9ed8738bc9d947446457c4c179", - "0x0000000000000000000000000000000000000000000000000000000000001d4a": "0x0000000000000000000000000000000000000000000000000000000069a5b003", - "0x0000000000000000000000000000000000000000000000000000000000001d5c": "0x0000000000000000000000000000000000000000000000000000000069a5b015", - "0x0000000000000000000000000000000000000000000000000000000000001d4c": "0x0000000000000000000000000000000000000000000000000000000069a5b005", - "0x0000000000000000000000000000000000000000000000000000000000001d6c": "0x0000000000000000000000000000000000000000000000000000000069a5b025", - "0x0000000000000000000000000000000000000000000000000000000000001d65": "0x0000000000000000000000000000000000000000000000000000000069a5b01e", - "0x0000000000000000000000000000000000000000000000000000000000001d6e": "0x0000000000000000000000000000000000000000000000000000000069a5b027", - "0x0000000000000000000000000000000000000000000000000000000000003d75": "0x8e8676a00c929c7de00fded616463e5ba01595c845e8b78a74fa6a65e65f1015", - "0x0000000000000000000000000000000000000000000000000000000000001d7f": "0x0000000000000000000000000000000000000000000000000000000069a5b038", - "0x0000000000000000000000000000000000000000000000000000000000001d85": "0x0000000000000000000000000000000000000000000000000000000069a5b03e", - "0x0000000000000000000000000000000000000000000000000000000000001d6d": "0x0000000000000000000000000000000000000000000000000000000069a5b026", - "0x0000000000000000000000000000000000000000000000000000000000003d59": "0x5b1a1617431232ff7684156967ef4449da6aadef4c1dc66e1c6a0f316423e7a8", - "0x0000000000000000000000000000000000000000000000000000000000003d66": "0x6cd65f8b6cfc9c125d70027ccd5bee4085f37f53d5df33651ff2942060d3625a", - "0x0000000000000000000000000000000000000000000000000000000000001d6b": "0x0000000000000000000000000000000000000000000000000000000069a5b024", - "0x0000000000000000000000000000000000000000000000000000000000001d76": "0x0000000000000000000000000000000000000000000000000000000069a5b02f", - "0x0000000000000000000000000000000000000000000000000000000000001d60": "0x0000000000000000000000000000000000000000000000000000000069a5b019", - "0x0000000000000000000000000000000000000000000000000000000000003d6f": "0x855386e3defa86c3cd19f4f9ae17af8195e78dc2f5cfb820d72b6463aba86671" - } - }, - "17": { - "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", - "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212204cd82bcd16986fe6b441e4b7c389c7f12dd596c825079086d78383b1e3d02f8364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } + "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", + "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc93014608060405260043610610034575f3560e01c8063d3b08db814610038575b5f5ffd5b61004b610046366004610399565b610061565b604051610058919061049c565b60405180910390f35b80518051606091825f5b82518163ffffffff1610156101055781838263ffffffff1681518110610093576100936104d1565b60200260200101516040516020016100c3919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526100e192916020016104fc565b604051602081830303815290604052915080806100fd9061052c565b91505061006b565b50630e02a00760e31b5f80610119866101b9565b8461018b8a602001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6040516020016101a096959493929190610550565b6040516020818303038152906040529350505050919050565b6060603f8263ffffffff16116101f657604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff16116102555761023261021e6403fffffffc600285901b1660016105a9565b600881811b62ffff001691901c60ff161790565b6040516020016101e0919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102c7576102a460028363ffffffff16901b600261028091906105a9565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016101e0919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016101e0565b919050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561034b5761034b610314565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561037a5761037a610314565b604052919050565b803567ffffffffffffffff8116811461030f575f5ffd5b5f602082840312156103a9575f5ffd5b813567ffffffffffffffff8111156103bf575f5ffd5b8201604081850312156103d0575f5ffd5b6103d8610328565b813567ffffffffffffffff8111156103ee575f5ffd5b8201601f810186136103fe575f5ffd5b803567ffffffffffffffff81111561041857610418610314565b8060051b61042860208201610351565b91825260208184018101929081019089841115610443575f5ffd5b6020850194505b8385101561047c57843592506001600160a01b038316831461046a575f5ffd5b8282526020948501949091019061044a565b85525061048f9250505060208301610382565b6020820152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f61051061050a83866104e5565b846104e5565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff810361054757610547610518565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f61058c61058660068401876104e5565b856104e5565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908111156105c5576105c5610518565b9291505056fea264697066735822122025360fa68d61e06c0f66cb21e1db2778b987cc6ccef457fe1dbef98965e5dabb64736f6c634300081c0033000000000000000000000000", + "storage": {} } } diff --git a/contracts/script/deploy/Config.sol b/contracts/script/deploy/Config.sol index 4d076407..e3a84b99 100644 --- a/contracts/script/deploy/Config.sol +++ b/contracts/script/deploy/Config.sol @@ -18,7 +18,7 @@ contract Config { // AVS parameters struct AVSConfig { address avsOwner; - address rewardsInitiator; + address snowbridgeInitiator; address[] validatorsStrategies; address validatorSetSubmitter; } diff --git a/contracts/script/deploy/DeployBase.s.sol b/contracts/script/deploy/DeployBase.s.sol index 27f0d6fd..a43a06e8 100644 --- a/contracts/script/deploy/DeployBase.s.sol +++ b/contracts/script/deploy/DeployBase.s.sol @@ -44,7 +44,7 @@ import {ValidatorsUtils} from "../../script/utils/ValidatorsUtils.sol"; // Shared structs struct ServiceManagerInitParams { address avsOwner; - address rewardsInitiator; + address snowbridgeInitiator; IRewardsCoordinatorTypes.StrategyAndMultiplier[] validatorsStrategiesAndMultipliers; address gateway; address validatorSetSubmitter; @@ -271,7 +271,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { // Create service manager initialisation parameters struct ServiceManagerInitParams memory initParams = ServiceManagerInitParams({ avsOwner: avsConfig.avsOwner, - rewardsInitiator: agentAddress, + snowbridgeInitiator: agentAddress, validatorsStrategiesAndMultipliers: strategiesAndMultipliers, gateway: address(gateway), validatorSetSubmitter: avsConfig.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployLive.s.sol b/contracts/script/deploy/DeployLive.s.sol index 6530a6c9..0a4aa93f 100644 --- a/contracts/script/deploy/DeployLive.s.sol +++ b/contracts/script/deploy/DeployLive.s.sol @@ -124,7 +124,7 @@ contract DeployLive is DeployBase { bytes memory initData = abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, params.avsOwner, - params.rewardsInitiator, + params.snowbridgeInitiator, params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployLocal.s.sol b/contracts/script/deploy/DeployLocal.s.sol index 4c41cb0e..12e8dbf0 100644 --- a/contracts/script/deploy/DeployLocal.s.sol +++ b/contracts/script/deploy/DeployLocal.s.sol @@ -205,7 +205,7 @@ contract DeployLocal is DeployBase { bytes memory initData = abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, params.avsOwner, - params.rewardsInitiator, + params.snowbridgeInitiator, params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployParams.s.sol b/contracts/script/deploy/DeployParams.s.sol index c77f99b9..725ab0a2 100644 --- a/contracts/script/deploy/DeployParams.s.sol +++ b/contracts/script/deploy/DeployParams.s.sol @@ -74,7 +74,7 @@ contract DeployParams is Script, Config { } else { config.avsOwner = vm.parseJsonAddress(configJson, ".avs.avsOwner"); } - config.rewardsInitiator = vm.parseJsonAddress(configJson, ".avs.rewardsInitiator"); + config.snowbridgeInitiator = vm.parseJsonAddress(configJson, ".avs.snowbridgeInitiator"); config.validatorsStrategies = vm.parseJsonAddressArray(configJson, ".avs.validatorsStrategies"); diff --git a/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol b/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol index ffaa0018..4c1ec0ab 100644 --- a/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol +++ b/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol @@ -12,7 +12,7 @@ contract DataHavenServiceManagerBadLayout is OwnableUpgradeable { uint256 public layoutBreaker; // Original variables (shifted by one slot) - address public rewardsInitiator; + address public snowbridgeInitiator; mapping(address => bool) public validatorsAllowlist; IGatewayV2 private _snowbridgeGateway; mapping(address => address) public validatorEthAddressToSolochainAddress; diff --git a/contracts/src/DataHavenServiceManager.sol b/contracts/src/DataHavenServiceManager.sol index 72389747..0ea74f5e 100644 --- a/contracts/src/DataHavenServiceManager.sol +++ b/contracts/src/DataHavenServiceManager.sol @@ -58,7 +58,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // ============ State Variables ============ /// @notice The address authorized to initiate rewards submissions - address public rewardsInitiator; + address public snowbridgeInitiator; /// @inheritdoc IDataHavenServiceManager mapping(address => bool) public validatorsAllowlist; @@ -90,8 +90,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // ============ Modifiers ============ /// @notice Restricts function to the rewards initiator - modifier onlyRewardsInitiator() { - _checkRewardsInitiator(); + modifier onlySnowbridgeInitiator() { + _checkSnowbridgeInitiator(); _; } @@ -129,8 +129,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave require(msg.sender == proxyAdmin, NotProxyAdmin()); } - function _checkRewardsInitiator() internal view { - require(msg.sender == rewardsInitiator, OnlyRewardsInitiator()); + function _checkSnowbridgeInitiator() internal view { + require(msg.sender == snowbridgeInitiator, OnlyRewardsInitiator()); } function _checkValidator() internal view { @@ -166,21 +166,21 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave /// @inheritdoc IDataHavenServiceManager function initialize( address initialOwner, - address _rewardsInitiator, + address _snowbridgeInitiator, IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter, string memory initialVersion ) public virtual initializer { require(initialOwner != address(0), ZeroAddress()); - require(_rewardsInitiator != address(0), ZeroAddress()); + require(_snowbridgeInitiator != address(0), ZeroAddress()); require(_snowbridgeGatewayAddress != address(0), ZeroAddress()); require(bytes(initialVersion).length > 0, EmptyVersion()); __Ownable_init(); _transferOwnership(initialOwner); - rewardsInitiator = _rewardsInitiator; - emit RewardsInitiatorSet(address(0), _rewardsInitiator); + snowbridgeInitiator = _snowbridgeInitiator; + emit SnowbridgeInitiatorSet(address(0), _snowbridgeInitiator); // Set version from parameter (allows flexibility per deployment environment) _version = initialVersion; @@ -522,7 +522,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave /// @inheritdoc IDataHavenServiceManager function submitRewards( IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission calldata submission - ) external override onlyRewardsInitiator { + ) external override onlySnowbridgeInitiator { IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory translatedSubmission = submission; @@ -567,13 +567,13 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave } /// @inheritdoc IDataHavenServiceManager - function setRewardsInitiator( - address newRewardsInitiator + function setSnowbridgeInitiator( + address newSnowbridgeInitiator ) external override onlyOwner { - require(newRewardsInitiator != address(0), ZeroAddress()); - address oldInitiator = rewardsInitiator; - rewardsInitiator = newRewardsInitiator; - emit RewardsInitiatorSet(oldInitiator, newRewardsInitiator); + require(newSnowbridgeInitiator != address(0), ZeroAddress()); + address oldInitiator = snowbridgeInitiator; + snowbridgeInitiator = newSnowbridgeInitiator; + emit SnowbridgeInitiatorSet(oldInitiator, newSnowbridgeInitiator); } // ============ AVS Management Functions ============ @@ -605,7 +605,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave */ function slashValidatorsOperator( SlashingRequest[] calldata slashings - ) external onlyRewardsInitiator { + ) external onlySnowbridgeInitiator { for (uint256 i = 0; i < slashings.length; i++) { address ethOperator = validatorSolochainAddressToEthAddress[slashings[i].operator]; if (ethOperator == address(0)) continue; diff --git a/contracts/src/interfaces/IDataHavenServiceManager.sol b/contracts/src/interfaces/IDataHavenServiceManager.sol index b6c6348c..dc4af9bb 100644 --- a/contracts/src/interfaces/IDataHavenServiceManager.sol +++ b/contracts/src/interfaces/IDataHavenServiceManager.sol @@ -91,10 +91,10 @@ interface IDataHavenServiceManagerEvents { /// @param operatorCount The number of operators that received rewards event RewardsSubmitted(uint256 totalAmount, uint256 operatorCount); - /// @notice Emitted when the rewards initiator address is updated - /// @param oldInitiator The previous rewards initiator address - /// @param newInitiator The new rewards initiator address - event RewardsInitiatorSet(address indexed oldInitiator, address indexed newInitiator); + /// @notice Emitted when the snowbridge initiator address is updated + /// @param oldInitiator The previous snowbridge initiator address + /// @param newInitiator The new snowbridge initiator address + event SnowbridgeInitiatorSet(address indexed oldInitiator, address indexed newInitiator); /// @notice Emitted when a validator updates their solochain address /// @param validator Address of the validator @@ -189,7 +189,7 @@ interface IDataHavenServiceManager is /** * @notice Initializes the DataHaven Service Manager * @param initialOwner Address of the initial owner (AVS owner) - * @param rewardsInitiator Address authorized to initiate rewards + * @param snowbridgeInitiator Address authorized to initiate rewards * @param validatorsStrategiesAndMultipliers Array of strategy-multiplier pairs for the validators * operator set. Each multiplier must be non-zero. * @param _snowbridgeGatewayAddress Address of the Snowbridge Gateway @@ -198,7 +198,7 @@ interface IDataHavenServiceManager is */ function initialize( address initialOwner, - address rewardsInitiator, + address snowbridgeInitiator, IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter, @@ -343,11 +343,11 @@ interface IDataHavenServiceManager is ) external; /** - * @notice Set the rewards initiator address authorized to submit rewards - * @param initiator The address of the rewards initiator (Snowbridge Agent) + * @notice Set the snowbridge initiator address authorized to submit rewards + * @param initiator The address of the snowbridge initiator (Snowbridge Agent) * @dev Only callable by the owner */ - function setRewardsInitiator( + function setSnowbridgeInitiator( address initiator ) external; diff --git a/contracts/storage-snapshots/DataHavenServiceManager.storage.json b/contracts/storage-snapshots/DataHavenServiceManager.storage.json index 44ac834a..27033dae 100644 --- a/contracts/storage-snapshots/DataHavenServiceManager.storage.json +++ b/contracts/storage-snapshots/DataHavenServiceManager.storage.json @@ -43,7 +43,7 @@ { "astId": 23887, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", - "label": "rewardsInitiator", + "label": "snowbridgeInitiator", "offset": 0, "slot": "101", "type": "t_address" diff --git a/contracts/test/OperatorAddressMappings.t.sol b/contracts/test/OperatorAddressMappings.t.sol index 6600c3f5..f2168733 100644 --- a/contracts/test/OperatorAddressMappings.t.sol +++ b/contracts/test/OperatorAddressMappings.t.sol @@ -20,7 +20,7 @@ contract OperatorAddressMappingsTest is AVSDeployer { // Configure the rewards initiator (not strictly needed for these tests, // but keeps setup consistent with other suites). vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); } function _registerOperator( diff --git a/contracts/test/RewardsSubmitter.t.sol b/contracts/test/RewardsSubmitter.t.sol index bd78d649..4a95dc32 100644 --- a/contracts/test/RewardsSubmitter.t.sol +++ b/contracts/test/RewardsSubmitter.t.sol @@ -40,7 +40,7 @@ contract RewardsSubmitterTest is AVSDeployer { // Configure the rewards initiator vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); // Fund the service manager with reward tokens IERC20(address(rewardToken)).safeTransfer(address(serviceManager), 100000e18); @@ -100,21 +100,21 @@ contract RewardsSubmitterTest is AVSDeployer { // ============ Configuration Tests ============ - function test_setRewardsInitiator() public { + function test_setSnowbridgeInitiator() public { address newInitiator = address(0x123); vm.prank(avsOwner); vm.expectEmit(true, true, false, false); - emit IDataHavenServiceManagerEvents.RewardsInitiatorSet(snowbridgeAgent, newInitiator); - serviceManager.setRewardsInitiator(newInitiator); + emit IDataHavenServiceManagerEvents.SnowbridgeInitiatorSet(snowbridgeAgent, newInitiator); + serviceManager.setSnowbridgeInitiator(newInitiator); - assertEq(serviceManager.rewardsInitiator(), newInitiator); + assertEq(serviceManager.snowbridgeInitiator(), newInitiator); } - function test_setRewardsInitiator_revertsIfNotOwner() public { + function test_setSnowbridgeInitiator_revertsIfNotOwner() public { vm.prank(operator1); vm.expectRevert(bytes("Ownable: caller is not the owner")); - serviceManager.setRewardsInitiator(address(0x123)); + serviceManager.setSnowbridgeInitiator(address(0x123)); } // ============ Access Control Tests ============ diff --git a/contracts/test/Slashing.t.sol b/contracts/test/Slashing.t.sol index 7c73f1dd..ebb88978 100644 --- a/contracts/test/Slashing.t.sol +++ b/contracts/test/Slashing.t.sol @@ -34,7 +34,7 @@ contract SlashingTest is AVSDeployer { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); vm.prank(operator); delegationManager.registerAsOperator(address(0), 0, ""); @@ -93,7 +93,7 @@ contract SlashingTest is AVSDeployer { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); vm.prank(operator); delegationManager.registerAsOperator(address(0), 0, ""); @@ -147,7 +147,7 @@ contract SlashingTest is AVSDeployer { function test_fulfilSlashingRequest_skipsUnknownSolochainAddress() public { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); address unknownSolochainOperator = address(0xDEAD); DataHavenServiceManager.SlashingRequest[] memory slashings = diff --git a/contracts/test/ValidatorSetSubmitter.t.sol b/contracts/test/ValidatorSetSubmitter.t.sol index 081b9501..218badd6 100644 --- a/contracts/test/ValidatorSetSubmitter.t.sol +++ b/contracts/test/ValidatorSetSubmitter.t.sol @@ -194,7 +194,7 @@ contract ValidatorSetSubmitterTest is SnowbridgeAndAVSDeployer { abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, avsOwner, - rewardsInitiator, + snowbridgeInitiator, emptyStrategies, address(snowbridgeGatewayMock), address(0), diff --git a/contracts/test/storage/StorageLayout.t.sol b/contracts/test/storage/StorageLayout.t.sol index 69a3cd92..c0b4f540 100644 --- a/contracts/test/storage/StorageLayout.t.sol +++ b/contracts/test/storage/StorageLayout.t.sol @@ -20,18 +20,18 @@ contract StorageLayoutTest is AVSDeployer { function test_upgradePreservesState() public { // 1. Populate state address testValidator = address(0x1234); - address newRewardsInitiator = address(0x9999); + address newSnowbridgeInitiator = address(0x9999); address testSubmitter = address(0x5678); vm.startPrank(avsOwner); serviceManager.addValidatorToAllowlist(testValidator); - serviceManager.setRewardsInitiator(newRewardsInitiator); + serviceManager.setSnowbridgeInitiator(newSnowbridgeInitiator); serviceManager.setValidatorSetSubmitter(testSubmitter); vm.stopPrank(); // 2. Record state before upgrade bool allowlistBefore = serviceManager.validatorsAllowlist(testValidator); - address rewardsInitiatorBefore = serviceManager.rewardsInitiator(); + address snowbridgeInitiatorBefore = serviceManager.snowbridgeInitiator(); address ownerBefore = serviceManager.owner(); address gatewayBefore = serviceManager.snowbridgeGateway(); address submitterBefore = serviceManager.validatorSetSubmitter(); @@ -51,9 +51,9 @@ contract StorageLayoutTest is AVSDeployer { "validatorsAllowlist should be preserved" ); assertEq( - serviceManager.rewardsInitiator(), - rewardsInitiatorBefore, - "rewardsInitiator should be preserved" + serviceManager.snowbridgeInitiator(), + snowbridgeInitiatorBefore, + "snowbridgeInitiator should be preserved" ); assertEq(serviceManager.owner(), ownerBefore, "owner should be preserved"); assertEq( diff --git a/contracts/test/utils/AVSDeployer.sol b/contracts/test/utils/AVSDeployer.sol index 007c236e..1678342d 100644 --- a/contracts/test/utils/AVSDeployer.sol +++ b/contracts/test/utils/AVSDeployer.sol @@ -67,7 +67,8 @@ contract AVSDeployer is Test { address public proxyAdminOwner = address(uint160(uint256(keccak256("proxyAdminOwner")))); address public regularDeployer = address(uint160(uint256(keccak256("regularDeployer")))); address public avsOwner = address(uint160(uint256(keccak256("avsOwner")))); - address public rewardsInitiator = address(uint160(uint256(keccak256("rewardsInitiator")))); + address public snowbridgeInitiator = + address(uint160(uint256(keccak256("snowbridgeInitiator")))); address public pauser = address(uint160(uint256(keccak256("pauser")))); address public unpauser = address(uint160(uint256(keccak256("unpauser")))); address public rewardsUpdater = address(uint160(uint256(keccak256("rewardsUpdater")))); @@ -246,7 +247,7 @@ contract AVSDeployer is Test { abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, avsOwner, - rewardsInitiator, + snowbridgeInitiator, defaultStrategyAndMultipliers, address(snowbridgeGatewayMock), avsOwner, diff --git a/test/cli/handlers/contracts/status.ts b/test/cli/handlers/contracts/status.ts index 3c61e04b..33fde8d2 100644 --- a/test/cli/handlers/contracts/status.ts +++ b/test/cli/handlers/contracts/status.ts @@ -24,7 +24,7 @@ export const showDeploymentPlanAndStatus = async (chain: string, environment?: s "Block Explorer": deploymentParams.blockExplorer, "Genesis Time": new Date(deploymentParams.genesisTime * 1000).toISOString(), "AVS Owner": `${config.avs.avsOwner.slice(0, 10)}...${config.avs.avsOwner.slice(-8)}`, - "Rewards Initiator": `${config.avs.rewardsInitiator.slice(0, 10)}...${config.avs.rewardsInitiator.slice(-8)}` + "Rewards Initiator": `${config.avs.snowbridgeInitiator.slice(0, 10)}...${config.avs.snowbridgeInitiator.slice(-8)}` }; if (environment) { diff --git a/test/contract-bindings/generated.ts b/test/contract-bindings/generated.ts index 120968e0..7def8651 100644 --- a/test/contract-bindings/generated.ts +++ b/test/contract-bindings/generated.ts @@ -2149,7 +2149,11 @@ export const dataHavenServiceManagerAbi = [ type: 'function', inputs: [ { name: 'initialOwner', internalType: 'address', type: 'address' }, - { name: '_rewardsInitiator', internalType: 'address', type: 'address' }, + { + name: '_snowbridgeInitiator', + internalType: 'address', + type: 'address', + }, { name: 'validatorsStrategiesAndMultipliers', internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', @@ -2225,13 +2229,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, - { - type: 'function', - inputs: [], - name: 'rewardsInitiator', - outputs: [{ name: '', internalType: 'address', type: 'address' }], - stateMutability: 'view', - }, { type: 'function', inputs: [ @@ -2243,15 +2240,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'payable', }, - { - type: 'function', - inputs: [ - { name: 'newRewardsInitiator', internalType: 'address', type: 'address' }, - ], - name: 'setRewardsInitiator', - outputs: [], - stateMutability: 'nonpayable', - }, { type: 'function', inputs: [ @@ -2265,6 +2253,19 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, + { + type: 'function', + inputs: [ + { + name: 'newSnowbridgeInitiator', + internalType: 'address', + type: 'address', + }, + ], + name: 'setSnowbridgeInitiator', + outputs: [], + stateMutability: 'nonpayable', + }, { type: 'function', inputs: [ @@ -2325,6 +2326,13 @@ export const dataHavenServiceManagerAbi = [ outputs: [{ name: '', internalType: 'address', type: 'address' }], stateMutability: 'view', }, + { + type: 'function', + inputs: [], + name: 'snowbridgeInitiator', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, { type: 'function', inputs: [{ name: '', internalType: 'contract IStrategy', type: 'address' }], @@ -2514,25 +2522,6 @@ export const dataHavenServiceManagerAbi = [ ], name: 'OwnershipTransferred', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'oldInitiator', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'newInitiator', - internalType: 'address', - type: 'address', - indexed: true, - }, - ], - name: 'RewardsInitiatorSet', - }, { type: 'event', anonymous: false, @@ -2566,6 +2555,25 @@ export const dataHavenServiceManagerAbi = [ ], name: 'SnowbridgeGatewaySet', }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'oldInitiator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newInitiator', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'SnowbridgeInitiatorSet', + }, { type: 'event', anonymous: false, @@ -11021,15 +11029,6 @@ export const readDataHavenServiceManagerOwner = functionName: 'owner', }) -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"rewardsInitiator"` - */ -export const readDataHavenServiceManagerRewardsInitiator = - /*#__PURE__*/ createReadContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'rewardsInitiator', - }) - /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"snowbridgeGateway"` */ @@ -11039,6 +11038,15 @@ export const readDataHavenServiceManagerSnowbridgeGateway = functionName: 'snowbridgeGateway', }) +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"snowbridgeInitiator"` + */ +export const readDataHavenServiceManagerSnowbridgeInitiator = + /*#__PURE__*/ createReadContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'snowbridgeInitiator', + }) + /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"strategiesAndMultipliers"` */ @@ -11199,15 +11207,6 @@ export const writeDataHavenServiceManagerSendNewValidatorSetForEra = functionName: 'sendNewValidatorSetForEra', }) -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` - */ -export const writeDataHavenServiceManagerSetRewardsInitiator = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsInitiator', - }) - /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11217,6 +11216,15 @@ export const writeDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeInitiator"` + */ +export const writeDataHavenServiceManagerSetSnowbridgeInitiator = + /*#__PURE__*/ createWriteContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setSnowbridgeInitiator', + }) + /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` */ @@ -11385,15 +11393,6 @@ export const simulateDataHavenServiceManagerSendNewValidatorSetForEra = functionName: 'sendNewValidatorSetForEra', }) -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` - */ -export const simulateDataHavenServiceManagerSetRewardsInitiator = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsInitiator', - }) - /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11403,6 +11402,15 @@ export const simulateDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeInitiator"` + */ +export const simulateDataHavenServiceManagerSetSnowbridgeInitiator = + /*#__PURE__*/ createSimulateContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setSnowbridgeInitiator', + }) + /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` */ @@ -11517,15 +11525,6 @@ export const watchDataHavenServiceManagerOwnershipTransferredEvent = eventName: 'OwnershipTransferred', }) -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsInitiatorSet"` - */ -export const watchDataHavenServiceManagerRewardsInitiatorSetEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dataHavenServiceManagerAbi, - eventName: 'RewardsInitiatorSet', - }) - /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsSubmitted"` */ @@ -11553,6 +11552,15 @@ export const watchDataHavenServiceManagerSnowbridgeGatewaySetEvent = eventName: 'SnowbridgeGatewaySet', }) +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"SnowbridgeInitiatorSet"` + */ +export const watchDataHavenServiceManagerSnowbridgeInitiatorSetEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: dataHavenServiceManagerAbi, + eventName: 'SnowbridgeInitiatorSet', + }) + /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"SolochainAddressUpdated"` */ diff --git a/test/e2e/suites/rewards-message.test.ts b/test/e2e/suites/rewards-message.test.ts index d76fa97c..25c316f4 100644 --- a/test/e2e/suites/rewards-message.test.ts +++ b/test/e2e/suites/rewards-message.test.ts @@ -123,16 +123,16 @@ describe("Rewards Message Flow", () => { expect(serviceManager.address).toBeDefined(); expect(gateway.address).toBeDefined(); - const rewardsInitiator = (await publicClient.readContract({ + const snowbridgeInitiator = (await publicClient.readContract({ address: serviceManager.address, abi: serviceManager.abi, - functionName: "rewardsInitiator", + functionName: "snowbridgeInitiator", args: [] })) as Address; - // ServiceManager must have a rewardsInitiator configured for EigenLayer rewards submission - expect(rewardsInitiator).toBeDefined(); - logger.debug(`ServiceManager rewardsInitiator: ${rewardsInitiator}`); + // ServiceManager must have a snowbridgeInitiator configured for EigenLayer rewards submission + expect(snowbridgeInitiator).toBeDefined(); + logger.debug(`ServiceManager snowbridgeInitiator: ${snowbridgeInitiator}`); }); it("should wait for era end and emit RewardsMessageSent", async () => { diff --git a/test/e2e/suites/slash.test.ts b/test/e2e/suites/slash.test.ts index 7547a84c..3419b007 100644 --- a/test/e2e/suites/slash.test.ts +++ b/test/e2e/suites/slash.test.ts @@ -91,16 +91,16 @@ describe("Should slash an operator", () => { expect(serviceManager.address).toBeDefined(); expect(gateway.address).toBeDefined(); - const rewardsInitiator = (await publicClient.readContract({ + const snowbridgeInitiator = (await publicClient.readContract({ address: serviceManager.address, abi: serviceManager.abi, - functionName: "rewardsInitiator", + functionName: "snowbridgeInitiator", args: [] })) as Address; - // ServiceManager must have a rewardsInitiator configured for EigenLayer rewards submission - expect(rewardsInitiator).toBeDefined(); - logger.info(`ServiceManager rewardsInitiator: ${rewardsInitiator}`); + // ServiceManager must have a snowbridgeInitiator configured for EigenLayer rewards submission + expect(snowbridgeInitiator).toBeDefined(); + logger.info(`ServiceManager snowbridgeInitiator: ${snowbridgeInitiator}`); }); it("Activate slashing", async () => { From b8cc9eee4b7a65378bd0f59b76064c6c57b398c4 Mon Sep 17 00:00:00 2001 From: undercover-cactus Date: Thu, 26 Mar 2026 10:04:57 +0100 Subject: [PATCH 2/3] feat: upgrade to polkadot SDK 2503 (#444) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Polkadot upgrade 2503 In this PR, we upgrade form Polkadot SDK 2412 to Polkadot SDK 2503. In order to upgrade the SDK we need to upgrade some dependencies : StorageHub and frontier simultaneously. ## What changes ### Trivial changes * https://github.com/paritytech/polkadot-sdk/pull/7634 -> The new trait is required in all the pallets using scale encoding. * https://github.com/paritytech/polkadot-sdk/pull/7043 -> Remove deprecated `sp-std` and replace with `alloc` or `core`. * https://github.com/paritytech/polkadot-sdk/pull/6140 -> Accurate weight reclaim with frame_system::WeightReclaim ### Breaking changes * https://github.com/paritytech/polkadot-sdk/pull/2072 -> There is a change in `pallet-referenda`. Now, the tracks are retrieved as a list of `Track`s. Also, the names of the tracks might have some trailing null values (`\0`). This means display representation of the tracks' names must be sanitized. * https://github.com/paritytech/polkadot-sdk/pull/5723 -> adds the ability for these pallets to specify their source of the block number. This is useful when these pallets are migrated from the relay chain to a parachain and vice versa. (Not entirely sure it is breaking as it is being marked as backward compatible). * https://github.com/paritytech/polkadot-sdk/pull/6338 -> Update Referenda to Support Block Number Provider ### Notable changes * https://github.com/paritytech/polkadot-sdk/pull/5703 -> Not changes required in the codebase but impact fastSync mode. Should improve testing. * https://github.com/paritytech/polkadot-sdk/pull/5842 -> Removes `libp2p` types in authority-discovery, and replace them with network backend agnostic types from `sc-network-types`. The `sc-network` interface is therefore updated accordingly. ## What changes in Frontier * https://github.com/polkadot-evm/frontier/pull/1693 -> Add support for EIP 7702 which has been enable with Pectra. This EIP add a new field `AuthorizationList` in Ethereum transaction. Changes example : ```rust #[test] fn validate_transaction_fails_on_filtered_call() { ... pallet_evm::Call::::call { source: H160::default(), target: H160::default(), input: Vec::new(), value: sp_core::U256::zero(), gas_limit: 21000, max_fee_per_gas: sp_core::U256::zero(), max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), authorization_list: Vec::new(), } .into(), ``` ## ⚠️ Breaking Changes ⚠️ * Upgrade to Stirage hub v0.5.1 * Support for Ethereum latest upgrade (txs now have the `authoriation_list` for support EIP 7702) --------- Co-authored-by: Steve Degosserie <723552+stiiifff@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 --- operator/Cargo.lock | 3486 ++++++++--------- operator/Cargo.toml | 354 +- .../benchmarking/frame-weight-template.hbs | 2 +- operator/node/src/benchmarking.rs | 2 + operator/node/src/command.rs | 132 +- operator/node/src/rpc.rs | 20 +- operator/node/src/service.rs | 6 +- .../datahaven-native-transfer/Cargo.toml | 2 - .../datahaven-native-transfer/src/lib.rs | 3 +- .../datahaven-native-transfer/src/mock.rs | 9 +- operator/pallets/ethereum-client/Cargo.toml | 2 - .../ethereum-client/fixtures/Cargo.toml | 2 - .../ethereum-client/fixtures/src/lib.rs | 3 +- .../ethereum-client/src/benchmarking/util.rs | 3 +- operator/pallets/ethereum-client/src/impls.rs | 1 + operator/pallets/ethereum-client/src/lib.rs | 4 +- operator/pallets/ethereum-client/src/mock.rs | 6 +- .../ethereum-client/src/mock_electra.rs | 6 +- operator/pallets/ethereum-client/src/tests.rs | 4 + .../ethereum-client/src/tests_electra.rs | 8 + .../pallets/ethereum-client/src/weights.rs | 2 +- .../external-validator-slashes/src/mock.rs | 1 + .../external-validators-rewards/Cargo.toml | 2 - .../src/benchmarking.rs | 1 - .../external-validators-rewards/src/lib.rs | 5 +- .../external-validators-rewards/src/mock.rs | 14 +- .../external-validators-rewards/src/tests.rs | 2 +- .../external-validators-rewards/src/types.rs | 2 +- .../src/weights.rs | 2 +- .../pallets/external-validators/Cargo.toml | 2 - .../external-validators/src/benchmarking.rs | 1 - .../pallets/external-validators/src/lib.rs | 21 +- .../pallets/external-validators/src/mock.rs | 10 +- .../pallets/external-validators/src/traits.rs | 2 +- .../external-validators/src/weights.rs | 2 +- .../pallets/grandpa-benchmarking/Cargo.toml | 2 - operator/pallets/inbound-queue-v2/Cargo.toml | 2 - .../inbound-queue-v2/fixtures/Cargo.toml | 2 - .../inbound-queue-v2/fixtures/src/lib.rs | 1 + .../fixtures/src/register_token.rs | 2 +- operator/pallets/inbound-queue-v2/src/lib.rs | 2 +- .../src/message_processors.rs | 2 +- operator/pallets/inbound-queue-v2/src/mock.rs | 2 +- .../pallets/inbound-queue-v2/src/weights.rs | 2 +- operator/pallets/outbound-queue-v2/Cargo.toml | 2 - .../outbound-queue-v2/runtime-api/Cargo.toml | 2 - .../outbound-queue-v2/src/benchmarking.rs | 3 + .../pallets/outbound-queue-v2/src/fixture.rs | 2 +- operator/pallets/outbound-queue-v2/src/lib.rs | 5 +- .../pallets/outbound-queue-v2/src/mock.rs | 2 +- .../pallets/outbound-queue-v2/src/types.rs | 1 - .../proxy-genesis-companion/Cargo.toml | 2 - .../proxy-genesis-companion/src/lib.rs | 9 +- .../proxy-genesis-companion/src/mock.rs | 6 +- .../pallets/session-benchmarking/Cargo.toml | 2 - operator/pallets/system-v2/Cargo.toml | 2 - .../pallets/system-v2/runtime-api/Cargo.toml | 2 - .../pallets/system-v2/src/benchmarking.rs | 1 + operator/pallets/system-v2/src/lib.rs | 5 +- operator/pallets/system/Cargo.toml | 2 - .../pallets/system/runtime-api/Cargo.toml | 2 - operator/pallets/system/src/benchmarking.rs | 2 + operator/pallets/system/src/lib.rs | 4 +- operator/pallets/system/src/migration.rs | 6 +- operator/pallets/system/src/mock.rs | 12 +- operator/precompiles/batch/Cargo.toml | 2 - operator/precompiles/batch/src/lib.rs | 5 +- operator/precompiles/batch/src/mock.rs | 4 + operator/precompiles/batch/src/tests.rs | 1 + operator/precompiles/call-permit/Cargo.toml | 2 - operator/precompiles/call-permit/src/lib.rs | 3 +- operator/precompiles/call-permit/src/mock.rs | 4 + operator/precompiles/collective/Cargo.toml | 2 - operator/precompiles/collective/src/lib.rs | 4 +- operator/precompiles/collective/src/mock.rs | 3 + .../precompiles/conviction-voting/Cargo.toml | 2 - .../precompiles/conviction-voting/src/lib.rs | 20 +- .../precompiles/conviction-voting/src/mock.rs | 7 +- .../conviction-voting/src/tests.rs | 1 + .../datahaven-native-transfer/Cargo.toml | 2 - .../datahaven-native-transfer/src/lib.rs | 2 +- .../datahaven-native-transfer/src/mock.rs | 7 +- .../precompiles/erc20-balances/Cargo.toml | 2 - .../precompiles/erc20-balances/src/eip2612.rs | 10 +- .../precompiles/erc20-balances/src/lib.rs | 7 +- .../precompiles/erc20-balances/src/mock.rs | 3 + .../precompiles/erc20-balances/src/tests.rs | 8 +- operator/precompiles/identity/Cargo.toml | 6 +- operator/precompiles/identity/src/lib.rs | 12 +- operator/precompiles/identity/src/mock.rs | 67 +- operator/precompiles/identity/src/tests.rs | 1 + .../precompile-registry/src/lib.rs | 2 +- .../precompile-registry/src/mock.rs | 4 + operator/precompiles/preimage/Cargo.toml | 3 - operator/precompiles/preimage/src/lib.rs | 4 +- operator/precompiles/preimage/src/mock.rs | 3 + operator/precompiles/preimage/src/tests.rs | 1 + operator/precompiles/proxy/Cargo.toml | 2 - operator/precompiles/proxy/src/lib.rs | 37 +- operator/precompiles/proxy/src/mock.rs | 4 + operator/precompiles/proxy/src/tests.rs | 18 +- operator/precompiles/referenda/Cargo.toml | 2 - operator/precompiles/referenda/src/lib.rs | 44 +- operator/precompiles/referenda/src/mock.rs | 43 +- operator/precompiles/referenda/src/tests.rs | 3 +- operator/primitives/bridge/Cargo.toml | 2 - operator/primitives/bridge/src/lib.rs | 3 +- .../primitives/snowbridge/beacon/Cargo.toml | 2 - .../primitives/snowbridge/beacon/src/bits.rs | 2 +- .../primitives/snowbridge/beacon/src/bls.rs | 2 +- .../primitives/snowbridge/beacon/src/lib.rs | 1 + .../snowbridge/beacon/src/receipt.rs | 3 +- .../snowbridge/beacon/src/serde_utils.rs | 2 +- .../primitives/snowbridge/beacon/src/ssz.rs | 4 +- .../primitives/snowbridge/beacon/src/types.rs | 79 +- .../snowbridge/beacon/src/updates.rs | 32 +- .../snowbridge/bridge-hub-common/Cargo.toml | 2 - .../bridge-hub-common/src/message_queue.rs | 15 +- .../bridge-hub-common/src/xcm_version.rs | 4 +- .../primitives/snowbridge/core/Cargo.toml | 2 - .../primitives/snowbridge/core/src/lib.rs | 4 +- .../snowbridge/core/src/location.rs | 4 +- .../primitives/snowbridge/core/src/pricing.rs | 11 +- .../primitives/snowbridge/core/src/reward.rs | 2 +- .../snowbridge/core/src/sparse_bitmap.rs | 2 +- .../primitives/snowbridge/ethereum/Cargo.toml | 2 - .../snowbridge/ethereum/src/header.rs | 3 +- .../primitives/snowbridge/ethereum/src/lib.rs | 1 + .../primitives/snowbridge/ethereum/src/log.rs | 2 +- .../primitives/snowbridge/ethereum/src/mpt.rs | 3 +- .../snowbridge/ethereum/src/receipt.rs | 2 +- .../snowbridge/inbound-queue/Cargo.toml | 2 - .../snowbridge/inbound-queue/src/lib.rs | 4 +- .../snowbridge/inbound-queue/src/v1.rs | 2 +- .../inbound-queue/src/v2/converter.rs | 4 +- .../inbound-queue/src/v2/message.rs | 4 +- .../snowbridge/outbound-queue/Cargo.toml | 2 - .../outbound-queue/src/v1/message.rs | 4 +- .../snowbridge/outbound-queue/src/v1/mod.rs | 2 + .../src/v2/converter/convert.rs | 4 +- .../outbound-queue/src/v2/converter/mod.rs | 4 +- .../outbound-queue/src/v2/converter/tests.rs | 2 +- .../outbound-queue/src/v2/delivery_receipt.rs | 4 +- .../outbound-queue/src/v2/exporter.rs | 4 +- .../outbound-queue/src/v2/message.rs | 7 +- .../snowbridge/outbound-queue/src/v2/mod.rs | 4 +- .../snowbridge/test-utils/Cargo.toml | 1 - .../snowbridge/test-utils/src/mock_origin.rs | 12 +- .../snowbridge/verification/Cargo.toml | 2 - .../snowbridge/verification/src/lib.rs | 14 +- operator/runtime/common/Cargo.toml | 2 - operator/runtime/common/src/deal_with_fees.rs | 8 +- .../src/impl_on_charge_evm_transaction.rs | 2 +- operator/runtime/common/src/inflation.rs | 4 +- operator/runtime/common/src/lib.rs | 1 + .../runtime/common/src/rewards_adapter.rs | 4 +- operator/runtime/common/src/safe_mode.rs | 2 +- .../runtime/common/src/slashes_adapter.rs | 4 +- operator/runtime/mainnet/Cargo.toml | 6 +- operator/runtime/mainnet/src/benchmarks.rs | 3 +- .../mainnet/src/configs/governance/origins.rs | 11 +- .../src/configs/governance/referenda.rs | 5 +- .../mainnet/src/configs/governance/tracks.rs | 107 +- operator/runtime/mainnet/src/configs/mod.rs | 18 +- .../mainnet/src/configs/runtime_params.rs | 2 +- .../mainnet/src/configs/storagehub/client.rs | 1 + .../mainnet/src/configs/storagehub/mod.rs | 16 +- .../mainnet/src/genesis_config_presets.rs | 1 + operator/runtime/mainnet/src/lib.rs | 36 +- .../mainnet/src/weights/frame_system.rs | 2 +- .../mainnet/src/weights/pallet_babe.rs | 2 +- .../mainnet/src/weights/pallet_balances.rs | 2 +- .../mainnet/src/weights/pallet_beefy_mmr.rs | 4 +- .../pallet_collective_technical_committee.rs | 2 +- .../pallet_collective_treasury_council.rs | 2 +- .../src/weights/pallet_conviction_voting.rs | 2 +- .../pallet_datahaven_native_transfer.rs | 2 +- .../runtime/mainnet/src/weights/pallet_evm.rs | 2 +- .../pallet_external_validator_slashes.rs | 2 +- .../src/weights/pallet_external_validators.rs | 2 +- .../pallet_external_validators_rewards.rs | 2 +- .../mainnet/src/weights/pallet_grandpa.rs | 2 +- .../mainnet/src/weights/pallet_im_online.rs | 2 +- .../src/weights/pallet_message_queue.rs | 6 +- .../runtime/mainnet/src/weights/pallet_mmr.rs | 2 +- .../mainnet/src/weights/pallet_multisig.rs | 4 +- .../mainnet/src/weights/pallet_nfts.rs | 2 +- .../mainnet/src/weights/pallet_parameters.rs | 2 +- .../src/weights/pallet_payment_streams.rs | 2 +- .../mainnet/src/weights/pallet_preimage.rs | 2 +- .../src/weights/pallet_proofs_dealer.rs | 2 +- .../mainnet/src/weights/pallet_proxy.rs | 6 +- .../mainnet/src/weights/pallet_randomness.rs | 2 +- .../mainnet/src/weights/pallet_referenda.rs | 2 +- .../mainnet/src/weights/pallet_safe_mode.rs | 2 +- .../mainnet/src/weights/pallet_scheduler.rs | 2 +- .../mainnet/src/weights/pallet_session.rs | 2 +- .../src/weights/pallet_storage_providers.rs | 2 +- .../mainnet/src/weights/pallet_sudo.rs | 2 +- .../mainnet/src/weights/pallet_timestamp.rs | 2 +- .../src/weights/pallet_transaction_payment.rs | 2 +- .../mainnet/src/weights/pallet_treasury.rs | 2 +- .../mainnet/src/weights/pallet_tx_pause.rs | 2 +- .../mainnet/src/weights/pallet_utility.rs | 9 +- .../mainnet/src/weights/pallet_whitelist.rs | 2 +- .../snowbridge_pallet_ethereum_client.rs | 2 +- .../snowbridge_pallet_inbound_queue_v2.rs | 2 +- .../snowbridge_pallet_outbound_queue_v2.rs | 2 +- .../src/weights/snowbridge_pallet_system.rs | 2 +- .../weights/snowbridge_pallet_system_v2.rs | 2 +- operator/runtime/mainnet/tests/common.rs | 9 +- .../mainnet/tests/governance/benchmarks.rs | 32 +- .../mainnet/tests/governance/referenda.rs | 52 +- operator/runtime/mainnet/tests/lib.rs | 1 + operator/runtime/mainnet/tests/treasury.rs | 3 + operator/runtime/stagenet/Cargo.toml | 6 +- operator/runtime/stagenet/src/benchmarks.rs | 3 +- .../src/configs/governance/origins.rs | 11 +- .../src/configs/governance/referenda.rs | 5 +- .../stagenet/src/configs/governance/tracks.rs | 106 +- operator/runtime/stagenet/src/configs/mod.rs | 18 +- .../stagenet/src/configs/runtime_params.rs | 2 +- .../stagenet/src/configs/storagehub/client.rs | 1 + .../stagenet/src/configs/storagehub/mod.rs | 16 +- .../stagenet/src/genesis_config_presets.rs | 1 + operator/runtime/stagenet/src/lib.rs | 36 +- .../stagenet/src/weights/frame_system.rs | 2 +- .../stagenet/src/weights/pallet_babe.rs | 2 +- .../stagenet/src/weights/pallet_balances.rs | 2 +- .../stagenet/src/weights/pallet_beefy_mmr.rs | 4 +- .../pallet_collective_technical_committee.rs | 2 +- .../pallet_collective_treasury_council.rs | 2 +- .../src/weights/pallet_conviction_voting.rs | 2 +- .../pallet_datahaven_native_transfer.rs | 2 +- .../stagenet/src/weights/pallet_evm.rs | 2 +- .../pallet_external_validator_slashes.rs | 2 +- .../src/weights/pallet_external_validators.rs | 2 +- .../pallet_external_validators_rewards.rs | 2 +- .../stagenet/src/weights/pallet_grandpa.rs | 2 +- .../stagenet/src/weights/pallet_im_online.rs | 2 +- .../src/weights/pallet_message_queue.rs | 6 +- .../stagenet/src/weights/pallet_mmr.rs | 2 +- .../stagenet/src/weights/pallet_multisig.rs | 4 +- .../stagenet/src/weights/pallet_nfts.rs | 2 +- .../stagenet/src/weights/pallet_parameters.rs | 2 +- .../src/weights/pallet_payment_streams.rs | 2 +- .../stagenet/src/weights/pallet_preimage.rs | 2 +- .../src/weights/pallet_proofs_dealer.rs | 2 +- .../stagenet/src/weights/pallet_proxy.rs | 6 +- .../stagenet/src/weights/pallet_randomness.rs | 2 +- .../stagenet/src/weights/pallet_referenda.rs | 2 +- .../stagenet/src/weights/pallet_safe_mode.rs | 2 +- .../stagenet/src/weights/pallet_scheduler.rs | 2 +- .../stagenet/src/weights/pallet_session.rs | 2 +- .../src/weights/pallet_storage_providers.rs | 2 +- .../stagenet/src/weights/pallet_sudo.rs | 2 +- .../stagenet/src/weights/pallet_timestamp.rs | 2 +- .../src/weights/pallet_transaction_payment.rs | 2 +- .../stagenet/src/weights/pallet_treasury.rs | 2 +- .../stagenet/src/weights/pallet_tx_pause.rs | 2 +- .../stagenet/src/weights/pallet_utility.rs | 9 +- .../stagenet/src/weights/pallet_whitelist.rs | 2 +- .../snowbridge_pallet_ethereum_client.rs | 2 +- .../snowbridge_pallet_inbound_queue_v2.rs | 2 +- .../snowbridge_pallet_outbound_queue_v2.rs | 2 +- .../src/weights/snowbridge_pallet_system.rs | 2 +- .../weights/snowbridge_pallet_system_v2.rs | 2 +- operator/runtime/stagenet/tests/common.rs | 9 +- .../stagenet/tests/governance/benchmarks.rs | 32 +- .../stagenet/tests/governance/referenda.rs | 52 +- operator/runtime/stagenet/tests/lib.rs | 1 + operator/runtime/stagenet/tests/treasury.rs | 3 + operator/runtime/testnet/Cargo.toml | 6 +- .../testnet/src/configs/governance/origins.rs | 11 +- .../src/configs/governance/referenda.rs | 5 +- .../testnet/src/configs/governance/tracks.rs | 106 +- operator/runtime/testnet/src/configs/mod.rs | 18 +- .../testnet/src/configs/runtime_params.rs | 2 +- .../testnet/src/configs/storagehub/client.rs | 1 + .../testnet/src/configs/storagehub/mod.rs | 16 +- .../testnet/src/genesis_config_presets.rs | 1 + operator/runtime/testnet/src/lib.rs | 36 +- .../testnet/src/weights/frame_system.rs | 2 +- .../testnet/src/weights/pallet_babe.rs | 2 +- .../testnet/src/weights/pallet_balances.rs | 2 +- .../testnet/src/weights/pallet_beefy_mmr.rs | 4 +- .../pallet_collective_technical_committee.rs | 2 +- .../pallet_collective_treasury_council.rs | 2 +- .../src/weights/pallet_conviction_voting.rs | 2 +- .../pallet_datahaven_native_transfer.rs | 2 +- .../runtime/testnet/src/weights/pallet_evm.rs | 2 +- .../pallet_external_validator_slashes.rs | 2 +- .../src/weights/pallet_external_validators.rs | 2 +- .../pallet_external_validators_rewards.rs | 2 +- .../testnet/src/weights/pallet_grandpa.rs | 2 +- .../testnet/src/weights/pallet_identity.rs | 2 +- .../testnet/src/weights/pallet_im_online.rs | 2 +- .../src/weights/pallet_message_queue.rs | 6 +- .../runtime/testnet/src/weights/pallet_mmr.rs | 2 +- .../testnet/src/weights/pallet_multisig.rs | 4 +- .../testnet/src/weights/pallet_nfts.rs | 2 +- .../testnet/src/weights/pallet_parameters.rs | 2 +- .../src/weights/pallet_payment_streams.rs | 2 +- .../testnet/src/weights/pallet_preimage.rs | 2 +- .../src/weights/pallet_proofs_dealer.rs | 2 +- .../testnet/src/weights/pallet_proxy.rs | 17 +- .../testnet/src/weights/pallet_randomness.rs | 2 +- .../testnet/src/weights/pallet_referenda.rs | 2 +- .../testnet/src/weights/pallet_safe_mode.rs | 2 +- .../testnet/src/weights/pallet_scheduler.rs | 2 +- .../testnet/src/weights/pallet_session.rs | 2 +- .../src/weights/pallet_storage_providers.rs | 2 +- .../testnet/src/weights/pallet_sudo.rs | 2 +- .../testnet/src/weights/pallet_timestamp.rs | 2 +- .../src/weights/pallet_transaction_payment.rs | 2 +- .../testnet/src/weights/pallet_treasury.rs | 2 +- .../testnet/src/weights/pallet_tx_pause.rs | 2 +- .../testnet/src/weights/pallet_utility.rs | 19 +- .../testnet/src/weights/pallet_whitelist.rs | 2 +- .../snowbridge_pallet_ethereum_client.rs | 2 +- .../snowbridge_pallet_inbound_queue_v2.rs | 2 +- .../snowbridge_pallet_outbound_queue_v2.rs | 2 +- .../src/weights/snowbridge_pallet_system.rs | 2 +- .../weights/snowbridge_pallet_system_v2.rs | 2 +- operator/runtime/testnet/tests/common.rs | 9 +- .../testnet/tests/governance/benchmarks.rs | 32 +- .../testnet/tests/governance/referenda.rs | 52 +- operator/runtime/testnet/tests/lib.rs | 1 + operator/runtime/testnet/tests/treasury.rs | 3 + test/.papi/descriptors/package.json | 2 +- test/.papi/metadata/datahaven.scale | Bin 634460 -> 640566 bytes .../dev/stagenet/eth-tx/test-eth-tx-types.ts | 20 +- .../stagenet/evm/test-pallet-evm-overflow.ts | 1 + .../stagenet/evm/test-pallet-evm-transfer.ts | 2 + .../suites/dev/stagenet/sudo/test-sudo.ts | 8 +- 335 files changed, 3267 insertions(+), 2868 deletions(-) diff --git a/operator/Cargo.lock b/operator/Cargo.lock index 586435c3..cf90f05d 100644 --- a/operator/Cargo.lock +++ b/operator/Cargo.lock @@ -343,7 +343,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-std 0.4.0", ] @@ -354,12 +354,24 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-serialize 0.4.2", "ark-std 0.4.0", ] +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -367,7 +379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff 0.4.2", - "ark-poly", + "ark-poly 0.4.2", "ark-serialize 0.4.2", "ark-std 0.4.0", "derivative", @@ -377,6 +389,39 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1786b2e3832f6f0f7c8d62d5d5a282f6952a1ab99981c54cd52b6ac1d8f02df5" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-ff" version = "0.3.0" @@ -516,6 +561,21 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -532,7 +592,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", @@ -544,6 +604,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ + "ark-serialize-derive 0.5.0", "ark-std 0.5.0", "arrayvec 0.7.6", "digest 0.10.7", @@ -561,6 +622,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -591,6 +663,39 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-transcript" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c1c928edb9d8ff24cb5dcb7651d3a98494fff3099eee95c2404cd813a9139f" +dependencies = [ + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "ark-vrf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d63e9780640021b74d02b32895d8cec1b4abe8e5547b560a6bda6b14b78c6da" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "w3f-ring-proof", + "zeroize", +] + [[package]] name = "array-bytes" version = "6.2.3" @@ -620,12 +725,12 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ - "asn1-rs-derive 0.4.0", - "asn1-rs-impl 0.1.0", + "asn1-rs-derive 0.5.1", + "asn1-rs-impl", "displaydoc", "nom", "num-traits", @@ -641,7 +746,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" dependencies = [ "asn1-rs-derive 0.6.0", - "asn1-rs-impl 0.2.0", + "asn1-rs-impl", "displaydoc", "nom", "num-traits", @@ -652,14 +757,14 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure 0.12.6", + "syn 2.0.106", + "synstructure 0.13.2", ] [[package]] @@ -674,17 +779,6 @@ dependencies = [ "synstructure 0.13.2", ] -[[package]] -name = "asn1-rs-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "asn1-rs-impl" version = "0.2.0" @@ -897,6 +991,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + [[package]] name = "atoi" version = "2.0.0" @@ -1068,12 +1175,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -1104,15 +1205,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - [[package]] name = "bigdecimal" version = "0.4.8" @@ -1130,7 +1222,7 @@ dependencies = [ [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "log", @@ -1208,7 +1300,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.13.0", "serde", "unicode-normalization", ] @@ -1234,6 +1326,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" +[[package]] +name = "bitcoin-io" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" + [[package]] name = "bitcoin_hashes" version = "0.13.0" @@ -1241,7 +1339,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ "bitcoin-internals", - "hex-conservative", + "hex-conservative 0.1.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.2", ] [[package]] @@ -1389,8 +1497,8 @@ dependencies = [ [[package]] name = "bp-header-chain" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1406,8 +1514,8 @@ dependencies = [ [[package]] name = "bp-messages" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1422,8 +1530,8 @@ dependencies = [ [[package]] name = "bp-parachains" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1439,8 +1547,8 @@ dependencies = [ [[package]] name = "bp-polkadot-core" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-messages", "bp-runtime", @@ -1456,8 +1564,8 @@ dependencies = [ [[package]] name = "bp-relayers" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-messages", @@ -1474,8 +1582,8 @@ dependencies = [ [[package]] name = "bp-runtime" -version = "0.19.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -1492,24 +1600,7 @@ dependencies = [ "sp-state-machine", "sp-std", "sp-trie", - "trie-db 0.29.1", -] - -[[package]] -name = "bridge-hub-common" -version = "0.12.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "pallet-message-queue", - "parity-scale-codec", - "scale-info", - "snowbridge-core 0.12.2", - "sp-core", - "sp-runtime", - "sp-std", - "staging-xcm", + "trie-db 0.30.0", ] [[package]] @@ -1521,7 +1612,25 @@ dependencies = [ "pallet-message-queue", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", + "snowbridge-core 0.23.0", + "sp-core", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "bridge-hub-common" +version = "0.13.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "pallet-message-queue", + "parity-scale-codec", + "scale-info", + "snowbridge-core 0.13.2", "sp-core", "sp-runtime", "sp-std", @@ -1833,7 +1942,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", "terminal_size", ] @@ -2286,6 +2395,21 @@ dependencies = [ "subtle 2.6.1", ] +[[package]] +name = "crypto_secretbox" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" +dependencies = [ + "aead", + "cipher 0.4.4", + "generic-array 0.14.7", + "poly1305", + "salsa20", + "subtle 2.6.1", + "zeroize", +] + [[package]] name = "ctr" version = "0.9.2" @@ -2297,8 +2421,8 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" -version = "0.15.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2307,20 +2431,18 @@ dependencies = [ "cumulus-test-relay-sproof-builder", "parity-scale-codec", "sc-client-api", - "sp-api", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-inherents", "sp-runtime", "sp-state-machine", "sp-storage", - "sp-trie", "tracing", ] [[package]] name = "cumulus-primitives-core" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -2335,8 +2457,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2349,8 +2471,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" -version = "0.11.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -2359,8 +2481,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" -version = "9.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -2376,13 +2498,13 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" -version = "0.21.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", "futures", - "jsonrpsee-core 0.24.9", + "jsonrpsee-core", "parity-scale-codec", "polkadot-overseer", "sc-client-api", @@ -2395,8 +2517,8 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -2496,38 +2618,14 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -2540,28 +2638,17 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "syn 2.0.106", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", + "darling_core", "quote", "syn 2.0.106", ] @@ -2607,12 +2694,13 @@ dependencies = [ [[package]] name = "datahaven-mainnet-runtime" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -2720,11 +2808,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -2733,7 +2821,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.23.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -2748,7 +2836,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -2764,7 +2851,7 @@ dependencies = [ [[package]] name = "datahaven-node" -version = "0.26.0" +version = "0.23.0" dependencies = [ "async-channel 1.9.0", "clap", @@ -2790,7 +2877,7 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex-literal 0.3.4", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "mmr-gadget", "mmr-rpc", @@ -2877,7 +2964,7 @@ dependencies = [ [[package]] name = "datahaven-runtime-common" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "fp-account", @@ -2901,22 +2988,22 @@ dependencies = [ "polkadot-runtime-common", "precompile-utils", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", ] [[package]] name = "datahaven-stagenet-runtime" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -3024,11 +3111,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3037,7 +3124,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.23.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3052,7 +3139,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -3068,12 +3154,13 @@ dependencies = [ [[package]] name = "datahaven-testnet-runtime" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -3181,11 +3268,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3194,7 +3281,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.23.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3209,7 +3296,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -3238,11 +3324,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", "displaydoc", "nom", "num-bigint", @@ -3374,7 +3460,7 @@ dependencies = [ [[package]] name = "dhp-bridge" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-support", "frame-system", @@ -3382,10 +3468,9 @@ dependencies = [ "pallet-datahaven-native-transfer", "pallet-external-validators", "parity-scale-codec", - "snowbridge-core 0.26.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] @@ -3460,12 +3545,6 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" -[[package]] -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" @@ -3515,6 +3594,15 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-sys" version = "0.4.1" @@ -3606,7 +3694,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" dependencies = [ - "darling 0.20.11", + "darling", "either", "heck 0.5.0", "proc-macro2", @@ -3765,18 +3853,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-as-inner" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "enum-as-inner" version = "0.6.1" @@ -3895,20 +3971,22 @@ dependencies = [ "fixed-hash", "impl-codec 0.7.1", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "scale-info", "tiny-keccak", ] [[package]] name = "ethereum" -version = "0.15.0" -source = "git+https://github.com/rust-ethereum/ethereum?rev=3be0d8fd4c2ad1ba216b69ef65b9382612efc8ba#3be0d8fd4c2ad1ba216b69ef65b9382612efc8ba" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ee371ebb7479ed3258617557ab0b3247e741075cb6b02b820d188f68da44441" dependencies = [ "bytes", "ethereum-types", "hash-db", "hash256-std-hasher", + "k256", "parity-scale-codec", "rlp 0.6.1", "scale-info", @@ -3927,7 +4005,7 @@ dependencies = [ "fixed-hash", "impl-codec 0.7.1", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "primitive-types 0.13.1", "scale-info", "uint 0.10.0", @@ -3939,16 +4017,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "5.4.1" @@ -3972,8 +4040,9 @@ dependencies = [ [[package]] name = "evm" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b54f188e7563c1702ecefdef92c8b2c4be8941b84a50684907a747f87121aace" dependencies = [ "auto_impl", "environmental", @@ -3992,8 +4061,9 @@ dependencies = [ [[package]] name = "evm-core" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ef956f8cc0c25a2d8be1dea7d659782b7c5f201f7e8057878f2051eec78350" dependencies = [ "parity-scale-codec", "primitive-types 0.13.1", @@ -4003,8 +4073,9 @@ dependencies = [ [[package]] name = "evm-gasometer" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54aa0327b242bad8dd83ba524effd1d798e9102ff592910dfdded79c6bde4ff3" dependencies = [ "environmental", "evm-core", @@ -4014,8 +4085,9 @@ dependencies = [ [[package]] name = "evm-runtime" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf22109a8f12b6d9ae60475584c80f2c9d48cf12427eac651b69ce14e5b95666" dependencies = [ "auto_impl", "environmental", @@ -4115,7 +4187,7 @@ dependencies = [ [[package]] name = "fc-api" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "fp-storage", @@ -4127,7 +4199,7 @@ dependencies = [ [[package]] name = "fc-cli" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "clap", "ethereum-types", @@ -4145,7 +4217,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "fp-consensus", @@ -4155,13 +4227,13 @@ dependencies = [ "sp-block-builder", "sp-consensus", "sp-runtime", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "ethereum", @@ -4191,7 +4263,7 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fc-db", "fc-storage", @@ -4214,7 +4286,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4228,20 +4300,19 @@ dependencies = [ "fp-storage", "futures", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "libsecp256k1", "log", "pallet-evm", "parity-scale-codec", "prometheus", - "rand 0.8.5", + "rand 0.9.2", "rlp 0.6.1", "sc-client-api", "sc-network", "sc-network-sync", "sc-rpc", "sc-service", - "sc-transaction-pool", "sc-transaction-pool-api", "sc-utils", "schnellru", @@ -4257,30 +4328,31 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-storage", + "sp-trie", "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "thiserror 2.0.17", "tokio", ] [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", - "jsonrpsee 0.24.9", + "jsonrpsee", "rlp 0.6.1", "rustc-hex", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", ] [[package]] name = "fc-storage" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4374,16 +4446,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" -[[package]] -name = "finito" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" -dependencies = [ - "futures-timer", - "pin-project", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -4414,15 +4476,6 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "flume" version = "0.10.14" @@ -4483,7 +4536,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", ] @@ -4510,10 +4563,10 @@ dependencies = [ [[package]] name = "fp-account" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "hex", - "impl-serde 0.5.0", + "impl-serde", "libsecp256k1", "log", "parity-scale-codec", @@ -4529,7 +4582,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "parity-scale-codec", @@ -4540,7 +4593,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4552,7 +4605,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "environmental", "evm", @@ -4568,7 +4621,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4584,7 +4637,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "frame-support", "parity-scale-codec", @@ -4596,7 +4649,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "parity-scale-codec", "serde", @@ -4610,8 +4663,8 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.2.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-support-procedural", @@ -4634,8 +4687,8 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "46.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "48.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "array-bytes", @@ -4649,7 +4702,6 @@ dependencies = [ "frame-system", "gethostname", "handlebars", - "hex", "itertools 0.11.0", "linked-hash-map", "log", @@ -4664,7 +4716,7 @@ dependencies = [ "sc-client-api", "sc-client-db", "sc-executor", - "sc-executor-common", + "sc-runtime-utilities", "sc-service", "sc-sysinfo", "serde", @@ -4673,7 +4725,6 @@ dependencies = [ "sp-block-builder", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", "sp-database", "sp-externalities", "sp-genesis-builder", @@ -4694,10 +4745,24 @@ dependencies = [ "thousands", ] +[[package]] +name = "frame-decode" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6027a409bac4fe95b4d107f965fcdbc252fc89d884a360d076b3070b6128c094" +dependencies = [ + "frame-metadata 17.0.0", + "parity-scale-codec", + "scale-decode 0.14.0", + "scale-info", + "scale-type-resolver", + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "frame-election-provider-solution-type" -version = "14.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -4707,8 +4772,8 @@ dependencies = [ [[package]] name = "frame-election-provider-support" -version = "39.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -4723,8 +4788,8 @@ dependencies = [ [[package]] name = "frame-executive" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aquamarine", "frame-support", @@ -4741,20 +4806,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.1.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "frame-metadata" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "701bac17e9b55e0f95067c428ebcb46496587f08e8cf4ccc0fe5903bea10dbb8" dependencies = [ "cfg-if", "parity-scale-codec", @@ -4764,9 +4818,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "18.0.0" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daaf440c68eb2c3d88e5760fe8c7af3f9fee9181fab6c2f2c4e7cc48dcc40bb8" +checksum = "26de808fa6461f2485dc51811aefed108850064994fb4a62b3ac21ffa62ac8df" dependencies = [ "cfg-if", "parity-scale-codec", @@ -4776,8 +4830,8 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.8.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "const-hex", @@ -4792,8 +4846,8 @@ dependencies = [ [[package]] name = "frame-support" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aquamarine", "array-bytes", @@ -4801,7 +4855,7 @@ dependencies = [ "bitflags 1.3.2", "docify", "environmental", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -4812,7 +4866,6 @@ dependencies = [ "scale-info", "serde", "serde_json", - "smallvec", "sp-api", "sp-arithmetic", "sp-core", @@ -4829,14 +4882,13 @@ dependencies = [ "sp-tracing", "sp-trie", "sp-weights", - "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" -version = "31.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "33.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "cfg-expr", @@ -4846,17 +4898,17 @@ dependencies = [ "frame-support-procedural-tools", "itertools 0.11.0", "macro_magic", - "proc-macro-warning 1.84.1", + "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.4.0", @@ -4868,7 +4920,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro2", "quote", @@ -4878,11 +4930,11 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-executive", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "frame-support", "frame-support-test-pallet", "frame-system", @@ -4905,7 +4957,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -4917,8 +4969,8 @@ dependencies = [ [[package]] name = "frame-system" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cfg-if", "docify", @@ -4930,15 +4982,14 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-version", "sp-weights", ] [[package]] name = "frame-system-benchmarking" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4951,8 +5002,8 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "parity-scale-codec", @@ -4961,8 +5012,8 @@ dependencies = [ [[package]] name = "frame-try-runtime" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", @@ -5012,9 +5063,9 @@ dependencies = [ [[package]] name = "futures-bounded" -version = "0.1.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" dependencies = [ "futures-timer", "futures-util", @@ -5091,12 +5142,13 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.21.12", + "rustls", + "rustls-pki-types", ] [[package]] @@ -5234,9 +5286,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator 0.3.0", "stable_deref_trait", @@ -5485,6 +5537,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" +[[package]] +name = "hex-conservative" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" +dependencies = [ + "arrayvec 0.7.6", +] + [[package]] name = "hex-literal" version = "0.3.4" @@ -5497,6 +5558,31 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.10", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + [[package]] name = "hickory-proto" version = "0.25.2" @@ -5506,11 +5592,11 @@ dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner 0.6.1", + "enum-as-inner", "futures-channel", "futures-io", "futures-util", - "idna 1.1.0", + "idna", "ipnet", "once_cell", "rand 0.9.2", @@ -5522,6 +5608,27 @@ dependencies = [ "url", ] +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.24.4", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.5", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "hickory-resolver" version = "0.25.2" @@ -5530,7 +5637,7 @@ checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" dependencies = [ "cfg-if", "futures-util", - "hickory-proto", + "hickory-proto 0.25.2", "ipconfig", "moka", "once_cell", @@ -5656,6 +5763,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + [[package]] name = "hyper" version = "0.14.32" @@ -5703,22 +5820,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.7" @@ -5729,11 +5830,11 @@ dependencies = [ "hyper 1.7.0", "hyper-util", "log", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", "webpki-roots 1.0.3", ] @@ -5878,27 +5979,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.1.0" @@ -6010,15 +6090,6 @@ dependencies = [ "rlp 0.6.1", ] -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.5.0" @@ -6229,20 +6300,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror 1.0.69", - "walkdir", -] - [[package]] name = "jni" version = "0.21.1" @@ -6285,132 +6342,45 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpsee" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" -dependencies = [ - "jsonrpsee-client-transport 0.22.5", - "jsonrpsee-core 0.22.5", - "jsonrpsee-http-client", - "jsonrpsee-types 0.22.5", -] - -[[package]] -name = "jsonrpsee" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" -dependencies = [ - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "jsonrpsee-ws-client", -] - [[package]] name = "jsonrpsee" version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" dependencies = [ - "jsonrpsee-core 0.24.9", + "jsonrpsee-client-transport", + "jsonrpsee-core", "jsonrpsee-proc-macros", "jsonrpsee-server", - "jsonrpsee-types 0.24.9", + "jsonrpsee-types", + "jsonrpsee-ws-client", "tokio", "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.22.5" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" -dependencies = [ - "futures-util", - "http 0.2.12", - "jsonrpsee-core 0.22.5", - "pin-project", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "soketto 0.7.1", - "thiserror 1.0.69", - "tokio", - "tokio-rustls 0.25.0", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" +checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" dependencies = [ "base64 0.22.1", "futures-util", "http 1.3.1", - "jsonrpsee-core 0.23.2", + "jsonrpsee-core", "pin-project", - "rustls 0.23.32", + "rustls", "rustls-pki-types", - "rustls-platform-verifier 0.3.4", - "soketto 0.8.1", + "rustls-platform-verifier", + "soketto", "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tracing", "url", ] -[[package]] -name = "jsonrpsee-core" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "hyper 0.14.32", - "jsonrpsee-types 0.22.5", - "pin-project", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "jsonrpsee-types 0.23.2", - "pin-project", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", -] - [[package]] name = "jsonrpsee-core" version = "0.24.9" @@ -6419,41 +6389,24 @@ checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" dependencies = [ "async-trait", "bytes", + "futures-timer", "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "jsonrpsee-types 0.24.9", + "jsonrpsee-types", "parking_lot 0.12.5", + "pin-project", "rand 0.8.5", "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", "tokio", + "tokio-stream", "tracing", ] -[[package]] -name = "jsonrpsee-http-client" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" -dependencies = [ - "async-trait", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "jsonrpsee-core 0.22.5", - "jsonrpsee-types 0.22.5", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tower 0.4.13", - "tracing", - "url", -] - [[package]] name = "jsonrpsee-proc-macros" version = "0.24.9" @@ -6479,13 +6432,13 @@ dependencies = [ "http-body-util", "hyper 1.7.0", "hyper-util", - "jsonrpsee-core 0.24.9", - "jsonrpsee-types 0.24.9", + "jsonrpsee-core", + "jsonrpsee-types", "pin-project", "route-recognizer", "serde", "serde_json", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", "tokio", "tokio-stream", @@ -6494,32 +6447,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-types" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" -dependencies = [ - "beef", - "http 1.3.1", - "serde", - "serde_json", - "thiserror 1.0.69", -] - [[package]] name = "jsonrpsee-types" version = "0.24.9" @@ -6534,14 +6461,14 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.23.2" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" dependencies = [ "http 1.3.1", - "jsonrpsee-client-transport 0.23.2", - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", "url", ] @@ -6581,11 +6508,11 @@ dependencies = [ [[package]] name = "keccak-hash" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b286e6b663fb926e1eeb68528e69cb70ed46c6d65871a21b2215ae8154c6d3c" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" dependencies = [ - "primitive-types 0.12.2", + "primitive-types 0.13.1", "tiny-keccak", ] @@ -6710,16 +6637,15 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libp2p" -version = "0.52.4" +version = "0.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94495eb319a85b70a68b85e2389a95bb3555c71c49025b78c691a854a7e6464" +checksum = "bbbe80f9c7e00526cd6b838075b9c171919404a4732cb2fa8ece0a093223bfc4" dependencies = [ "bytes", "either", "futures", "futures-timer", "getrandom 0.2.16", - "instant", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -6736,7 +6662,6 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-upnp", - "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", "multiaddr 0.18.2", @@ -6747,9 +6672,9 @@ dependencies = [ [[package]] name = "libp2p-allow-block-list" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" +checksum = "d1027ccf8d70320ed77e984f273bc8ce952f623762cb9bf2d126df73caef8041" dependencies = [ "libp2p-core", "libp2p-identity", @@ -6759,9 +6684,9 @@ dependencies = [ [[package]] name = "libp2p-connection-limits" -version = "0.2.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" +checksum = "8d003540ee8baef0d254f7b6bfd79bac3ddf774662ca0abf69186d517ef82ad8" dependencies = [ "libp2p-core", "libp2p-identity", @@ -6771,17 +6696,15 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" +checksum = "a61f26c83ed111104cd820fe9bc3aaabbac5f1652a1d213ed6e900b7918a1298" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-identity", - "log", "multiaddr 0.18.2", "multihash 0.19.3", "multistream-select", @@ -6793,33 +6716,35 @@ dependencies = [ "rw-stream-sink", "smallvec", "thiserror 1.0.69", - "unsigned-varint 0.7.2", + "tracing", + "unsigned-varint 0.8.0", "void", + "web-time", ] [[package]] name = "libp2p-dns" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" +checksum = "97f37f30d5c7275db282ecd86e54f29dd2176bd3ac656f06abf43bedb21eb8bd" dependencies = [ "async-trait", "futures", + "hickory-resolver 0.24.4", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.5", "smallvec", - "trust-dns-resolver", + "tracing", ] [[package]] name = "libp2p-identify" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" +checksum = "1711b004a273be4f30202778856368683bd9a83c4c7dcc8f848847606831a4e3" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "either", "futures", "futures-bounded", @@ -6827,12 +6752,12 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "lru 0.12.5", "quick-protobuf", "quick-protobuf-codec", "smallvec", "thiserror 1.0.69", + "tracing", "void", ] @@ -6856,83 +6781,84 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.44.6" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" +checksum = "ced237d0bd84bbebb7c2cad4c073160dacb4fe40534963c32ed6d4c6bb7702a3" dependencies = [ "arrayvec 0.7.6", - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "either", "fnv", "futures", + "futures-bounded", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "quick-protobuf", "quick-protobuf-codec", "rand 0.8.5", "sha2 0.10.9", "smallvec", "thiserror 1.0.69", + "tracing", "uint 0.9.5", - "unsigned-varint 0.7.2", "void", + "web-time", ] [[package]] name = "libp2p-mdns" -version = "0.44.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" +checksum = "14b8546b6644032565eb29046b42744aee1e9f261ed99671b2c93fb140dba417" dependencies = [ "data-encoding", "futures", + "hickory-proto 0.24.4", "if-watch", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", "socket2 0.5.10", "tokio", - "trust-dns-proto 0.22.0", + "tracing", "void", ] [[package]] name = "libp2p-metrics" -version = "0.13.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" +checksum = "77ebafa94a717c8442d8db8d3ae5d1c6a15e30f2d347e0cd31d057ca72e42566" dependencies = [ - "instant", + "futures", "libp2p-core", "libp2p-identify", "libp2p-identity", "libp2p-kad", "libp2p-ping", "libp2p-swarm", - "once_cell", + "pin-project", "prometheus-client", + "web-time", ] [[package]] name = "libp2p-noise" -version = "0.43.2" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921" +checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c" dependencies = [ + "asynchronous-codec 0.7.0", "bytes", "curve25519-dalek", "futures", "libp2p-core", "libp2p-identity", - "log", "multiaddr 0.18.2", "multihash 0.19.3", "once_cell", @@ -6942,33 +6868,34 @@ dependencies = [ "snow", "static_assertions", "thiserror 1.0.69", + "tracing", "x25519-dalek", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" +checksum = "005a34420359223b974ee344457095f027e51346e992d1e0dcd35173f4cdd422" dependencies = [ "either", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-quic" -version = "0.9.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" +checksum = "46352ac5cd040c70e88e7ff8257a2ae2f891a4076abad2c439584a31c15fd24e" dependencies = [ "bytes", "futures", @@ -6977,66 +6904,68 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-tls", - "log", "parking_lot 0.12.5", - "quinn 0.10.2", + "quinn", "rand 0.8.5", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.14", + "rustls", "socket2 0.5.10", "thiserror 1.0.69", "tokio", + "tracing", ] [[package]] name = "libp2p-request-response" -version = "0.25.3" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" +checksum = "1356c9e376a94a75ae830c42cdaea3d4fe1290ba409a22c809033d1b7dcab0a6" dependencies = [ "async-trait", "futures", - "instant", + "futures-bounded", + "futures-timer", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm" -version = "0.43.7" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" +checksum = "d7dd6741793d2c1fb2088f67f82cf07261f25272ebe3c0b0c311e0c6b50e851a" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", - "log", + "lru 0.12.5", "multistream-select", "once_cell", "rand 0.8.5", "smallvec", "tokio", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm-derive" -version = "0.33.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" +checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8" dependencies = [ - "heck 0.4.1", - "proc-macro-warning 0.4.2", + "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.106", @@ -7044,9 +6973,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" +checksum = "ad964f312c59dcfcac840acd8c555de8403e295d39edf96f5240048b5fcaa314" dependencies = [ "futures", "futures-timer", @@ -7054,92 +6983,80 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "log", "socket2 0.5.10", "tokio", + "tracing", ] [[package]] name = "libp2p-tls" -version = "0.2.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" +checksum = "47b23dddc2b9c355f73c1e36eb0c3ae86f7dc964a3715f0731cfad352db4d847" dependencies = [ "futures", "futures-rustls", "libp2p-core", "libp2p-identity", "rcgen", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.14", + "rustls", "rustls-webpki 0.101.7", "thiserror 1.0.69", - "x509-parser 0.15.1", + "x509-parser 0.16.0", "yasna", ] [[package]] name = "libp2p-upnp" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1" +checksum = "01bf2d1b772bd3abca049214a3304615e6a36fa6ffc742bdd1ba774486200b8f" dependencies = [ "futures", "futures-timer", "igd-next", "libp2p-core", "libp2p-swarm", - "log", "tokio", + "tracing", "void", ] -[[package]] -name = "libp2p-wasm-ext" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "send_wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - [[package]] name = "libp2p-websocket" -version = "0.42.2" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" +checksum = "888b2ff2e5d8dcef97283daab35ad1043d18952b65e05279eecbe02af4c6e347" dependencies = [ "either", "futures", "futures-rustls", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.5", "pin-project-lite", "rw-stream-sink", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", + "tracing", "url", "webpki-roots 0.25.4", ] [[package]] name = "libp2p-yamux" -version = "0.44.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" +checksum = "788b61c80789dba9760d8c669a5bedb642c8267555c803fabd8396e4ca5c5882" dependencies = [ + "either", "futures", "libp2p-core", - "log", "thiserror 1.0.69", + "tracing", "yamux 0.12.1", + "yamux 0.13.7", ] [[package]] @@ -7316,10 +7233,10 @@ dependencies = [ "ed25519-dalek", "futures", "futures-timer", - "hickory-resolver", + "hickory-resolver 0.25.2", "indexmap 2.11.4", "libc", - "mockall 0.13.1", + "mockall", "multiaddr 0.17.1", "multihash 0.17.0", "network-interface", @@ -7524,12 +7441,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matchit" version = "0.8.4" @@ -7609,15 +7520,15 @@ dependencies = [ [[package]] name = "merkleized-metadata" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c592efaf1b3250df14c8f3c2d952233f0302bb81d3586db2f303666c1cd607" +checksum = "dc9b7ac0ce054412d9a85ff39bac27aec27483b06cef8756b57d9c29d448d081" dependencies = [ "array-bytes", "blake3", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "parity-scale-codec", - "scale-decode", + "scale-decode 0.13.1", "scale-info", ] @@ -7723,8 +7634,8 @@ dependencies = [ [[package]] name = "mmr-gadget" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", "log", @@ -7742,10 +7653,10 @@ dependencies = [ [[package]] name = "mmr-rpc" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "serde", "sp-api", @@ -7755,21 +7666,6 @@ dependencies = [ "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 0.11.4", - "predicates 2.1.5", - "predicates-tree", -] - [[package]] name = "mockall" version = "0.13.1" @@ -7779,23 +7675,11 @@ dependencies = [ "cfg-if", "downcast", "fragile", - "mockall_derive 0.13.1", - "predicates 3.1.3", + "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 = "mockall_derive" version = "0.13.1" @@ -7843,6 +7727,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + [[package]] name = "multiaddr" version = "0.17.1" @@ -8097,12 +7987,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - [[package]] name = "nodrop" version = "0.1.14" @@ -8137,12 +8021,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - [[package]] name = "ntapi" version = "0.4.2" @@ -8200,6 +8078,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "num-format" version = "0.4.4" @@ -8316,9 +8205,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -8334,11 +8223,11 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.6.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", ] [[package]] @@ -8482,8 +8371,8 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8500,8 +8389,8 @@ dependencies = [ [[package]] name = "pallet-asset-rate" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8514,8 +8403,8 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8529,8 +8418,8 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8542,8 +8431,8 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8565,8 +8454,8 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -8575,13 +8464,14 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", ] [[package]] name = "pallet-beefy" -version = "40.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8599,8 +8489,8 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "binary-merkle-tree", @@ -8624,8 +8514,8 @@ dependencies = [ [[package]] name = "pallet-broker" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.19.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "frame-benchmarking", @@ -8642,8 +8532,8 @@ dependencies = [ [[package]] name = "pallet-bucket-nfts" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -8661,13 +8551,12 @@ dependencies = [ "sp-core", "sp-keyring", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-collective" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -8683,8 +8572,8 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "frame-benchmarking", @@ -8699,8 +8588,8 @@ dependencies = [ [[package]] name = "pallet-cr-randomness" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "frame-system", @@ -8714,12 +8603,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-datahaven-native-transfer" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -8727,20 +8615,19 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", ] [[package]] name = "pallet-election-provider-multi-phase" -version = "38.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8761,8 +8648,8 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8775,7 +8662,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -8798,9 +8685,11 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ + "cumulus-primitives-storage-weight-reclaim", "environmental", + "ethereum", "evm", "fp-account", "fp-evm", @@ -8821,7 +8710,7 @@ dependencies = [ [[package]] name = "pallet-evm-chain-id" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "frame-support", "frame-system", @@ -8831,7 +8720,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-balances-erc20" -version = "0.26.0" +version = "0.23.0" dependencies = [ "fp-evm", "frame-support", @@ -8849,12 +8738,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-batch" -version = "0.26.0" +version = "0.23.0" dependencies = [ "evm", "fp-evm", @@ -8870,13 +8758,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-blake2" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", ] @@ -8884,7 +8771,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-bn128" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "sp-core", @@ -8893,7 +8780,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-call-permit" -version = "0.26.0" +version = "0.23.0" dependencies = [ "evm", "fp-evm", @@ -8910,7 +8797,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -8933,7 +8819,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -8954,12 +8839,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-datahaven-native-transfer" -version = "0.26.0" +version = "0.23.0" dependencies = [ "evm", "fp-evm", @@ -8973,18 +8857,17 @@ dependencies = [ "parity-scale-codec", "precompile-utils", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-file-system" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "fp-account", "fp-evm", @@ -8998,7 +8881,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -9015,16 +8897,16 @@ dependencies = [ "parity-scale-codec", "precompile-utils", "scale-info", + "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-modexp" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "num", @@ -9047,12 +8929,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-proxy" -version = "0.26.0" +version = "0.23.0" dependencies = [ "evm", "fp-evm", @@ -9068,7 +8949,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -9091,12 +8971,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-registry" -version = "0.26.0" +version = "0.23.0" dependencies = [ "fp-evm", "frame-support", @@ -9115,7 +8994,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-sha3fips" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "tiny-keccak", @@ -9124,7 +9003,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "ripemd", @@ -9146,8 +9025,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", @@ -9156,7 +9035,7 @@ dependencies = [ [[package]] name = "pallet-external-validators" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9170,17 +9049,16 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-external-validators-rewards" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9193,19 +9071,18 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-fast-unstake" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9222,8 +9099,8 @@ dependencies = [ [[package]] name = "pallet-file-system" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9244,28 +9121,26 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", "sp-trie", "sp-weights", ] [[package]] name = "pallet-file-system-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-grandpa" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9286,7 +9161,7 @@ dependencies = [ [[package]] name = "pallet-grandpa-benchmarking" -version = "0.26.0" +version = "0.23.0" dependencies = [ "finality-grandpa", "frame-benchmarking", @@ -9300,13 +9175,12 @@ dependencies = [ "sp-core", "sp-runtime", "sp-session", - "sp-std", ] [[package]] name = "pallet-identity" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9321,8 +9195,8 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9340,8 +9214,8 @@ dependencies = [ [[package]] name = "pallet-message-queue" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "frame-benchmarking", @@ -9359,10 +9233,9 @@ dependencies = [ [[package]] name = "pallet-migrations" -version = "9.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "10.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "cfg-if", "docify", "frame-benchmarking", "frame-support", @@ -9370,32 +9243,29 @@ dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", "sp-core", + "sp-io", "sp-runtime", ] [[package]] name = "pallet-mmr" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", "log", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-core", - "sp-io", "sp-mmr-primitives", - "sp-runtime", ] [[package]] name = "pallet-multisig" -version = "39.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -9405,8 +9275,8 @@ dependencies = [ [[package]] name = "pallet-nfts" -version = "33.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "34.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9422,13 +9292,12 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", "parity-scale-codec", "scale-info", "serde", @@ -9438,7 +9307,7 @@ dependencies = [ [[package]] name = "pallet-outbound-commitment-store" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-support", "frame-system", @@ -9449,8 +9318,8 @@ dependencies = [ [[package]] name = "pallet-parameters" -version = "0.10.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.11.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9466,8 +9335,8 @@ dependencies = [ [[package]] name = "pallet-payment-streams" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9486,20 +9355,19 @@ dependencies = [ [[package]] name = "pallet-payment-streams-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-preimage" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9514,8 +9382,8 @@ dependencies = [ [[package]] name = "pallet-proofs-dealer" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9533,27 +9401,25 @@ dependencies = [ "sp-core", "sp-keyring", "sp-runtime", - "sp-std", "sp-trie", "sp-weights", ] [[package]] name = "pallet-proofs-dealer-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-proxy" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -9562,7 +9428,7 @@ dependencies = [ [[package]] name = "pallet-proxy-genesis-companion" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-support", "frame-system", @@ -9574,13 +9440,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-randomness" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9594,13 +9459,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-referenda" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "frame-benchmarking", @@ -9615,10 +9479,94 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-revive" +version = "0.6.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "alloy-core", + "derive_more 0.99.20", + "environmental", + "ethabi-decode", + "ethereum-types", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "humantime-serde", + "impl-trait-for-tuples", + "log", + "num-bigint", + "num-integer", + "num-traits", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "pallet-transaction-payment", + "parity-scale-codec", + "paste", + "polkavm 0.21.0", + "polkavm-common 0.21.0", + "rand 0.8.5", + "rand_pcg", + "ripemd", + "rlp 0.6.1", + "scale-info", + "serde", + "sp-api", + "sp-arithmetic", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "substrate-bn", + "subxt-signer", +] + +[[package]] +name = "pallet-revive-fixtures" +version = "0.3.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "anyhow", + "cargo_metadata", + "pallet-revive-uapi", + "polkavm-linker 0.21.0", + "sp-core", + "sp-io", + "toml 0.8.23", +] + +[[package]] +name = "pallet-revive-proc-macro" +version = "0.3.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pallet-revive-uapi" +version = "0.4.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "bitflags 1.3.2", + "pallet-revive-proc-macro", + "parity-scale-codec", + "polkavm-derive 0.21.0", + "scale-info", +] + [[package]] name = "pallet-safe-mode" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "21.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9635,8 +9583,8 @@ dependencies = [ [[package]] name = "pallet-scheduler" -version = "40.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9652,8 +9600,8 @@ dependencies = [ [[package]] name = "pallet-session" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -9673,7 +9621,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9681,13 +9629,12 @@ dependencies = [ "pallet-session", "parity-scale-codec", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-staking" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9708,8 +9655,8 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "sp-arithmetic", @@ -9717,8 +9664,8 @@ dependencies = [ [[package]] name = "pallet-storage-providers" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9733,26 +9680,24 @@ dependencies = [ "shp-traits", "sp-arithmetic", "sp-runtime", - "sp-std", "sp-trie", ] [[package]] name = "pallet-storage-providers-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-sudo" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9766,8 +9711,8 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9785,8 +9730,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9801,10 +9746,10 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "sp-api", @@ -9817,8 +9762,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -9829,8 +9774,8 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9848,25 +9793,22 @@ dependencies = [ [[package]] name = "pallet-tx-pause" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "21.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", - "frame-benchmarking", - "frame-support", - "frame-system", "pallet-balances", "pallet-proxy", "pallet-utility", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-runtime", ] [[package]] name = "pallet-utility" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9880,8 +9822,8 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9894,28 +9836,27 @@ dependencies = [ [[package]] name = "pallet-whitelist" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-api", - "sp-runtime", ] [[package]] name = "pallet-xcm" -version = "18.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.2.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "frame-benchmarking", "frame-support", "frame-system", + "hex-literal 0.4.1", "pallet-balances", + "pallet-revive", + "pallet-timestamp", "parity-scale-codec", "scale-info", "serde", @@ -9935,7 +9876,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.13.0", "rand 0.8.5", "rand_core 0.6.4", "serde", @@ -10088,6 +10029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", + "hmac 0.12.1", "password-hash", ] @@ -10099,11 +10041,12 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.1" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", + "serde_core", ] [[package]] @@ -10264,9 +10207,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-ckb-merkle-mountain-range" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" +checksum = "221c71b432b38e494a0fdedb5f720e4cb974edf03a0af09e5b2238dbac7e6947" dependencies = [ "cfg-if", "itertools 0.10.5", @@ -10274,8 +10217,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -10285,13 +10228,12 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", "futures", "futures-timer", - "log", "parity-scale-codec", "polkadot-primitives", "prioritized-metered-channel", @@ -10299,13 +10241,12 @@ dependencies = [ "sc-service", "sc-tracing", "substrate-prometheus-endpoint", - "tracing-gum", ] [[package]] name = "polkadot-node-network-protocol" -version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -10329,8 +10270,8 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "17.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "bounded-vec", @@ -10345,21 +10286,18 @@ dependencies = [ "sp-application-crypto", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", "sp-keystore", "sp-maybe-compressed-blob", - "sp-runtime", "thiserror 1.0.69", "zstd 0.12.4", ] [[package]] name = "polkadot-node-subsystem-types" -version = "21.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", - "bitvec", "derive_more 0.99.20", "fatality", "futures", @@ -10384,21 +10322,19 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "futures-timer", "orchestra", - "parking_lot 0.12.5", "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", @@ -10406,8 +10342,8 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "derive_more 0.99.20", @@ -10422,8 +10358,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "17.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "18.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "hex-literal 0.4.1", @@ -10450,8 +10386,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "frame-benchmarking", @@ -10482,7 +10418,6 @@ dependencies = [ "rustc-hex", "scale-info", "serde", - "serde_derive", "slot-range-helper", "sp-api", "sp-core", @@ -10501,8 +10436,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", "frame-benchmarking", @@ -10513,12 +10448,11 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.2.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitflags 1.3.2", "bitvec", - "derive_more 0.99.20", "frame-benchmarking", "frame-support", "frame-system", @@ -10534,7 +10468,6 @@ dependencies = [ "pallet-session", "pallet-staking", "pallet-timestamp", - "pallet-vesting", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain-primitives", @@ -10560,10 +10493,19 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "polkadot-sdk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "polkadot-sdk-frame" -version = "0.8.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.9.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -10576,6 +10518,7 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "serde", "sp-api", "sp-arithmetic", "sp-block-builder", @@ -10596,62 +10539,116 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-primitives", - "sp-core", "tracing-gum", ] [[package]] name = "polkavm" -version = "0.9.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" +checksum = "dd044ab1d3b11567ab6b98ca71259a992b4034220d5972988a0e96518e5d343d" dependencies = [ "libc", "log", - "polkavm-assembler", - "polkavm-common", - "polkavm-linux-raw", + "polkavm-assembler 0.18.0", + "polkavm-common 0.18.0", + "polkavm-linux-raw 0.18.0", +] + +[[package]] +name = "polkavm" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd34e2f74206fff33482ae1718e275f11365ef8c4de7f0e69217f8845303867" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.21.0", + "polkavm-common 0.21.0", + "polkavm-linux-raw 0.21.0", ] [[package]] name = "polkavm-assembler" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +checksum = "eaad38dc420bfed79e6f731471c973ce5ff5e47ab403e63cf40358fef8a6368f" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-assembler" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f512bc80cb10439391a7c13a9eb2d37cf66b7305e7df0a06d662eff4f5b07625" dependencies = [ "log", ] [[package]] name = "polkavm-common" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" dependencies = [ "log", + "polkavm-assembler 0.18.0", +] + +[[package]] +name = "polkavm-common" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c16b809cfd398f861261c045a8745e6c78b71ea7e0d3ef6f7cc553eb27bc17e" +dependencies = [ + "blake3", + "log", + "polkavm-assembler 0.21.0", ] [[package]] name = "polkavm-derive" -version = "0.9.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" dependencies = [ - "polkavm-derive-impl-macro", + "polkavm-derive-impl-macro 0.18.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47239245f87329541932c0d7fec750a66a75b13aa87dfe4fbfd637bab86ad387" +dependencies = [ + "polkavm-derive-impl-macro 0.21.0", ] [[package]] name = "polkavm-derive-impl" -version = "0.9.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" dependencies = [ - "polkavm-common", + "polkavm-common 0.18.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24fd6c6215450c3e57511df5c38a82eb4bde208de15ee15046ac33852f3c3eaa" +dependencies = [ + "polkavm-common 0.21.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10659,34 +10656,67 @@ dependencies = [ [[package]] name = "polkavm-derive-impl-macro" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" dependencies = [ - "polkavm-derive-impl", + "polkavm-derive-impl 0.18.1", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36837f6b7edfd6f4498f8d25d81da16cf03bd6992c3e56f3d477dfc90f4fefca" +dependencies = [ + "polkavm-derive-impl 0.21.0", "syn 2.0.106", ] [[package]] name = "polkavm-linker" -version = "0.9.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" dependencies = [ - "gimli 0.28.1", + "dirs", + "gimli 0.31.1", "hashbrown 0.14.5", "log", - "object 0.32.2", - "polkavm-common", + "object 0.36.7", + "polkavm-common 0.18.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bc764986c4a63f9ab9890c3f4eb9b4c13b6ff80d79685bd48ade147234aab4" +dependencies = [ + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common 0.21.0", "regalloc2 0.9.3", "rustc-demangle", ] [[package]] name = "polkavm-linux-raw" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" +checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" + +[[package]] +name = "polkavm-linux-raw" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be6cd1d48c5e7814d287a3e12a339386a5dfa2f3ac72f932335f4cf56467f1b3" [[package]] name = "polling" @@ -10809,7 +10839,7 @@ dependencies = [ [[package]] name = "precompile-utils" version = "0.1.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "derive_more 1.0.0", "environmental", @@ -10838,31 +10868,17 @@ dependencies = [ [[package]] name = "precompile-utils-macro" version = "0.1.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "case", "num_enum", "prettyplease", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools 0.10.5", - "normalize-line-endings", - "predicates-core", - "regex", -] - [[package]] name = "predicates" version = "3.1.3" @@ -10917,8 +10933,6 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec 0.6.0", - "impl-serde 0.4.0", - "scale-info", "uint 0.9.5", ] @@ -10932,7 +10946,7 @@ dependencies = [ "impl-codec 0.7.1", "impl-num-traits", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "scale-info", "uint 0.10.0", ] @@ -11028,17 +11042,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "proc-macro-warning" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "proc-macro-warning" version = "1.84.1" @@ -11075,9 +11078,9 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.21.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", "itoa", @@ -11262,33 +11265,15 @@ dependencies = [ [[package]] name = "quick-protobuf-codec" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "quick-protobuf", "thiserror 1.0.69", - "unsigned-varint 0.7.2", -] - -[[package]] -name = "quinn" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" -dependencies = [ - "bytes", - "futures-io", - "pin-project-lite", - "quinn-proto 0.10.6", - "quinn-udp 0.4.1", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "thiserror 1.0.69", - "tokio", - "tracing", + "unsigned-varint 0.8.0", ] [[package]] @@ -11299,11 +11284,12 @@ checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases 0.2.1", + "futures-io", "pin-project-lite", - "quinn-proto 0.11.13", - "quinn-udp 0.5.14", + "quinn-proto", + "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls", "socket2 0.6.0", "thiserror 2.0.17", "tokio", @@ -11311,23 +11297,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "quinn-proto" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" -dependencies = [ - "bytes", - "rand 0.8.5", - "ring 0.16.20", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "slab", - "thiserror 1.0.69", - "tinyvec", - "tracing", -] - [[package]] name = "quinn-proto" version = "0.11.13" @@ -11340,7 +11309,7 @@ dependencies = [ "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -11349,19 +11318,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "quinn-udp" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" -dependencies = [ - "bytes", - "libc", - "socket2 0.5.10", - "tracing", - "windows-sys 0.48.0", -] - [[package]] name = "quinn-udp" version = "0.5.14" @@ -11522,9 +11478,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ "pem", "ring 0.16.20", @@ -11532,22 +11488,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "reconnecting-jsonrpsee-ws-client" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" -dependencies = [ - "cfg_aliases 0.2.1", - "finito", - "futures", - "jsonrpsee 0.23.2", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -11680,21 +11620,21 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.7.0", - "hyper-rustls 0.27.7", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", - "quinn 0.11.9", - "rustls 0.23.32", + "quinn", + "rustls", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tower 0.5.2", "tower-http 0.6.6", @@ -11960,32 +11900,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - [[package]] name = "rustls" version = "0.23.32" @@ -12001,31 +11915,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework 2.11.1", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -12038,15 +11927,6 @@ dependencies = [ "security-framework 3.5.1", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -12066,27 +11946,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" -dependencies = [ - "core-foundation 0.9.4", - "core-foundation-sys", - "jni 0.19.0", - "log", - "once_cell", - "rustls 0.23.32", - "rustls-native-certs 0.7.3", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", - "security-framework 2.11.1", - "security-framework-sys", - "webpki-roots 0.26.11", - "winapi", -] - [[package]] name = "rustls-platform-verifier" version = "0.5.3" @@ -12095,11 +11954,11 @@ checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni 0.21.1", + "jni", "log", "once_cell", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki 0.103.7", "security-framework 3.5.1", @@ -12124,17 +11983,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring 0.17.14", - "rustls-pki-types", - "untrusted 0.9.0", -] - [[package]] name = "rustls-webpki" version = "0.103.7" @@ -12166,13 +12014,12 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" dependencies = [ "byteorder", "derive_more 0.99.20", - "twox-hash", ] [[package]] @@ -12201,6 +12048,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "same-file" version = "1.0.6" @@ -12212,8 +12068,8 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "31.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "sp-core", @@ -12223,17 +12079,15 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "futures-timer", "ip_network", - "libp2p", "linked_hash_set", "log", - "multihash 0.19.3", "parity-scale-codec", "prost 0.12.6", "prost-build 0.13.5", @@ -12253,11 +12107,10 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "futures-timer", "log", "parity-scale-codec", "sc-block-builder", @@ -12275,8 +12128,8 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.43.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "sp-api", @@ -12290,12 +12143,11 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "41.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "docify", - "log", "memmap2 0.9.8", "parity-scale-codec", "sc-chain-spec-derive", @@ -12307,7 +12159,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -12318,7 +12170,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -12328,8 +12180,8 @@ dependencies = [ [[package]] name = "sc-cli" -version = "0.50.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.52.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "chrono", @@ -12370,8 +12222,8 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "fnv", "futures", @@ -12389,7 +12241,6 @@ dependencies = [ "sp-externalities", "sp-runtime", "sp-state-machine", - "sp-statement-store", "sp-storage", "sp-trie", "substrate-prometheus-endpoint", @@ -12397,8 +12248,8 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.45.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "kvdb", @@ -12423,19 +12274,18 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "log", - "mockall 0.11.4", + "mockall", "parking_lot 0.12.5", "sc-client-api", "sc-network-types", "sc-utils", "serde", - "sp-api", "sp-blockchain", "sp-consensus", "sp-core", @@ -12447,8 +12297,8 @@ dependencies = [ [[package]] name = "sc-consensus-aura" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -12476,8 +12326,8 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "fork-tree", @@ -12502,7 +12352,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -12512,13 +12362,12 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", - "fnv", "futures", "log", "parity-scale-codec", @@ -12537,7 +12386,6 @@ dependencies = [ "sp-consensus", "sp-consensus-beefy", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -12548,11 +12396,11 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -12568,8 +12416,8 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "fork-tree", "parity-scale-codec", @@ -12581,8 +12429,8 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "array-bytes", @@ -12616,7 +12464,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -12625,14 +12473,14 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" -version = "0.49.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "async-trait", "futures", "futures-timer", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", @@ -12660,8 +12508,8 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -12683,8 +12531,8 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -12706,10 +12554,10 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "polkavm", + "polkavm 0.18.0", "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", @@ -12719,23 +12567,21 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", - "polkavm", + "polkavm 0.18.0", "sc-executor-common", "sp-wasm-interface", ] [[package]] name = "sc-executor-wasmtime" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "anyhow", - "cfg-if", - "libc", "log", "parking_lot 0.12.5", "rustix 0.36.17", @@ -12748,8 +12594,8 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "console", "futures", @@ -12757,7 +12603,6 @@ dependencies = [ "log", "sc-client-api", "sc-network", - "sc-network-common", "sc-network-sync", "sp-blockchain", "sp-runtime", @@ -12765,8 +12610,8 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "35.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "parking_lot 0.12.5", @@ -12779,8 +12624,8 @@ dependencies = [ [[package]] name = "sc-mixnet" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -12790,7 +12635,6 @@ dependencies = [ "futures-timer", "log", "mixnet", - "multiaddr 0.18.2", "parity-scale-codec", "parking_lot 0.12.5", "sc-client-api", @@ -12808,13 +12652,13 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.48.4" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", "cid 0.9.0", "either", @@ -12826,8 +12670,7 @@ dependencies = [ "linked_hash_set", "litep2p", "log", - "mockall 0.11.4", - "once_cell", + "mockall", "parity-scale-codec", "parking_lot 0.12.5", "partial_sort", @@ -12859,26 +12702,18 @@ dependencies = [ [[package]] name = "sc-network-common" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "async-trait", "bitflags 1.3.2", - "futures", - "libp2p-identity", "parity-scale-codec", - "prost-build 0.13.5", - "sc-consensus", - "sc-network-types", - "sp-consensus", - "sp-consensus-grandpa", "sp-runtime", ] [[package]] name = "sc-network-gossip" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "futures", @@ -12896,8 +12731,8 @@ dependencies = [ [[package]] name = "sc-network-light" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -12917,17 +12752,16 @@ dependencies = [ [[package]] name = "sc-network-sync" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", "fork-tree", "futures", - "futures-timer", "log", - "mockall 0.11.4", + "mockall", "parity-scale-codec", "prost 0.12.6", "prost-build 0.13.5", @@ -12953,8 +12787,8 @@ dependencies = [ [[package]] name = "sc-network-transactions" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "futures", @@ -12972,12 +12806,14 @@ dependencies = [ [[package]] name = "sc-network-types" -version = "0.15.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", + "bytes", "ed25519-dalek", "libp2p-identity", + "libp2p-kad", "litep2p", "log", "multiaddr 0.18.2", @@ -12989,28 +12825,25 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "array-bytes", "bytes", "fnv", "futures", "futures-timer", "http-body-util", "hyper 1.7.0", - "hyper-rustls 0.27.7", + "hyper-rustls", "hyper-util", - "log", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.5", "rand 0.8.5", - "rustls 0.23.32", + "rustls", "sc-client-api", "sc-network", - "sc-network-common", "sc-network-types", "sc-transaction-pool-api", "sc-utils", @@ -13026,8 +12859,8 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -13035,11 +12868,11 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13067,10 +12900,10 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-mixnet", @@ -13087,8 +12920,8 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -13098,7 +12931,7 @@ dependencies = [ "http-body-util", "hyper 1.7.0", "ip_network", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "sc-rpc-api", "serde", @@ -13111,15 +12944,15 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "futures", "futures-util", "hex", "itertools 0.11.0", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13136,22 +12969,38 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-version", + "substrate-prometheus-endpoint", "thiserror 1.0.69", "tokio", "tokio-stream", ] +[[package]] +name = "sc-runtime-utilities" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "parity-scale-codec", + "sc-executor", + "sc-executor-common", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-state-machine", + "sp-wasm-interface", + "thiserror 1.0.69", +] + [[package]] name = "sc-service" -version = "0.49.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "directories", "exit-future", "futures", "futures-timer", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13207,8 +13056,8 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.37.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -13218,8 +13067,8 @@ dependencies = [ [[package]] name = "sc-sysinfo" -version = "41.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "derive_more 0.99.20", "futures", @@ -13232,15 +13081,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-io", - "sp-std", ] [[package]] name = "sc-telemetry" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "28.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "chrono", "futures", @@ -13249,7 +13097,6 @@ dependencies = [ "parking_lot 0.12.5", "pin-project", "rand 0.8.5", - "sc-network", "sc-utils", "serde", "serde_json", @@ -13259,8 +13106,8 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "chrono", "console", @@ -13287,8 +13134,8 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -13298,8 +13145,8 @@ dependencies = [ [[package]] name = "sc-transaction-pool" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -13317,7 +13164,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -13325,15 +13172,17 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tokio-stream", + "tracing", ] [[package]] name = "sc-transaction-pool-api" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", + "indexmap 2.11.4", "log", "parity-scale-codec", "serde", @@ -13345,8 +13194,8 @@ dependencies = [ [[package]] name = "sc-utils" -version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "18.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-channel 1.9.0", "futures", @@ -13377,7 +13226,20 @@ checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ "derive_more 0.99.20", "parity-scale-codec", - "primitive-types 0.12.2", + "scale-bits", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-decode" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types 0.13.1", "scale-bits", "scale-decode-derive", "scale-type-resolver", @@ -13386,25 +13248,25 @@ dependencies = [ [[package]] name = "scale-decode-derive" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" +checksum = "5ed9401effa946b493f9f84dc03714cca98119b230497df6f3df6b84a2b03648" dependencies = [ - "darling 0.14.4", + "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] name = "scale-encode" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528464e6ae6c8f98e2b79633bf79ef939552e795e316579dab09c61670d56602" +checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" dependencies = [ - "derive_more 0.99.20", + "derive_more 1.0.0", "parity-scale-codec", - "primitive-types 0.12.2", + "primitive-types 0.13.1", "scale-bits", "scale-encode-derive", "scale-type-resolver", @@ -13413,11 +13275,11 @@ dependencies = [ [[package]] name = "scale-encode-derive" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef2618f123c88da9cd8853b69d766068f1eddc7692146d7dfe9b89e25ce2efd" +checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro-crate 3.4.0", "proc-macro2", "quote", @@ -13462,9 +13324,9 @@ dependencies = [ [[package]] name = "scale-typegen" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" +checksum = "0dc4c70c7fea2eef1740f0081d3fe385d8bee1eef11e9272d3bec7dc8e5438e0" dependencies = [ "proc-macro2", "quote", @@ -13475,18 +13337,17 @@ dependencies = [ [[package]] name = "scale-value" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd6ab090d823e75cfdb258aad5fe92e13f2af7d04b43a55d607d25fcc38c811" +checksum = "f5e0ef2a0ee1e02a69ada37feb87ea1616ce9808aca072befe2d3131bf28576e" dependencies = [ "base58", "blake2 0.10.6", - "derive_more 0.99.20", + "derive_more 1.0.0", "either", - "frame-metadata 15.1.0", "parity-scale-codec", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-type-resolver", @@ -13555,13 +13416,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" [[package]] -name = "sct" -version = "0.7.1" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.10.9", ] [[package]] @@ -13597,6 +13460,17 @@ dependencies = [ "secp256k1-sys 0.9.2", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes 0.14.1", + "rand 0.8.5", + "secp256k1-sys 0.10.1", +] + [[package]] name = "secp256k1-sys" version = "0.8.2" @@ -13615,6 +13489,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.8.0" @@ -13624,6 +13507,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -13634,7 +13526,6 @@ dependencies = [ "core-foundation 0.9.4", "core-foundation-sys", "libc", - "num-bigint", "security-framework-sys", ] @@ -13704,12 +13595,6 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" version = "1.0.228" @@ -13823,19 +13708,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - [[package]] name = "sha1" version = "0.10.6" @@ -13902,8 +13774,8 @@ dependencies = [ [[package]] name = "shc-actors-derive" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "once_cell", "proc-macro2", @@ -13915,8 +13787,8 @@ dependencies = [ [[package]] name = "shc-actors-framework" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "bincode", @@ -13934,8 +13806,8 @@ dependencies = [ [[package]] name = "shc-blockchain-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -13990,8 +13862,8 @@ dependencies = [ [[package]] name = "shc-blockchain-service-db" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "chrono", "diesel", @@ -14000,9 +13872,9 @@ dependencies = [ "futures", "hex", "log", - "rustls 0.23.32", - "rustls-pemfile 2.2.0", - "rustls-platform-verifier 0.5.3", + "rustls", + "rustls-pemfile", + "rustls-platform-verifier", "sc-transaction-pool-api", "serde", "serde_json", @@ -14014,8 +13886,8 @@ dependencies = [ [[package]] name = "shc-client" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14031,7 +13903,7 @@ dependencies = [ "frame-system", "futures", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "kvdb", "kvdb-rocksdb", "lazy_static", @@ -14089,14 +13961,15 @@ dependencies = [ [[package]] name = "shc-common" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "bigdecimal", "bincode", "bytes", "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", "cumulus-primitives-storage-weight-reclaim", "fp-account", "frame-benchmarking", @@ -14145,17 +14018,16 @@ dependencies = [ "sp-keystore", "sp-rpc", "sp-runtime", - "sp-std", "sp-trie", "substrate-frame-rpc-system", "thiserror 1.0.69", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-file-manager" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "bincode", "hash-db", @@ -14174,13 +14046,13 @@ dependencies = [ "sp-trie", "strum 0.26.3", "thiserror 1.0.69", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-file-transfer-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14210,8 +14082,8 @@ dependencies = [ [[package]] name = "shc-fisherman-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "async-trait", "diesel", @@ -14241,8 +14113,8 @@ dependencies = [ [[package]] name = "shc-forest-manager" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "async-trait", @@ -14262,13 +14134,13 @@ dependencies = [ "sp-trie", "thiserror 1.0.69", "tokio", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-indexer-db" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "bigdecimal", "chrono", @@ -14278,9 +14150,9 @@ dependencies = [ "futures", "hex", "log", - "rustls 0.23.32", - "rustls-pemfile 2.2.0", - "rustls-platform-verifier 0.5.3", + "rustls", + "rustls-pemfile", + "rustls-platform-verifier", "sc-network", "serde", "serde_json", @@ -14295,8 +14167,8 @@ dependencies = [ [[package]] name = "shc-indexer-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14346,8 +14218,8 @@ dependencies = [ [[package]] name = "shc-rpc" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "array-bytes", "async-trait", @@ -14355,7 +14227,7 @@ dependencies = [ "futures", "futures-util", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "mime_guess", "pallet-file-system-runtime-api", @@ -14368,6 +14240,7 @@ dependencies = [ "sc-rpc-api", "serde", "shc-actors-framework", + "shc-blockchain-service", "shc-common", "shc-file-manager", "shc-file-transfer-service", @@ -14392,8 +14265,8 @@ dependencies = [ [[package]] name = "shc-telemetry" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -14409,8 +14282,8 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "shp-constants" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-core", "sp-runtime", @@ -14418,8 +14291,8 @@ dependencies = [ [[package]] name = "shp-data-price-updater" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14428,13 +14301,12 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "shp-file-key-verifier" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14444,15 +14316,14 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", "sp-trie", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shp-file-metadata" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "hex", "num-bigint", @@ -14467,8 +14338,8 @@ dependencies = [ [[package]] name = "shp-forest-verifier" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14477,23 +14348,22 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-trie", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shp-opaque" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-runtime", ] [[package]] name = "shp-session-keys" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "async-trait", "parity-scale-codec", @@ -14502,27 +14372,25 @@ dependencies = [ "sp-inherents", "sp-keystore", "sp-runtime", - "sp-std", ] [[package]] name = "shp-traits" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", "sp-trie", ] [[package]] name = "shp-treasury-funding" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "log", "shp-traits", @@ -14532,21 +14400,20 @@ dependencies = [ [[package]] name = "shp-tx-implicits-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "shp-types" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-core", "sp-runtime", @@ -14646,8 +14513,8 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumn", "parity-scale-codec", @@ -14680,14 +14547,14 @@ dependencies = [ [[package]] name = "smoldot" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" +checksum = "966e72d77a3b2171bb7461d0cb91f43670c63558c62d7cf42809cae6c8b6b818" dependencies = [ "arrayvec 0.7.6", "async-lock", "atomic-take", - "base64 0.21.7", + "base64 0.22.1", "bip39", "blake2-rfc", "bs58", @@ -14696,18 +14563,17 @@ dependencies = [ "derive_more 0.99.20", "ed25519-zebra", "either", - "event-listener 4.0.3", + "event-listener 5.4.1", "fnv", "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", "hmac 0.12.1", - "itertools 0.12.1", + "itertools 0.13.0", "libm", "libsecp256k1", "merlin", - "no-std-net", "nom", "num-bigint", "num-rational", @@ -14726,7 +14592,7 @@ dependencies = [ "siphasher 1.0.1", "slab", "smallvec", - "soketto 0.7.1", + "soketto", "twox-hash", "wasmi", "x25519-dalek", @@ -14735,27 +14601,27 @@ dependencies = [ [[package]] name = "smoldot-light" -version = "0.14.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +checksum = "2a33b06891f687909632ce6a4e3fd7677b24df930365af3d0bcb078310129f3f" dependencies = [ "async-channel 2.5.0", "async-lock", - "base64 0.21.7", + "base64 0.22.1", "blake2-rfc", + "bs58", "derive_more 0.99.20", "either", - "event-listener 4.0.3", + "event-listener 5.4.1", "fnv", "futures-channel", "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", - "itertools 0.12.1", + "itertools 0.13.0", "log", "lru 0.12.5", - "no-std-net", "parking_lot 0.12.5", "pin-project", "rand 0.8.5", @@ -14804,8 +14670,8 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.12.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "byte-slice-cast", "frame-support", @@ -14814,7 +14680,7 @@ dependencies = [ "rlp 0.6.1", "scale-info", "serde", - "snowbridge-ethereum 0.11.0", + "snowbridge-ethereum 0.12.0", "snowbridge-milagro-bls", "sp-core", "sp-io", @@ -14826,7 +14692,7 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.26.0" +version = "0.23.0" dependencies = [ "byte-slice-cast", "frame-support", @@ -14841,25 +14707,25 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "ssz_rs", "ssz_rs_derive", ] [[package]] name = "snowbridge-core" -version = "0.12.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "bp-relayers", "ethabi-decode", "frame-support", "frame-system", "hex-literal 0.4.1", + "log", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", "serde", - "snowbridge-beacon-primitives 0.12.1", "sp-arithmetic", "sp-core", "sp-io", @@ -14867,11 +14733,12 @@ dependencies = [ "sp-std", "staging-xcm", "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "snowbridge-core" -version = "0.26.0" +version = "0.23.0" dependencies = [ "bp-relayers", "ethabi-decode", @@ -14888,7 +14755,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -14912,13 +14778,12 @@ dependencies = [ "serde_json", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "snowbridge-ethereum" -version = "0.11.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ethabi-decode", "ethbloom", @@ -14948,13 +14813,12 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", - "snowbridge-verification-primitives", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", + "snowbridge-verification-primitives 0.23.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -14962,7 +14826,18 @@ dependencies = [ [[package]] name = "snowbridge-merkle-tree" -version = "0.26.0" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "snowbridge-merkle-tree" +version = "0.23.0" dependencies = [ "array-bytes", "hex", @@ -14970,7 +14845,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-runtime", "sp-tracing", ] @@ -14990,33 +14865,22 @@ dependencies = [ "zeroize", ] -[[package]] -name = "snowbridge-outbound-queue-merkle-tree" -version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", -] - [[package]] name = "snowbridge-outbound-queue-primitives" -version = "0.26.0" +version = "0.2.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "alloy-core", "ethabi-decode", "frame-support", "frame-system", - "hex", - "hex-literal 0.3.4", + "hex-literal 0.4.1", "log", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-verification-primitives", + "snowbridge-core 0.13.2", + "snowbridge-verification-primitives 0.2.0", "sp-arithmetic", "sp-core", "sp-io", @@ -15027,24 +14891,48 @@ dependencies = [ "staging-xcm-executor", ] +[[package]] +name = "snowbridge-outbound-queue-primitives" +version = "0.23.0" +dependencies = [ + "alloy-core", + "ethabi-decode", + "frame-support", + "frame-system", + "hex", + "hex-literal 0.3.4", + "log", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "snowbridge-core 0.23.0", + "snowbridge-verification-primitives 0.23.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + [[package]] name = "snowbridge-outbound-queue-v2-runtime-api" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-merkle-tree 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-api", - "sp-std", "staging-xcm", ] [[package]] name = "snowbridge-pallet-ethereum-client" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15057,15 +14945,14 @@ dependencies = [ "scale-info", "serde", "serde_json", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-ethereum 0.3.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client-fixtures", "sp-core", "sp-io", "sp-runtime", - "sp-std", "static_assertions", ] @@ -15074,16 +14961,15 @@ name = "snowbridge-pallet-ethereum-client-fixtures" version = "0.9.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] name = "snowbridge-pallet-inbound-queue-v2" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "bp-relayers", @@ -15097,8 +14983,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-inbound-queue-v2-fixtures", @@ -15107,7 +14993,6 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15119,19 +15004,18 @@ name = "snowbridge-pallet-inbound-queue-v2-fixtures" version = "0.10.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] name = "snowbridge-pallet-outbound-queue" -version = "0.12.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "bridge-hub-common 0.12.0", + "bridge-hub-common 0.13.1 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "ethabi-decode", "frame-benchmarking", "frame-support", @@ -15139,8 +15023,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-core 0.12.2", - "snowbridge-outbound-queue-merkle-tree", + "snowbridge-core 0.13.2", + "snowbridge-merkle-tree 0.2.0", + "snowbridge-outbound-queue-primitives 0.2.2", "sp-arithmetic", "sp-core", "sp-io", @@ -15150,7 +15035,7 @@ dependencies = [ [[package]] name = "snowbridge-pallet-outbound-queue-v2" -version = "0.26.0" +version = "0.23.0" dependencies = [ "alloy-core", "bp-relayers", @@ -15164,18 +15049,17 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.23.0", + "snowbridge-core 0.23.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", - "snowbridge-verification-primitives", + "snowbridge-merkle-tree 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-verification-primitives 0.23.0", "sp-arithmetic", "sp-core", "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15196,20 +15080,19 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "snowbridge-pallet-outbound-queue", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-executor", ] [[package]] name = "snowbridge-pallet-system-v2" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15221,8 +15104,8 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.23.0", + "snowbridge-outbound-queue-primitives 0.23.0", "snowbridge-pallet-outbound-queue-v2", "snowbridge-pallet-system", "snowbridge-test-utils", @@ -15230,25 +15113,23 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-executor", ] [[package]] name = "snowbridge-system-v2-runtime-api" -version = "0.26.0" +version = "0.23.0" dependencies = [ "parity-scale-codec", - "snowbridge-core 0.26.0", + "snowbridge-core 0.23.0", "sp-api", - "sp-std", "staging-xcm", ] [[package]] name = "snowbridge-test-utils" -version = "0.26.0" +version = "0.23.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15258,9 +15139,8 @@ dependencies = [ "pallet-xcm", "parity-scale-codec", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.23.0", "sp-core", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15268,24 +15148,26 @@ dependencies = [ [[package]] name = "snowbridge-verification-primitives" -version = "0.26.0" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.26.0", + "snowbridge-beacon-primitives 0.13.1", "sp-core", "sp-std", ] [[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +name = "snowbridge-verification-primitives" +version = "0.23.0" dependencies = [ - "libc", - "winapi", + "frame-support", + "parity-scale-codec", + "scale-info", + "snowbridge-beacon-primitives 0.23.0", + "sp-core", ] [[package]] @@ -15308,21 +15190,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "futures", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - [[package]] name = "soketto" version = "0.8.1" @@ -15341,8 +15208,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "hash-db", @@ -15363,8 +15230,8 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "blake2 0.10.6", @@ -15377,8 +15244,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15389,8 +15256,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "26.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "integer-sqrt", @@ -15403,8 +15270,8 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15415,8 +15282,8 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-inherents", @@ -15425,8 +15292,8 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", "parity-scale-codec", @@ -15444,13 +15311,12 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "log", - "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -15459,8 +15325,8 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15475,8 +15341,8 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15493,8 +15359,8 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "24.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15502,7 +15368,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-io", "sp-keystore", "sp-mmr-primitives", @@ -15513,8 +15379,8 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "finality-grandpa", "log", @@ -15530,8 +15396,8 @@ dependencies = [ [[package]] name = "sp-consensus-slots" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15541,9 +15407,10 @@ dependencies = [ [[package]] name = "sp-core" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "ark-vrf", "array-bytes", "bitflags 1.3.2", "blake2 0.10.6", @@ -15554,7 +15421,7 @@ dependencies = [ "futures", "hash-db", "hash256-std-hasher", - "impl-serde 0.5.0", + "impl-serde", "itertools 0.11.0", "k256", "libsecp256k1", @@ -15569,9 +15436,9 @@ dependencies = [ "scale-info", "schnorrkel", "secp256k1 0.28.2", - "secrecy", + "secrecy 0.8.0", "serde", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -15602,7 +15469,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "blake2b_simd", "byteorder", @@ -15615,17 +15482,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "kvdb", "parking_lot 0.12.5", @@ -15634,7 +15501,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro2", "quote", @@ -15644,7 +15511,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "parity-scale-codec", @@ -15653,8 +15520,8 @@ dependencies = [ [[package]] name = "sp-genesis-builder" -version = "0.16.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15665,8 +15532,8 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -15678,8 +15545,8 @@ dependencies = [ [[package]] name = "sp-io" -version = "39.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bytes", "docify", @@ -15687,11 +15554,11 @@ dependencies = [ "libsecp256k1", "log", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.18.0", "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -15704,8 +15571,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "40.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-core", "sp-runtime", @@ -15714,8 +15581,8 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -15726,7 +15593,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -15734,18 +15601,18 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "parity-scale-codec", "scale-info", ] [[package]] name = "sp-mixnet" -version = "0.13.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15755,8 +15622,8 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -15772,8 +15639,8 @@ dependencies = [ [[package]] name = "sp-npos-elections" -version = "35.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15785,8 +15652,8 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-core", @@ -15795,8 +15662,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "13.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "backtrace", "regex", @@ -15804,8 +15671,8 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "33.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -15814,8 +15681,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "binary-merkle-tree", "docify", @@ -15843,13 +15710,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.18.0", "primitive-types 0.13.1", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -15863,7 +15730,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "expander", @@ -15875,8 +15742,8 @@ dependencies = [ [[package]] name = "sp-session" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "38.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15889,8 +15756,8 @@ dependencies = [ [[package]] name = "sp-staking" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -15902,8 +15769,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "log", @@ -15917,13 +15784,13 @@ dependencies = [ "sp-trie", "thiserror 1.0.69", "tracing", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "sp-statement-store" -version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -15936,7 +15803,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -15947,14 +15814,14 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "ref-cast", "serde", @@ -15963,8 +15830,8 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15975,8 +15842,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "17.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "tracing", @@ -15986,8 +15853,8 @@ dependencies = [ [[package]] name = "sp-transaction-pool" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-runtime", @@ -15995,8 +15862,8 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -16009,8 +15876,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "hash-db", @@ -16025,16 +15892,16 @@ dependencies = [ "sp-externalities", "thiserror 1.0.69", "tracing", - "trie-db 0.29.1", + "trie-db 0.30.0", "trie-root", ] [[package]] name = "sp-version" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", @@ -16049,10 +15916,10 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", - "proc-macro-warning 1.84.1", + "proc-macro-warning", "proc-macro2", "quote", "syn 2.0.106", @@ -16061,7 +15928,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -16072,8 +15939,8 @@ dependencies = [ [[package]] name = "sp-weights" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "31.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -16284,12 +16151,12 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "staging-xcm" -version = "15.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "bounded-collections", - "derivative", + "derive-where", "environmental", "frame-support", "hex-literal 0.4.1", @@ -16305,30 +16172,32 @@ dependencies = [ [[package]] name = "staging-xcm-builder" -version = "18.2.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "environmental", "frame-support", "frame-system", "impl-trait-for-tuples", - "log", "pallet-asset-conversion", "pallet-transaction-payment", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", "sp-arithmetic", + "sp-core", "sp-io", "sp-runtime", "sp-weights", "staging-xcm", "staging-xcm-executor", + "tracing", ] [[package]] name = "staging-xcm-executor" -version = "18.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "frame-benchmarking", @@ -16379,6 +16248,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "string-interner" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", +] + [[package]] name = "stringprep" version = "0.1.5" @@ -16390,12 +16269,6 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -16446,7 +16319,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -16471,17 +16344,17 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" [[package]] name = "substrate-frame-rpc-system" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-rpc-api", @@ -16495,8 +16368,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.17.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -16509,20 +16382,20 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" -version = "25.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "26.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "build-helper", "cargo_metadata", "console", "filetime", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "jobserver", "merkleized-metadata", "parity-scale-codec", "parity-wasm", - "polkavm-linker", + "polkavm-linker 0.18.0", "sc-executor", "shlex", "sp-core", @@ -16551,50 +16424,47 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subxt" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" +checksum = "1c17d7ec2359d33133b63c97e28c8b7cd3f0a5bc6ce567ae3aef9d9e85be3433" dependencies = [ "async-trait", "derive-where", "either", - "frame-metadata 16.0.0", + "frame-metadata 17.0.0", "futures", "hex", - "impl-serde 0.4.0", - "instant", - "jsonrpsee 0.22.5", + "impl-serde", + "jsonrpsee", "parity-scale-codec", - "primitive-types 0.12.2", - "reconnecting-jsonrpsee-ws-client", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-value", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-core", "subxt-lightclient", "subxt-macro", "subxt-metadata", "thiserror 1.0.69", + "tokio", "tokio-util", "tracing", "url", + "web-time", ] [[package]] name = "subxt-codegen" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" +checksum = "6550ef451c77db6e3bc7c56fb6fe1dca9398a2c8fc774b127f6a396a769b9c5b" dependencies = [ - "frame-metadata 16.0.0", "heck 0.5.0", - "hex", - "jsonrpsee 0.22.5", "parity-scale-codec", "proc-macro2", "quote", @@ -16603,41 +16473,42 @@ dependencies = [ "subxt-metadata", "syn 2.0.106", "thiserror 1.0.69", - "tokio", ] [[package]] name = "subxt-core" -version = "0.37.1" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af3b36405538a36b424d229dc908d1396ceb0994c90825ce928709eac1a159a" +checksum = "cb7a1bc6c9c1724971636a66e3225a7253cdb35bb6efb81524a6c71c04f08c59" dependencies = [ "base58", "blake2 0.10.6", "derive-where", - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "hex", - "impl-serde 0.4.0", + "impl-serde", + "keccak-hash", "parity-scale-codec", - "primitive-types 0.12.2", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-value", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-metadata", "tracing", ] [[package]] name = "subxt-lightclient" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" +checksum = "89ebc9131da4d0ba1f7814495b8cc79698798ccd52cacd7bcefe451e415bd945" dependencies = [ "futures", "futures-util", @@ -16652,56 +16523,74 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" +checksum = "7819c5e09aae0319981ee853869f2fcd1fac4db8babd0d004c17161297aadc05" dependencies = [ - "darling 0.20.11", + "darling", "parity-scale-codec", - "proc-macro-error", + "proc-macro-error2", "quote", "scale-typegen", "subxt-codegen", + "subxt-utils-fetchmetadata", "syn 2.0.106", ] [[package]] name = "subxt-metadata" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" +checksum = "aacd4e7484fef58deaa2dcb32d94753a864b208a668c0dd0c28be1d8abeeadb2" dependencies = [ - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "parity-scale-codec", + "polkadot-sdk", "scale-info", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "subxt-signer" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" +checksum = "d680352d04665b1e4eb6f9d2a54b800c4d8e1b20478e69be1b7d975b08d9fc34" dependencies = [ + "base64 0.22.1", "bip32", "bip39", "cfg-if", + "crypto_secretbox", "hex", "hmac 0.12.1", "keccak-hash", "parity-scale-codec", "pbkdf2", + "polkadot-sdk", "regex", "schnorrkel", - "secp256k1 0.28.2", - "secrecy", + "scrypt", + "secp256k1 0.30.0", + "secrecy 0.10.3", + "serde", + "serde_json", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-core", "zeroize", ] +[[package]] +name = "subxt-utils-fetchmetadata" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c53bc3eeaacc143a2f29ace4082edd2edaccab37b69ad20befba9fb00fdb3d" +dependencies = [ + "hex", + "parity-scale-codec", + "thiserror 1.0.69", +] + [[package]] name = "suppaftp" version = "6.3.0" @@ -16715,7 +16604,7 @@ dependencies = [ "lazy-regex", "log", "pin-project", - "rustls 0.23.32", + "rustls", "thiserror 2.0.17", ] @@ -17118,41 +17007,20 @@ checksum = "27d684bad428a0f2481f42241f821db42c54e2dc81d8c00db8536c506b0a0144" dependencies = [ "const-oid", "ring 0.17.14", - "rustls 0.23.32", + "rustls", "tokio", "tokio-postgres", - "tokio-rustls 0.26.4", + "tokio-rustls", "x509-cert", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "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.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.32", + "rustls", "tokio", ] @@ -17176,11 +17044,11 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tungstenite", ] @@ -17422,8 +17290,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "coarsetime", "polkadot-primitives", @@ -17434,7 +17302,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -17489,9 +17357,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" +checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" dependencies = [ "hash-db", "log", @@ -17508,78 +17376,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.5.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand 0.8.5", - "smallvec", - "socket2 0.4.10", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-proto" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.6.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand 0.8.5", - "smallvec", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot 0.12.5", - "rand 0.8.5", - "resolv-conf", - "smallvec", - "thiserror 1.0.69", - "tokio", - "tracing", - "trust-dns-proto 0.23.2", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -17620,7 +17416,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.17", @@ -17761,7 +17557,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", "futures-io", "futures-util", @@ -17796,7 +17592,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", - "idna 1.1.0", + "idna", "percent-encoding", "serde", ] @@ -17873,11 +17669,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" dependencies = [ "ark-bls12-377", - "ark-bls12-381", - "ark-ec", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-serialize 0.4.2", - "ark-serialize-derive", + "ark-serialize-derive 0.4.2", "arrayref", "digest 0.10.7", "rand 0.8.5", @@ -17888,6 +17684,52 @@ dependencies = [ "zeroize", ] +[[package]] +name = "w3f-pcs" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe7a8d5c914b69392ab3b267f679a2e546fe29afaddce47981772ac71bd02e1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "merlin", +] + +[[package]] +name = "w3f-plonk-common" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca389e494fe08c5c108b512e2328309036ee1c0bc7bdfdb743fef54d448c8c" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "getrandom_or_panic", + "rand_core 0.6.4", + "w3f-pcs", +] + +[[package]] +name = "w3f-ring-proof" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a639379402ad51504575dbd258740383291ac8147d3b15859bdf1ea48c677de" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "ark-transcript", + "w3f-pcs", + "w3f-plonk-common", +] + [[package]] name = "wait-timeout" version = "0.2.1" @@ -18106,28 +17948,37 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.31.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" dependencies = [ + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", "smallvec", "spin 0.9.8", - "wasmi_arena", + "wasmi_collections", "wasmi_core", "wasmparser-nostd", ] [[package]] -name = "wasmi_arena" -version = "0.4.1" +name = "wasmi_collections" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash", + "hashbrown 0.14.5", + "string-interner", +] [[package]] name = "wasmi_core" -version = "0.13.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" dependencies = [ "downcast-rs", "libm", @@ -18393,15 +18244,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.3", -] - [[package]] name = "webpki-roots" version = "1.0.3" @@ -18978,16 +18820,16 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", "data-encoding", - "der-parser 8.2.0", + "der-parser 9.0.0", "lazy_static", "nom", - "oid-registry 0.6.1", + "oid-registry 0.7.1", "rusticata-macros", "thiserror 1.0.69", "time", @@ -19012,8 +18854,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "11.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "proc-macro2", @@ -19023,8 +18865,8 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" -version = "0.5.3" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.7.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", diff --git a/operator/Cargo.toml b/operator/Cargo.toml index 40a689e9..12e449cc 100644 --- a/operator/Cargo.toml +++ b/operator/Cargo.toml @@ -5,12 +5,11 @@ edition = "2021" homepage = "https://datahaven.xyz/" license = "GPL-3" repository = "https://github.com/datahavenxyz/datahaven" -version = "0.26.0" +version = "0.23.0" [workspace] members = [ "node", - "pallets/outbound-commitment-store", "pallets/*", "precompiles/*", "primitives/bridge", @@ -40,11 +39,11 @@ pallet-evm-precompile-proxy = { path = "./precompiles/proxy", default-features = pallet-evm-precompile-referenda = { path = "./precompiles/referenda", default-features = false } pallet-evm-precompile-registry = { path = "./precompiles/precompile-registry", default-features = false } pallet-external-validator-slashes = { path = "./pallets/external-validator-slashes", default-features = false } +pallet-grandpa-benchmarking = { path = "./pallets/grandpa-benchmarking", default-features = false } pallet-external-validators = { path = "./pallets/external-validators", default-features = false } pallet-external-validators-rewards = { path = "./pallets/external-validators-rewards", default-features = false } pallet-outbound-commitment-store = { path = "./pallets/outbound-commitment-store", default-features = false } pallet-proxy-genesis-companion = { path = "./pallets/proxy-genesis-companion", default-features = false } -pallet-grandpa-benchmarking = { path = "./pallets/grandpa-benchmarking", default-features = false } pallet-session-benchmarking = { path = "./pallets/session-benchmarking", default-features = false } # Crates.io (wasm) @@ -57,7 +56,7 @@ async-trait = { version = "0.1.42" } blake2-rfc = { version = "0.2.18", default-features = false } byte-slice-cast = { version = "1.2.1", default-features = false } clap = { version = "4.5.10", features = ["derive", "env"] } -codec = { version = "3.6.12", default-features = false, package = "parity-scale-codec" } +codec = { version = "3.7.4", default-features = false, package = "parity-scale-codec" } ethabi = { version = "2.0.0", default-features = false, package = "ethabi-decode" } ethbloom = { version = "0.14.1", default-features = false } ethereum-types = { version = "0.15.1", default-features = false } @@ -83,7 +82,7 @@ openssl-sys = { version = "0.9", features = [ "vendored", ] } # This is just to set the "vendored" feature required for the crossbuild, so that OpenSSL builds from source parity-bytes = { version = "0.1.2", default-features = false } -parity-scale-codec = { version = "3.0.0", default-features = false, features = [ +parity-scale-codec = { version = "3.7.4", default-features = false, features = [ "derive", ] } paste = "1.0.14" @@ -108,117 +107,117 @@ tracing-subscriber = { version = "=0.3.19", features = [ url = "2.2.2" # Polkadot SDK -cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-support-test = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -mmr-gadget = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -mmr-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-beefy-mmr = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-conviction-voting = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-migrations = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-mmr = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-nfts = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-parameters = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-tx-pause = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-whitelist = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -parachains-common = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-beefy-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-network = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-service = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-crypto-hashing = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-mmr-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-std = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-storage = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -xcm = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm" } -xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm-builder" } -xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm-executor" } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-support-test = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +mmr-gadget = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +mmr-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-beefy-mmr = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-conviction-voting = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-migrations = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-mmr = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-nfts = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-parameters = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-staking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-tx-pause = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-whitelist = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +parachains-common = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-beefy-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-crypto-hashing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-mmr-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-storage = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm" } +xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm-builder" } +xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm-executor" } # Snowbridge -bp-relayers = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } +bp-relayers = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } bridge-hub-common = { path = "primitives/snowbridge/bridge-hub-common", default-features = false } snowbridge-beacon-primitives = { path = "primitives/snowbridge/beacon", default-features = false } snowbridge-core = { path = "primitives/snowbridge/core", default-features = false } @@ -231,7 +230,7 @@ snowbridge-pallet-ethereum-client = { path = "pallets/ethereum-client", default- snowbridge-pallet-ethereum-client-fixtures = { path = "pallets/ethereum-client/fixtures", default-features = false } snowbridge-pallet-inbound-queue-v2 = { path = "pallets/inbound-queue-v2", default-features = false } snowbridge-pallet-inbound-queue-v2-fixtures = { path = "pallets/inbound-queue-v2/fixtures", default-features = false } -snowbridge-pallet-outbound-queue = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } +snowbridge-pallet-outbound-queue = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } snowbridge-pallet-outbound-queue-v2 = { path = "pallets/outbound-queue-v2", default-features = false } snowbridge-pallet-system = { path = "pallets/system", default-features = false } snowbridge-pallet-system-v2 = { path = "pallets/system-v2", default-features = false } @@ -240,74 +239,77 @@ snowbridge-test-utils = { path = "primitives/snowbridge/test-utils", default-fea snowbridge-verification-primitives = { path = "primitives/snowbridge/verification", default-features = false } # Frontier (wasm) -evm = { git = "https://github.com/rust-ethereum/evm", rev = "6d86fe2d3bcc14887c2575f62958a67ac2d523db", default-features = false } -fp-account = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-evm = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-self-contained = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-base-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-dynamic-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-ethereum = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm-chain-id = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm-precompile-blake2 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-hotfix-sufficients = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -precompile-utils = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -precompile-utils-macro = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } +evm = { version = "0.43.2", default-features = false } +fp-account = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-evm = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-self-contained = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-base-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-dynamic-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-ethereum = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm-chain-id = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm-precompile-blake2 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-hotfix-sufficients = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +precompile-utils = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +precompile-utils-macro = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +ethereum = { version = "0.18.2", default-features = false, features = [ + "with-scale", +] } # Frontier (client) -fc-api = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-cli = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-consensus = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-db = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412" } -fc-mapping-sync = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-rpc-core = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } +fc-api = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-cli = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-consensus = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-db = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503" } +fc-mapping-sync = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-rpc-core = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } # StorageHub ## Runtime -pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } ## Client -shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } ## Precompiles -pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } # Static linking diff --git a/operator/benchmarking/frame-weight-template.hbs b/operator/benchmarking/frame-weight-template.hbs index 9fcc72c5..5a220d5a 100644 --- a/operator/benchmarking/frame-weight-template.hbs +++ b/operator/benchmarking/frame-weight-template.hbs @@ -18,7 +18,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `{{pallet}}`. pub struct WeightInfo(PhantomData); diff --git a/operator/node/src/benchmarking.rs b/operator/node/src/benchmarking.rs index 648cd574..9f4bf4e1 100644 --- a/operator/node/src/benchmarking.rs +++ b/operator/node/src/benchmarking.rs @@ -147,6 +147,7 @@ pub fn create_benchmark_extrinsic( frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(0), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ); let raw_payload = runtime::SignedPayload::from_raw( @@ -162,6 +163,7 @@ pub fn create_benchmark_extrinsic( (), (), None, + (), ), ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); diff --git a/operator/node/src/command.rs b/operator/node/src/command.rs index bcd4a3a4..6a8533fa 100644 --- a/operator/node/src/command.rs +++ b/operator/node/src/command.rs @@ -427,78 +427,72 @@ pub fn run() -> sc_cli::Result<()> { }; match config.network.network_backend { - // TODO: Litep2p becomes standard with Polkadot SDK stable2412-7 (should move None to other arm) - // cfr. https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-7 - Some(sc_network::config::NetworkBackendType::Libp2p) | None => { - match config.chain_spec { - ref spec if spec.is_mainnet() => { - service::new_full::< - datahaven_mainnet_runtime::Runtime, - datahaven_mainnet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - ref spec if spec.is_testnet() => { - service::new_full::< - datahaven_testnet_runtime::Runtime, - datahaven_testnet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - _ => { - service::new_full::< - datahaven_stagenet_runtime::Runtime, - datahaven_stagenet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } + sc_network::config::NetworkBackendType::Libp2p => match config.chain_spec { + ref spec if spec.is_mainnet() => { + service::new_full::< + datahaven_mainnet_runtime::Runtime, + datahaven_mainnet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await } - .map_err(sc_cli::Error::Service) - } - Some(sc_network::config::NetworkBackendType::Litep2p) => { - match config.chain_spec { - ref spec if spec.is_mainnet() => { - service::new_full::< - datahaven_mainnet_runtime::Runtime, - datahaven_mainnet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - ref spec if spec.is_testnet() => { - service::new_full::< - datahaven_testnet_runtime::Runtime, - datahaven_testnet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - _ => { - service::new_full::< - datahaven_stagenet_runtime::Runtime, - datahaven_stagenet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } + ref spec if spec.is_testnet() => { + service::new_full::< + datahaven_testnet_runtime::Runtime, + datahaven_testnet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + _ => { + service::new_full::< + datahaven_stagenet_runtime::Runtime, + datahaven_stagenet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await } - .map_err(sc_cli::Error::Service) } + .map_err(sc_cli::Error::Service), + sc_network::config::NetworkBackendType::Litep2p => match config.chain_spec { + ref spec if spec.is_mainnet() => { + service::new_full::< + datahaven_mainnet_runtime::Runtime, + datahaven_mainnet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + ref spec if spec.is_testnet() => { + service::new_full::< + datahaven_testnet_runtime::Runtime, + datahaven_testnet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + _ => { + service::new_full::< + datahaven_stagenet_runtime::Runtime, + datahaven_stagenet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + } + .map_err(sc_cli::Error::Service), } }) } diff --git a/operator/node/src/rpc.rs b/operator/node/src/rpc.rs index 25380cdb..7aeaf1a5 100644 --- a/operator/node/src/rpc.rs +++ b/operator/node/src/rpc.rs @@ -40,7 +40,7 @@ use sc_consensus_beefy::communication::notification::{ }; use sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApiServer}; use sc_network_sync::SyncingService; -use sc_transaction_pool::{ChainApi, Pool}; +use sc_transaction_pool::ChainApi; use sc_transaction_pool_api::TransactionPool; use shc_client::types::FileStorageT; use shc_common::traits::StorageEnableRuntime; @@ -54,7 +54,7 @@ use shc_rpc::StorageHubClientRpcConfig; use sp_consensus_babe::{BabeApi, SlotDuration}; use sp_consensus_beefy::AuthorityIdBound; use sp_core::H256; -use sp_runtime::traits::BlakeTwo256; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, Header as HeaderT}; use std::collections::BTreeMap; use std::sync::Arc; @@ -69,9 +69,10 @@ pub struct BeefyDeps { } /// Full client dependencies. -pub struct FullDeps +pub struct FullDeps where Runtime: StorageEnableRuntime, + FS: ForestStorageHandler + Clone + Send + Sync + 'static, { /// The client instance to use. pub client: Arc>, @@ -80,7 +81,7 @@ where /// BEEFY dependencies. pub beefy: BeefyDeps, /// Graph pool instance. - pub graph: Arc>, + pub graph: Arc

, /// Backend used by the node. pub backend: Arc, /// Network service @@ -112,8 +113,8 @@ where } /// Instantiate all full RPC extensions. -pub fn create_full( - deps: FullDeps, +pub fn create_full( + deps: FullDeps, subscription_task_executor: sc_rpc::SubscriptionTaskExecutor, pubsub_notification_sinks: Arc< fc_mapping_sync::EthereumBlockNotificationSinks< @@ -122,11 +123,10 @@ pub fn create_full( >, ) -> Result, Box> where - P: TransactionPool + 'static, + P: TransactionPool::Hash> + 'static, BE: Backend + Send + Sync + 'static, BE::State: StateBackend, AuthorityId: AuthorityIdBound, - A: ChainApi + 'static, Runtime: StorageEnableRuntime, Runtime::RuntimeApi: StorageEnableRuntimeApi< RuntimeApi: mmr_rpc::MmrRuntimeApi< @@ -139,7 +139,7 @@ where >, StorageHubClient: StorageProvider, FL: FileStorageT, - FSH: ForestStorageHandler + Send + Sync + 'static, + FSH: ForestStorageHandler + Clone + Send + Sync + 'static, { use mmr_rpc::{Mmr, MmrApiServer}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; @@ -225,7 +225,7 @@ where }; module.merge( - Eth::<_, _, _, _, _, _, _, DefaultEthConfig, BE>>::new( + Eth::<_, _, _, _, _, _, DefaultEthConfig, BE>>::new( Arc::clone(&client), Arc::clone(&pool), graph.clone(), diff --git a/operator/node/src/service.rs b/operator/node/src/service.rs index 7b307420..18f79c32 100644 --- a/operator/node/src/service.rs +++ b/operator/node/src/service.rs @@ -572,7 +572,7 @@ where Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + let (network, system_rpc_tx, tx_handler_controller, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, net_config, @@ -698,7 +698,7 @@ where let deps = crate::rpc::FullDeps { client: client.clone(), pool: pool.clone(), - graph: pool.pool().clone(), + graph: pool.clone(), beefy: BeefyDeps:: { beefy_finality_proof_stream: beefy_rpc_links .from_voter_justif_stream @@ -996,7 +996,6 @@ where .await?; } - network_starter.start_network(); Ok(task_manager) } @@ -1375,7 +1374,6 @@ where .with_blockchain( client.clone(), keystore.clone(), - Arc::new(rpc_handlers), rocks_db_path.clone(), maintenance_mode, ) diff --git a/operator/pallets/datahaven-native-transfer/Cargo.toml b/operator/pallets/datahaven-native-transfer/Cargo.toml index da35d0d0..ee85cc10 100644 --- a/operator/pallets/datahaven-native-transfer/Cargo.toml +++ b/operator/pallets/datahaven-native-transfer/Cargo.toml @@ -20,7 +20,6 @@ frame-support = { workspace = true } frame-system = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } snowbridge-core = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } @@ -48,7 +47,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm/std", "xcm-builder/std", "pallet-balances/std", diff --git a/operator/pallets/datahaven-native-transfer/src/lib.rs b/operator/pallets/datahaven-native-transfer/src/lib.rs index a60315b0..91fad635 100644 --- a/operator/pallets/datahaven-native-transfer/src/lib.rs +++ b/operator/pallets/datahaven-native-transfer/src/lib.rs @@ -29,7 +29,9 @@ //! It uses a dedicated Ethereum sovereign account to hold locked tokens during transfers. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec; use frame_support::{ pallet_prelude::*, traits::{ @@ -41,7 +43,6 @@ use snowbridge_core::TokenId; use snowbridge_outbound_queue_primitives::v2::{Command, Message as OutboundMessage, SendMessage}; use sp_core::{H160, H256}; use sp_runtime::{traits::Saturating, BoundedVec}; -use sp_std::vec; pub use pallet::*; diff --git a/operator/pallets/datahaven-native-transfer/src/mock.rs b/operator/pallets/datahaven-native-transfer/src/mock.rs index f9bc4f12..172d3293 100644 --- a/operator/pallets/datahaven-native-transfer/src/mock.rs +++ b/operator/pallets/datahaven-native-transfer/src/mock.rs @@ -166,9 +166,12 @@ pub fn new_test_ext() -> sp_io::TestExternalities { (BOB, INITIAL_BALANCE), (CHARLIE, INITIAL_BALANCE), ]; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); let mut ext: sp_io::TestExternalities = t.into(); ext.execute_with(|| { diff --git a/operator/pallets/ethereum-client/Cargo.toml b/operator/pallets/ethereum-client/Cargo.toml index bc354399..752a46fb 100644 --- a/operator/pallets/ethereum-client/Cargo.toml +++ b/operator/pallets/ethereum-client/Cargo.toml @@ -28,7 +28,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-io = { optional = true, workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } pallet-timestamp = { optional = true, workspace = true } snowbridge-beacon-primitives = { workspace = true } @@ -77,7 +76,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", 'frame-benchmarking/std', ] try-runtime = [ diff --git a/operator/pallets/ethereum-client/fixtures/Cargo.toml b/operator/pallets/ethereum-client/fixtures/Cargo.toml index 49a545c6..f5aa84fa 100644 --- a/operator/pallets/ethereum-client/fixtures/Cargo.toml +++ b/operator/pallets/ethereum-client/fixtures/Cargo.toml @@ -20,7 +20,6 @@ snowbridge-beacon-primitives = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -33,5 +32,4 @@ std = [ "snowbridge-core/std", "snowbridge-inbound-queue-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/pallets/ethereum-client/fixtures/src/lib.rs b/operator/pallets/ethereum-client/fixtures/src/lib.rs index ff949352..c4b43884 100644 --- a/operator/pallets/ethereum-client/fixtures/src/lib.rs +++ b/operator/pallets/ethereum-client/fixtures/src/lib.rs @@ -3,7 +3,9 @@ // Generated, do not edit! // See README.md for instructions to generate #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::{boxed::Box, vec}; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, NextSyncCommitteeUpdate, @@ -11,7 +13,6 @@ use snowbridge_beacon_primitives::{ }; use snowbridge_inbound_queue_primitives::{EventProof, InboundQueueFixture, Log, Proof}; use sp_core::U256; -use sp_std::{boxed::Box, vec}; const SC_SIZE: usize = 512; const SC_BITS_SIZE: usize = 64; diff --git a/operator/pallets/ethereum-client/src/benchmarking/util.rs b/operator/pallets/ethereum-client/src/benchmarking/util.rs index 44403226..e1dab30b 100644 --- a/operator/pallets/ethereum-client/src/benchmarking/util.rs +++ b/operator/pallets/ethereum-client/src/benchmarking/util.rs @@ -2,8 +2,9 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate::{ decompress_sync_committee_bits, Config, CurrentSyncCommittee, Pallet as EthereumBeaconClient, - Update, ValidatorsRoot, Vec, + Update, ValidatorsRoot, }; +use alloc::vec::Vec; use snowbridge_beacon_primitives::PublicKeyPrepared; use sp_core::H256; diff --git a/operator/pallets/ethereum-client/src/impls.rs b/operator/pallets/ethereum-client/src/impls.rs index c1702ef4..e0546982 100644 --- a/operator/pallets/ethereum-client/src/impls.rs +++ b/operator/pallets/ethereum-client/src/impls.rs @@ -4,6 +4,7 @@ use super::*; use frame_support::ensure; use snowbridge_beacon_primitives::ExecutionProof; +use alloc::vec::Vec; use snowbridge_beacon_primitives::merkle_proof::{generalized_index_length, subtree_index}; use snowbridge_ethereum::Receipt; use snowbridge_inbound_queue_primitives::{ diff --git a/operator/pallets/ethereum-client/src/lib.rs b/operator/pallets/ethereum-client/src/lib.rs index dfe9c131..ca6d5909 100644 --- a/operator/pallets/ethereum-client/src/lib.rs +++ b/operator/pallets/ethereum-client/src/lib.rs @@ -16,6 +16,7 @@ //! //! * [`Call::submit`]: Submit a finalized beacon header with an optional sync committee update #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod config; pub mod functions; @@ -38,6 +39,7 @@ mod tests_electra; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +use alloc::boxed::Box; use frame_support::{ dispatch::{DispatchResult, PostDispatchInfo}, pallet_prelude::OptionQuery, @@ -53,7 +55,6 @@ use snowbridge_beacon_primitives::{ }; use snowbridge_core::{BasicOperatingMode, RingBufferMap}; use sp_core::H256; -use sp_std::prelude::*; pub use weights::WeightInfo; use functions::{ @@ -71,6 +72,7 @@ pub const LOG_TARGET: &str = "ethereum-client"; pub mod pallet { use super::*; + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; diff --git a/operator/pallets/ethereum-client/src/mock.rs b/operator/pallets/ethereum-client/src/mock.rs index 6c1ca8a7..cb3963be 100644 --- a/operator/pallets/ethereum-client/src/mock.rs +++ b/operator/pallets/ethereum-client/src/mock.rs @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate as ethereum_beacon_client; use crate::config; +use alloc::default::Default; use frame_support::{derive_impl, dispatch::DispatchResult, parameter_types}; use pallet_timestamp; use snowbridge_beacon_primitives::{Fork, ForkVersions}; use snowbridge_inbound_queue_primitives::{Log, Proof}; -use sp_std::default::Default; use std::{fs::File, path::PathBuf}; type Block = frame_system::mocking::MockBlock; @@ -136,6 +136,10 @@ parameter_types! { }, electra: Fork { version: [5, 0, 0, 0], // 0x05000000 + epoch: 0, + }, + fulu: Fork { + version: [6, 0, 0, 0], // 0x06000000 epoch: 80000000000, } }; diff --git a/operator/pallets/ethereum-client/src/mock_electra.rs b/operator/pallets/ethereum-client/src/mock_electra.rs index 740bbb89..bb6ba573 100644 --- a/operator/pallets/ethereum-client/src/mock_electra.rs +++ b/operator/pallets/ethereum-client/src/mock_electra.rs @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate as ethereum_beacon_client; use crate::config; +use alloc::default::Default; use frame_support::{derive_impl, dispatch::DispatchResult, parameter_types}; use pallet_timestamp; use snowbridge_beacon_primitives::{Fork, ForkVersions}; use snowbridge_inbound_queue_primitives::{Log, Proof}; -use sp_std::default::Default; use std::{fs::File, path::PathBuf}; type Block = frame_system::mocking::MockBlock; @@ -117,6 +117,10 @@ parameter_types! { electra: Fork { version: [5, 0, 0, 0], // 0x05000000 epoch: 0, + }, + fulu: Fork { + version: [6, 0, 0, 0], // 0x06000000 + epoch: 0, } }; } diff --git a/operator/pallets/ethereum-client/src/tests.rs b/operator/pallets/ethereum-client/src/tests.rs index 143315b6..c56817d8 100644 --- a/operator/pallets/ethereum-client/src/tests.rs +++ b/operator/pallets/ethereum-client/src/tests.rs @@ -248,6 +248,10 @@ fn compute_fork_version() { version: [0, 0, 0, 5], epoch: 50, }, + fulu: Fork { + version: [0, 0, 0, 6], + epoch: 60, + }, }; new_tester().execute_with(|| { assert_eq!( diff --git a/operator/pallets/ethereum-client/src/tests_electra.rs b/operator/pallets/ethereum-client/src/tests_electra.rs index 73666b2c..aed3dce5 100644 --- a/operator/pallets/ethereum-client/src/tests_electra.rs +++ b/operator/pallets/ethereum-client/src/tests_electra.rs @@ -247,6 +247,10 @@ fn compute_fork_version() { version: [0, 0, 0, 5], epoch: 50, }, + fulu: Fork { + version: [0, 0, 0, 6], + epoch: 60, + }, }; new_tester().execute_with(|| { assert_eq!( @@ -281,6 +285,10 @@ fn compute_fork_version() { EthereumBeaconClient::select_fork_version(&mock_fork_versions, 50), [0, 0, 0, 5] ); + assert_eq!( + EthereumBeaconClient::select_fork_version(&mock_fork_versions, 60), + [0, 0, 0, 6] + ); }); } diff --git a/operator/pallets/ethereum-client/src/weights.rs b/operator/pallets/ethereum-client/src/weights.rs index e4629746..5361fabf 100644 --- a/operator/pallets/ethereum-client/src/weights.rs +++ b/operator/pallets/ethereum-client/src/weights.rs @@ -29,7 +29,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for ethereum_beacon_client. pub trait WeightInfo { diff --git a/operator/pallets/external-validator-slashes/src/mock.rs b/operator/pallets/external-validator-slashes/src/mock.rs index efe2c509..34ba198e 100644 --- a/operator/pallets/external-validator-slashes/src/mock.rs +++ b/operator/pallets/external-validator-slashes/src/mock.rs @@ -171,6 +171,7 @@ impl pallet_session::Config for Test { type ValidatorIdOf = ConvertInto; type NextSessionRotation = pallet_session::PeriodicSessions; type WeightInfo = (); + type DisablingStrategy = (); } sp_runtime::impl_opaque_keys! { diff --git a/operator/pallets/external-validators-rewards/Cargo.toml b/operator/pallets/external-validators-rewards/Cargo.toml index aeaa7f32..f61ec1d8 100644 --- a/operator/pallets/external-validators-rewards/Cargo.toml +++ b/operator/pallets/external-validators-rewards/Cargo.toml @@ -22,7 +22,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } frame-benchmarking = { workspace = true } @@ -58,7 +57,6 @@ std = [ "sp-io/std", "sp-runtime/std", "sp-staking/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/external-validators-rewards/src/benchmarking.rs b/operator/pallets/external-validators-rewards/src/benchmarking.rs index 4b84bc3f..f3a834ec 100644 --- a/operator/pallets/external-validators-rewards/src/benchmarking.rs +++ b/operator/pallets/external-validators-rewards/src/benchmarking.rs @@ -24,7 +24,6 @@ use { crate::types::BenchmarkHelper, frame_benchmarking::{account, v2::*, BenchmarkError}, frame_support::traits::{Currency, EnsureOrigin}, - sp_std::prelude::*, }; const SEED: u32 = 0; diff --git a/operator/pallets/external-validators-rewards/src/lib.rs b/operator/pallets/external-validators-rewards/src/lib.rs index 8aeaa123..0e823189 100644 --- a/operator/pallets/external-validators-rewards/src/lib.rs +++ b/operator/pallets/external-validators-rewards/src/lib.rs @@ -18,6 +18,7 @@ //! Storage will be cleared after a period of time. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod mock; @@ -33,6 +34,7 @@ pub mod weights; pub use pallet::*; +use alloc::vec::Vec; use { crate::types::{EraRewardsUtils, HandleInflation, SendMessage}, frame_support::traits::{Get, ValidatorSet}, @@ -44,7 +46,6 @@ use { Perbill, }, sp_staking::SessionIndex, - sp_std::vec::Vec, }; /// Trait for checking if a validator has been slashed in a given era @@ -65,10 +66,10 @@ pub mod pallet { use sp_runtime::PerThing; pub use crate::weights::WeightInfo; + use alloc::collections::BTreeMap; use { super::*, frame_support::pallet_prelude::*, frame_system::pallet_prelude::OriginFor, pallet_external_validators::traits::EraIndexProvider, sp_runtime::Saturating, - sp_std::collections::btree_map::BTreeMap, }; /// The current storage version. diff --git a/operator/pallets/external-validators-rewards/src/mock.rs b/operator/pallets/external-validators-rewards/src/mock.rs index 6b99b7c3..e28599bf 100644 --- a/operator/pallets/external-validators-rewards/src/mock.rs +++ b/operator/pallets/external-validators-rewards/src/mock.rs @@ -283,6 +283,7 @@ impl HandleInflation for InflationMinter { // Pallet to provide some mock data, used to test #[frame_support::pallet] pub mod mock_data { + use alloc::vec::Vec; use { frame_support::pallet_prelude::*, pallet_external_validators::traits::{ActiveEraInfo, EraIndex, EraIndexProvider}, @@ -293,9 +294,9 @@ pub mod mock_data { pub active_era: Option, pub era_inflation: Option, /// Set of validators that are considered offline (for liveness testing) - pub offline_validators: sp_std::vec::Vec, + pub offline_validators: Vec, /// Set of (era_index, validator_id) pairs that are slashed - pub slashed_validators: sp_std::vec::Vec<(u32, sp_core::H160)>, + pub slashed_validators: Vec<(u32, sp_core::H160)>, /// When true, MockOkOutboundQueue::validate will return Err(SendError::MessageTooLarge) pub send_message_fails: bool, } @@ -357,9 +358,12 @@ pub fn new_test_ext() -> sp_io::TestExternalities { ExistentialDeposit::get(), ), // Rewards account needs existential deposit ]; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); let ext: sp_io::TestExternalities = t.into(); diff --git a/operator/pallets/external-validators-rewards/src/tests.rs b/operator/pallets/external-validators-rewards/src/tests.rs index 752a55c0..d5741cb4 100644 --- a/operator/pallets/external-validators-rewards/src/tests.rs +++ b/operator/pallets/external-validators-rewards/src/tests.rs @@ -16,10 +16,10 @@ use { crate::{self as pallet_external_validators_rewards, mock::*}, + alloc::collections::btree_map::BTreeMap, frame_support::{assert_noop, assert_ok, traits::fungible::Mutate}, pallet_external_validators::traits::{ActiveEraInfo, OnEraEnd, OnEraStart}, sp_core::H160, - sp_std::collections::btree_map::BTreeMap, }; #[test] diff --git a/operator/pallets/external-validators-rewards/src/types.rs b/operator/pallets/external-validators-rewards/src/types.rs index 540e6b94..23004d3f 100644 --- a/operator/pallets/external-validators-rewards/src/types.rs +++ b/operator/pallets/external-validators-rewards/src/types.rs @@ -14,9 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Tanssi. If not, see +use alloc::vec::Vec; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec::Vec; /// Data needed for EigenLayer rewards submission via Snowbridge. #[derive(Debug, PartialEq, Eq, Clone)] diff --git a/operator/pallets/external-validators-rewards/src/weights.rs b/operator/pallets/external-validators-rewards/src/weights.rs index a7585778..882ee019 100644 --- a/operator/pallets/external-validators-rewards/src/weights.rs +++ b/operator/pallets/external-validators-rewards/src/weights.rs @@ -49,7 +49,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for pallet_external_validators_rewards. pub trait WeightInfo { diff --git a/operator/pallets/external-validators/Cargo.toml b/operator/pallets/external-validators/Cargo.toml index f7d63eb3..cf9fb077 100644 --- a/operator/pallets/external-validators/Cargo.toml +++ b/operator/pallets/external-validators/Cargo.toml @@ -24,7 +24,6 @@ frame-system = { workspace = true } impl-trait-for-tuples = { workspace = true } sp-runtime = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-core = { workspace = true } frame-benchmarking = { workspace = true } @@ -56,7 +55,6 @@ std = [ "sp-io/std", "sp-runtime/std", "sp-staking/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/external-validators/src/benchmarking.rs b/operator/pallets/external-validators/src/benchmarking.rs index 14c4df6b..b4f81073 100644 --- a/operator/pallets/external-validators/src/benchmarking.rs +++ b/operator/pallets/external-validators/src/benchmarking.rs @@ -27,7 +27,6 @@ use { pallet_session::{self as session, SessionManager}, rand::{RngCore, SeedableRng}, sp_runtime::{codec, traits::Convert}, - sp_std::prelude::*, }; const SEED: u32 = 0; diff --git a/operator/pallets/external-validators/src/lib.rs b/operator/pallets/external-validators/src/lib.rs index 7b2fdaf5..be82fd37 100644 --- a/operator/pallets/external-validators/src/lib.rs +++ b/operator/pallets/external-validators/src/lib.rs @@ -31,16 +31,17 @@ //! The structure of this pallet and the concept of eras is inspired by `pallet_staking` from Polkadot. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub use pallet::*; use { + alloc::{collections::btree_set::BTreeSet, vec::Vec}, frame_support::pallet_prelude::Weight, log::log, - parity_scale_codec::{Decode, Encode, MaxEncodedLen}, + parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}, scale_info::TypeInfo, sp_runtime::{traits::Get, RuntimeDebug}, sp_staking::SessionIndex, - sp_std::{collections::btree_set::BTreeSet, vec::Vec}, traits::{ ActiveEraInfo, EraIndex, EraIndexProvider, ExternalIndexProvider, InvulnerablesProvider, OnEraEnd, OnEraStart, ValidatorProvider, @@ -92,6 +93,7 @@ pub mod pallet { use frame_support::traits::Currency; use { super::*, + alloc::vec::Vec, frame_support::{ dispatch::DispatchResultWithPostInfo, pallet_prelude::*, @@ -101,7 +103,6 @@ pub mod pallet { frame_system::pallet_prelude::*, sp_core::H160, sp_runtime::{traits::Convert, SaturatedConversion}, - sp_std::vec::Vec, }; /// Configure the pallet by specifying the parameters and types on which it depends. @@ -255,7 +256,7 @@ pub mod pallet { // T::ValidatorId does not impl Ord or Hash so we cannot collect into set directly, // but we can check for duplicates if we encode them first. .map(|x| x.encode()) - .collect::>(); + .collect::>(); assert!( duplicate_validators.len() == self.whitelisted_validators.len(), "duplicate validators in genesis." @@ -763,7 +764,17 @@ impl InvulnerablesProvider for Pallet { /// Mode of era-forcing. #[derive( - Copy, Clone, PartialEq, Eq, Default, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen, + Copy, + Clone, + PartialEq, + Eq, + Default, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + MaxEncodedLen, + DecodeWithMemTracking, )] pub enum Forcing { /// Not forcing anything - just let whatever happen. diff --git a/operator/pallets/external-validators/src/mock.rs b/operator/pallets/external-validators/src/mock.rs index 0e8e1fd8..8db7676c 100644 --- a/operator/pallets/external-validators/src/mock.rs +++ b/operator/pallets/external-validators/src/mock.rs @@ -199,6 +199,7 @@ impl pallet_session::Config for Test { type SessionHandler = TestSessionHandler; type Keys = MockSessionKeys; type WeightInfo = (); + type DisablingStrategy = (); } // Pallet to provide some mock data, used to test @@ -298,9 +299,12 @@ pub fn new_test_ext() -> sp_io::TestExternalities { keys, ..Default::default() }; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); pallet_external_validators::GenesisConfig:: { skip_external_validators: false, whitelisted_validators, diff --git a/operator/pallets/external-validators/src/traits.rs b/operator/pallets/external-validators/src/traits.rs index 183ea0c2..3b778d58 100644 --- a/operator/pallets/external-validators/src/traits.rs +++ b/operator/pallets/external-validators/src/traits.rs @@ -14,12 +14,12 @@ // You should have received a copy of the GNU General Public License // along with Tanssi. If not, see +use alloc::vec::Vec; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use snowbridge_outbound_queue_primitives::SendError; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::vec::Vec; /// Information regarding the active era (era in used in session). #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] diff --git a/operator/pallets/external-validators/src/weights.rs b/operator/pallets/external-validators/src/weights.rs index 8e8cee55..c2956818 100644 --- a/operator/pallets/external-validators/src/weights.rs +++ b/operator/pallets/external-validators/src/weights.rs @@ -49,7 +49,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for pallet_external_validators. pub trait WeightInfo { diff --git a/operator/pallets/grandpa-benchmarking/Cargo.toml b/operator/pallets/grandpa-benchmarking/Cargo.toml index 67f8cbd8..0451b3cf 100644 --- a/operator/pallets/grandpa-benchmarking/Cargo.toml +++ b/operator/pallets/grandpa-benchmarking/Cargo.toml @@ -25,7 +25,6 @@ sp-application-crypto = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } sp-session = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -42,7 +41,6 @@ std = [ "sp-core/std", "sp-runtime/std", "sp-session/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/inbound-queue-v2/Cargo.toml b/operator/pallets/inbound-queue-v2/Cargo.toml index edf40297..a84c0b51 100644 --- a/operator/pallets/inbound-queue-v2/Cargo.toml +++ b/operator/pallets/inbound-queue-v2/Cargo.toml @@ -30,7 +30,6 @@ pallet-balances = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-builder = { workspace = true } @@ -87,7 +86,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "tracing/std", "xcm-builder/std", "xcm-executor/std", diff --git a/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml b/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml index 7568f8fc..f95515b8 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml +++ b/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml @@ -20,7 +20,6 @@ snowbridge-beacon-primitives = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -33,5 +32,4 @@ std = [ "snowbridge-core/std", "snowbridge-inbound-queue-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs b/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs index 3fe70c51..471d0b81 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs +++ b/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs @@ -1,5 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod register_token; diff --git a/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs b/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs index 24645c52..a98833e9 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs +++ b/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs @@ -3,13 +3,13 @@ // Generated, do not edit! // See ethereum client README.md for instructions to generate +use alloc::vec; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, VersionedExecutionPayloadHeader, }; use snowbridge_inbound_queue_primitives::{EventProof, InboundQueueFixture, Log, Proof}; use sp_core::U256; -use sp_std::vec; pub fn make_register_token_message() -> InboundQueueFixture { InboundQueueFixture { diff --git a/operator/pallets/inbound-queue-v2/src/lib.rs b/operator/pallets/inbound-queue-v2/src/lib.rs index 702005c2..94a3b43e 100644 --- a/operator/pallets/inbound-queue-v2/src/lib.rs +++ b/operator/pallets/inbound-queue-v2/src/lib.rs @@ -37,6 +37,7 @@ mod mock; mod test; pub use crate::weights::WeightInfo; +use alloc::boxed::Box; use frame_system::ensure_signed; use snowbridge_core::{ sparse_bitmap::{SparseBitmap, SparseBitmapImpl}, @@ -48,7 +49,6 @@ use snowbridge_inbound_queue_primitives::{ }; use sp_core::H160; use sp_runtime::traits::Zero; -use sp_std::prelude::*; use xcm::prelude::*; #[cfg(feature = "runtime-benchmarks")] diff --git a/operator/pallets/inbound-queue-v2/src/message_processors.rs b/operator/pallets/inbound-queue-v2/src/message_processors.rs index 1bbec9d7..4b2d5e3a 100644 --- a/operator/pallets/inbound-queue-v2/src/message_processors.rs +++ b/operator/pallets/inbound-queue-v2/src/message_processors.rs @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: 2023 Snowfork use super::*; use codec::Encode; +use core::marker::PhantomData; use frame_support::traits::Get; use sp_runtime::traits::TryConvert; use sp_runtime::DispatchError; -use sp_std::marker::PhantomData; use xcm::prelude::{ExecuteXcm, Location, Parachain, SendError, SendXcm, XcmHash}; /// A message processor that simply returns the Blake2_256 hash of the SCALE encoded message diff --git a/operator/pallets/inbound-queue-v2/src/mock.rs b/operator/pallets/inbound-queue-v2/src/mock.rs index f216f868..ac972ded 100644 --- a/operator/pallets/inbound-queue-v2/src/mock.rs +++ b/operator/pallets/inbound-queue-v2/src/mock.rs @@ -4,6 +4,7 @@ use super::*; use crate::{self as inbound_queue_v2, message_processors::XcmMessageProcessor}; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::{convert::From, default::Default, marker::PhantomData}; use frame_support::{derive_impl, parameter_types, traits::ConstU32}; use hex_literal::hex; use scale_info::TypeInfo; @@ -17,7 +18,6 @@ use sp_runtime::{ traits::{IdentityLookup, MaybeEquivalence, TryConvert}, BuildStorage, DispatchError, }; -use sp_std::{convert::From, default::Default, marker::PhantomData}; use xcm::{opaque::latest::WESTEND_GENESIS_HASH, prelude::*}; type Block = frame_system::mocking::MockBlock; pub use snowbridge_test_utils::mock_xcm::{MockXcmExecutor, MockXcmSender}; diff --git a/operator/pallets/inbound-queue-v2/src/weights.rs b/operator/pallets/inbound-queue-v2/src/weights.rs index c96d3a03..139bd90b 100644 --- a/operator/pallets/inbound-queue-v2/src/weights.rs +++ b/operator/pallets/inbound-queue-v2/src/weights.rs @@ -13,7 +13,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for ethereum_beacon_client. pub trait WeightInfo { diff --git a/operator/pallets/outbound-queue-v2/Cargo.toml b/operator/pallets/outbound-queue-v2/Cargo.toml index de17829b..d538a221 100644 --- a/operator/pallets/outbound-queue-v2/Cargo.toml +++ b/operator/pallets/outbound-queue-v2/Cargo.toml @@ -29,7 +29,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } bp-relayers = { workspace = true } bridge-hub-common = { workspace = true } @@ -82,7 +81,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml b/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml index caab8c27..75d82c93 100644 --- a/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml +++ b/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml @@ -22,7 +22,6 @@ snowbridge-core = { workspace = true } snowbridge-merkle-tree = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } sp-api = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } [features] @@ -35,6 +34,5 @@ std = [ "snowbridge-merkle-tree/std", "snowbridge-outbound-queue-primitives/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/outbound-queue-v2/src/benchmarking.rs b/operator/pallets/outbound-queue-v2/src/benchmarking.rs index 1a498da6..b60e2d65 100644 --- a/operator/pallets/outbound-queue-v2/src/benchmarking.rs +++ b/operator/pallets/outbound-queue-v2/src/benchmarking.rs @@ -21,6 +21,9 @@ use crate::Pallet as OutboundQueue; )] mod benchmarks { use super::*; + use alloc::boxed::Box; + use alloc::vec; + use alloc::vec::Vec; /// Build `Upgrade` message with `MaxMessagePayloadSize`, in the worst-case. fn build_message() -> (Message, OutboundMessage) { diff --git a/operator/pallets/outbound-queue-v2/src/fixture.rs b/operator/pallets/outbound-queue-v2/src/fixture.rs index 7c303b33..c759670c 100644 --- a/operator/pallets/outbound-queue-v2/src/fixture.rs +++ b/operator/pallets/outbound-queue-v2/src/fixture.rs @@ -3,13 +3,13 @@ // Generated, do not edit! // See ethereum client README.md for instructions to generate +use alloc::vec; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, VersionedExecutionPayloadHeader, }; use snowbridge_verification_primitives::{EventFixture, EventProof, Log, Proof}; use sp_core::U256; -use sp_std::vec; pub fn make_submit_delivery_receipt_message() -> EventFixture { EventFixture { diff --git a/operator/pallets/outbound-queue-v2/src/lib.rs b/operator/pallets/outbound-queue-v2/src/lib.rs index 40c03fe3..b36ea9d4 100644 --- a/operator/pallets/outbound-queue-v2/src/lib.rs +++ b/operator/pallets/outbound-queue-v2/src/lib.rs @@ -49,6 +49,8 @@ //! //! * `prove_message`: Generate a merkle proof for a committed message #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + pub mod api; pub mod process_message_impl; pub mod send_message_impl; @@ -93,7 +95,6 @@ use sp_runtime::{ traits::{BlockNumberProvider, Hash, MaybeEquivalence}, DigestItem, }; -use sp_std::prelude::*; pub use types::{OnNewCommitment, PendingOrder, ProcessMessageOriginOf}; pub use weights::WeightInfo; use xcm::latest::{Location, NetworkId}; @@ -107,6 +108,8 @@ pub use pallet::*; #[frame_support::pallet] pub mod pallet { use super::*; + use alloc::boxed::Box; + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; diff --git a/operator/pallets/outbound-queue-v2/src/mock.rs b/operator/pallets/outbound-queue-v2/src/mock.rs index 39ee8c91..599e27f4 100644 --- a/operator/pallets/outbound-queue-v2/src/mock.rs +++ b/operator/pallets/outbound-queue-v2/src/mock.rs @@ -10,6 +10,7 @@ use frame_support::{ }; use codec::{DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::marker::PhantomData; use hex_literal::hex; use scale_info::TypeInfo; use snowbridge_core::{ @@ -23,7 +24,6 @@ use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup, Keccak256}, AccountId32, BuildStorage, FixedU128, }; -use sp_std::marker::PhantomData; use xcm::prelude::Here; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/outbound-queue-v2/src/types.rs b/operator/pallets/outbound-queue-v2/src/types.rs index dccc9a72..5aa498a9 100644 --- a/operator/pallets/outbound-queue-v2/src/types.rs +++ b/operator/pallets/outbound-queue-v2/src/types.rs @@ -7,7 +7,6 @@ use scale_info::TypeInfo; pub use snowbridge_merkle_tree::MerkleProof; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; pub type ProcessMessageOriginOf = as ProcessMessage>::Origin; diff --git a/operator/pallets/proxy-genesis-companion/Cargo.toml b/operator/pallets/proxy-genesis-companion/Cargo.toml index 1e9c634d..2003d21e 100644 --- a/operator/pallets/proxy-genesis-companion/Cargo.toml +++ b/operator/pallets/proxy-genesis-companion/Cargo.toml @@ -13,7 +13,6 @@ frame-system = { workspace = true } pallet-proxy = { workspace = true } scale-info = { workspace = true, features = ["derive"] } sp-runtime = { workspace = true } -sp-std = { workspace = true } [dev-dependencies] pallet-balances = { workspace = true, features = ["insecure_zero_ed", "std"] } @@ -30,7 +29,6 @@ std = [ "pallet-proxy/std", "scale-info/std", "sp-runtime/std", - "sp-std/std", ] try-runtime = [ "frame-support/try-runtime", diff --git a/operator/pallets/proxy-genesis-companion/src/lib.rs b/operator/pallets/proxy-genesis-companion/src/lib.rs index 9711075b..1e18773d 100644 --- a/operator/pallets/proxy-genesis-companion/src/lib.rs +++ b/operator/pallets/proxy-genesis-companion/src/lib.rs @@ -21,6 +21,7 @@ //! obstacles to including it here. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod mock; @@ -32,9 +33,9 @@ pub use pallet::*; #[pallet] pub mod pallet { + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::BlockNumberFor; - use sp_std::vec::Vec; /// Pallet for configuring proxy at genesis #[pallet::pallet] @@ -44,7 +45,11 @@ pub mod pallet { /// This pallet requires pallet-proxy to be installed. #[pallet::config] pub trait Config: - frame_system::Config + pallet_proxy::Config::ProxyType> + frame_system::Config + + pallet_proxy::Config< + ProxyType = ::ProxyType, + BlockNumberProvider = frame_system::Pallet, + > { /// This MUST be the same as in pallet_proxy or it won't compile type ProxyType: MaybeSerializeDeserialize + Clone; diff --git a/operator/pallets/proxy-genesis-companion/src/mock.rs b/operator/pallets/proxy-genesis-companion/src/mock.rs index 116fd2c2..ef57a1d9 100644 --- a/operator/pallets/proxy-genesis-companion/src/mock.rs +++ b/operator/pallets/proxy-genesis-companion/src/mock.rs @@ -17,7 +17,7 @@ //! A minimal runtime including the proxy-genesis-companion pallet use super::*; use crate as proxy_companion; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::{ construct_runtime, derive_impl, parameter_types, traits::{ConstU32, InstanceFilter}, @@ -79,6 +79,7 @@ parameter_types! { Debug, MaxEncodedLen, scale_info::TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, Default, @@ -108,6 +109,7 @@ impl pallet_proxy::Config for Test { type CallHasher = BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl Config for Test { @@ -147,7 +149,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, - ..Default::default() + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/pallets/session-benchmarking/Cargo.toml b/operator/pallets/session-benchmarking/Cargo.toml index 41b64d87..7699c33e 100644 --- a/operator/pallets/session-benchmarking/Cargo.toml +++ b/operator/pallets/session-benchmarking/Cargo.toml @@ -19,7 +19,6 @@ frame-support = { workspace = true } frame-system = { workspace = true } pallet-session = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -30,7 +29,6 @@ std = [ "frame-system/std", "pallet-session/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/system-v2/Cargo.toml b/operator/pallets/system-v2/Cargo.toml index 6d1c14a9..82df1a06 100644 --- a/operator/pallets/system-v2/Cargo.toml +++ b/operator/pallets/system-v2/Cargo.toml @@ -28,7 +28,6 @@ snowbridge-pallet-system = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-executor = { workspace = true } @@ -70,7 +69,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-executor/std", "xcm/std", ] diff --git a/operator/pallets/system-v2/runtime-api/Cargo.toml b/operator/pallets/system-v2/runtime-api/Cargo.toml index 96889507..30ba160c 100644 --- a/operator/pallets/system-v2/runtime-api/Cargo.toml +++ b/operator/pallets/system-v2/runtime-api/Cargo.toml @@ -21,7 +21,6 @@ exclude-from-umbrella = true codec = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-api.workspace = true -sp-std.workspace = true xcm.workspace = true [features] @@ -30,6 +29,5 @@ std = [ "codec/std", "snowbridge-core/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/system-v2/src/benchmarking.rs b/operator/pallets/system-v2/src/benchmarking.rs index b2571f8f..a0f967ca 100644 --- a/operator/pallets/system-v2/src/benchmarking.rs +++ b/operator/pallets/system-v2/src/benchmarking.rs @@ -15,6 +15,7 @@ use xcm::prelude::*; #[benchmarks] mod benchmarks { use super::*; + use alloc::vec::Vec; #[benchmark] fn register_token() -> Result<(), BenchmarkError> { diff --git a/operator/pallets/system-v2/src/lib.rs b/operator/pallets/system-v2/src/lib.rs index 22a0f015..2ddd2821 100644 --- a/operator/pallets/system-v2/src/lib.rs +++ b/operator/pallets/system-v2/src/lib.rs @@ -16,6 +16,8 @@ //! //! * [`Call::register_token`]: Register a token location as a wrapped ERC20 contract on Ethereum. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + #[cfg(test)] mod mock; @@ -29,6 +31,8 @@ pub mod api; pub mod weights; pub use weights::*; +use alloc::boxed::Box; +use alloc::vec; use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; use snowbridge_core::{AgentIdOf as LocationHashOf, AssetMetadata, TokenId, TokenIdOf}; @@ -40,7 +44,6 @@ use snowbridge_pallet_system::{ForeignToNativeId, NativeToForeignId}; use sp_core::{H160, H256}; use sp_io::hashing::blake2_256; use sp_runtime::traits::MaybeEquivalence; -use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/system/Cargo.toml b/operator/pallets/system/Cargo.toml index 601a6783..24b0e622 100644 --- a/operator/pallets/system/Cargo.toml +++ b/operator/pallets/system/Cargo.toml @@ -25,7 +25,6 @@ snowbridge-outbound-queue-primitives.workspace = true sp-core.workspace = true sp-io.workspace = true sp-runtime.workspace = true -sp-std.workspace = true xcm.workspace = true xcm-executor.workspace = true @@ -63,7 +62,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-executor/std", "xcm/std", ] diff --git a/operator/pallets/system/runtime-api/Cargo.toml b/operator/pallets/system/runtime-api/Cargo.toml index 72d53e17..55a3a05b 100644 --- a/operator/pallets/system/runtime-api/Cargo.toml +++ b/operator/pallets/system/runtime-api/Cargo.toml @@ -21,7 +21,6 @@ exclude-from-umbrella = true codec = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-api.workspace = true -sp-std.workspace = true xcm.workspace = true [features] @@ -30,6 +29,5 @@ std = [ "codec/std", "snowbridge-core/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/system/src/benchmarking.rs b/operator/pallets/system/src/benchmarking.rs index e8c0f6dd..ced6c053 100644 --- a/operator/pallets/system/src/benchmarking.rs +++ b/operator/pallets/system/src/benchmarking.rs @@ -15,6 +15,8 @@ use xcm::prelude::*; #[benchmarks] mod benchmarks { use super::*; + use alloc::boxed::Box; + use alloc::vec::Vec; #[benchmark] fn upgrade() -> Result<(), BenchmarkError> { diff --git a/operator/pallets/system/src/lib.rs b/operator/pallets/system/src/lib.rs index 20b37a37..2eb51db1 100644 --- a/operator/pallets/system/src/lib.rs +++ b/operator/pallets/system/src/lib.rs @@ -18,6 +18,8 @@ //! //! * [`Call::register_token`]: Register a token location as a wrapped ERC20 contract on Ethereum. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + #[cfg(test)] mod mock; @@ -32,6 +34,7 @@ pub mod api; pub mod weights; pub use weights::*; +use alloc::boxed::Box; use frame_support::{ pallet_prelude::*, traits::{ @@ -53,7 +56,6 @@ use snowbridge_outbound_queue_primitives::{ use sp_core::{RuntimeDebug, H160, H256}; use sp_io::hashing::blake2_256; use sp_runtime::{traits::MaybeEquivalence, DispatchError, SaturatedConversion}; -use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/system/src/migration.rs b/operator/pallets/system/src/migration.rs index 7a6aacd0..f7ee316c 100644 --- a/operator/pallets/system/src/migration.rs +++ b/operator/pallets/system/src/migration.rs @@ -2,6 +2,8 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Governance API for controlling the Ethereum side of the bridge use super::*; +use alloc::vec::Vec; +use core::marker::PhantomData; use frame_support::{ migrations::VersionedMigration, pallet_prelude::*, @@ -9,7 +11,6 @@ use frame_support::{ weights::Weight, }; use log; -use sp_std::marker::PhantomData; #[cfg(feature = "try-runtime")] use sp_runtime::TryRuntimeError; @@ -22,6 +23,9 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); pub mod v0 { use super::*; + #[cfg(feature = "try-runtime")] + use alloc::vec; + pub struct InitializeOnUpgrade( PhantomData<(T, BridgeHubParaId, AssetHubParaId)>, ); diff --git a/operator/pallets/system/src/mock.rs b/operator/pallets/system/src/mock.rs index d3572eaf..b513b375 100644 --- a/operator/pallets/system/src/mock.rs +++ b/operator/pallets/system/src/mock.rs @@ -49,7 +49,17 @@ mod pallet_xcm_origin { // Insert this custom Origin into the aggregate RuntimeOrigin #[pallet::origin] - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] + #[derive( + PartialEq, + Eq, + Clone, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + DecodeWithMemTracking, + MaxEncodedLen, + )] pub struct Origin(pub Location); impl From for Origin { diff --git a/operator/precompiles/batch/Cargo.toml b/operator/precompiles/batch/Cargo.toml index db994685..7bc5775d 100644 --- a/operator/precompiles/batch/Cargo.toml +++ b/operator/precompiles/batch/Cargo.toml @@ -13,7 +13,6 @@ frame-system = { workspace = true } parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -42,5 +41,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/batch/src/lib.rs b/operator/precompiles/batch/src/lib.rs index 86b02638..aa3dd99f 100644 --- a/operator/precompiles/batch/src/lib.rs +++ b/operator/precompiles/batch/src/lib.rs @@ -17,13 +17,16 @@ //! Precompile to interact with pallet_balances instances using the ERC20 interface standard. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec; +use alloc::vec::Vec; +use core::{iter::repeat, marker::PhantomData}; use evm::{ExitError, ExitReason}; use fp_evm::{Context, Log, PrecompileFailure, PrecompileHandle, Transfer}; use frame_support::traits::ConstU32; use precompile_utils::{evm::costs::call_cost, prelude::*}; use sp_core::{H160, U256}; -use sp_std::{iter::repeat, marker::PhantomData, vec, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/batch/src/mock.rs b/operator/precompiles/batch/src/mock.rs index 5b51a83e..85e2ada3 100644 --- a/operator/precompiles/batch/src/mock.rs +++ b/operator/precompiles/batch/src/mock.rs @@ -142,6 +142,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -196,6 +198,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -206,6 +209,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( Revert.into(), hex_literal::hex!("1460006000fd").to_vec(), + None, ); }); ext diff --git a/operator/precompiles/batch/src/tests.rs b/operator/precompiles/batch/src/tests.rs index 61883b45..655a9cb0 100644 --- a/operator/precompiles/batch/src/tests.rs +++ b/operator/precompiles/batch/src/tests.rs @@ -45,6 +45,7 @@ fn evm_call(from: impl Into, input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/call-permit/Cargo.toml b/operator/precompiles/call-permit/Cargo.toml index 6d74c82e..ddc55831 100644 --- a/operator/precompiles/call-permit/Cargo.toml +++ b/operator/precompiles/call-permit/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = [ "max-encoded-len" ] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = [ "with-codec" ] } @@ -43,5 +42,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/call-permit/src/lib.rs b/operator/precompiles/call-permit/src/lib.rs index d0364235..a1037f54 100644 --- a/operator/precompiles/call-permit/src/lib.rs +++ b/operator/precompiles/call-permit/src/lib.rs @@ -15,7 +15,9 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use core::marker::PhantomData; use evm::ExitReason; use fp_evm::{Context, ExitRevert, PrecompileFailure, PrecompileHandle, Transfer}; @@ -29,7 +31,6 @@ use precompile_utils::{evm::costs::call_cost, prelude::*}; use sp_core::{H160, H256, U256}; use sp_io::hashing::keccak_256; use sp_runtime::traits::UniqueSaturatedInto; -use sp_std::vec::Vec; #[cfg(test)] mod mock; diff --git a/operator/precompiles/call-permit/src/mock.rs b/operator/precompiles/call-permit/src/mock.rs index efe85f83..4eb53cb4 100644 --- a/operator/precompiles/call-permit/src/mock.rs +++ b/operator/precompiles/call-permit/src/mock.rs @@ -126,6 +126,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -180,6 +182,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -190,6 +193,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( Revert.into(), hex_literal::hex!("1460006000fd").to_vec(), + None, ); }); ext diff --git a/operator/precompiles/collective/Cargo.toml b/operator/precompiles/collective/Cargo.toml index 7cdc5876..f605d8db 100644 --- a/operator/precompiles/collective/Cargo.toml +++ b/operator/precompiles/collective/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -46,6 +45,5 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] runtime-benchmarks = [] diff --git a/operator/precompiles/collective/src/lib.rs b/operator/precompiles/collective/src/lib.rs index 885bb8d9..95afa826 100644 --- a/operator/precompiles/collective/src/lib.rs +++ b/operator/precompiles/collective/src/lib.rs @@ -17,7 +17,10 @@ //! Precompile to interact with pallet_collective instances. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; use core::marker::PhantomData; use fp_account::AccountId20; use fp_evm::Log; @@ -32,7 +35,6 @@ use parity_scale_codec::{DecodeLimit as _, MaxEncodedLen}; use precompile_utils::prelude::*; use sp_core::{Decode, Get, H160, H256}; use sp_runtime::traits::Dispatchable; -use sp_std::{boxed::Box, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/collective/src/mock.rs b/operator/precompiles/collective/src/mock.rs index 8a27223e..bbdf6833 100644 --- a/operator/precompiles/collective/src/mock.rs +++ b/operator/precompiles/collective/src/mock.rs @@ -143,6 +143,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -298,6 +300,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/conviction-voting/Cargo.toml b/operator/precompiles/conviction-voting/Cargo.toml index 716d0247..a0a91dae 100644 --- a/operator/precompiles/conviction-voting/Cargo.toml +++ b/operator/precompiles/conviction-voting/Cargo.toml @@ -15,7 +15,6 @@ pallet-conviction-voting = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -44,7 +43,6 @@ std = [ "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/conviction-voting/src/lib.rs b/operator/precompiles/conviction-voting/src/lib.rs index e46fd861..bfaffb2a 100644 --- a/operator/precompiles/conviction-voting/src/lib.rs +++ b/operator/precompiles/conviction-voting/src/lib.rs @@ -15,11 +15,13 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::{Currency, Polling}; -use frame_system::pallet_prelude::BlockNumberFor; use pallet_conviction_voting::Call as ConvictionVotingCall; use pallet_conviction_voting::{ AccountVote, Casting, ClassLocksFor, Conviction, Delegating, Tally, TallyOf, Vote, Voting, @@ -29,8 +31,6 @@ use pallet_evm::{AddressMapping, Log}; use precompile_utils::prelude::*; use sp_core::{Get, MaxEncodedLen, H160, H256, U256}; use sp_runtime::traits::{Dispatchable, StaticLookup}; -use sp_std::marker::PhantomData; -use sp_std::vec::Vec; #[cfg(test)] mod mock; @@ -56,10 +56,10 @@ type ClassOf = <::Polls as ::MaxTurnout, >, >>::Class; -type VotingOf = Voting< +type VotingOf = Voting< BalanceOf, ::AccountId, - BlockNumberFor, + pallet_conviction_voting::BlockNumberFor, <::Polls as Polling>>::Index, ::MaxVotes, >; @@ -109,18 +109,16 @@ impl ConvictionVotingPrecompile where Runtime: pallet_conviction_voting::Config + pallet_evm::Config + frame_system::Config, BalanceOf: TryFrom + Into, - ::RuntimeCall: - Dispatchable + GetDispatchInfo, - <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, + ::RuntimeOrigin: From>, Runtime::AccountId: Into, - ::RuntimeCall: From>, + Runtime::RuntimeCall: From>, IndexOf: TryFrom + TryInto, ClassOf: TryFrom + TryInto, ::Polls: Polling< Tally< <::Currency as Currency< - ::AccountId, + Runtime::AccountId, >>::Balance, ::MaxTurnout, >, diff --git a/operator/precompiles/conviction-voting/src/mock.rs b/operator/precompiles/conviction-voting/src/mock.rs index b0e43275..cdff74bc 100644 --- a/operator/precompiles/conviction-voting/src/mock.rs +++ b/operator/precompiles/conviction-voting/src/mock.rs @@ -16,6 +16,7 @@ //! Test utilities use super::*; +use alloc::collections::btree_map::BTreeMap; use frame_support::{ construct_runtime, parameter_types, traits::{Everything, PollStatus, Polling, TotalIssuanceOf}, @@ -29,7 +30,6 @@ use sp_runtime::{ traits::{BlakeTwo256, ConstU32, ConstU64, IdentityLookup}, BuildStorage, DispatchError, Perbill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "runtime-benchmarks")] use frame_support::traits::VoteTally; @@ -133,6 +133,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -266,6 +268,8 @@ impl pallet_conviction_voting::Config for Runtime { type WeightInfo = (); type MaxTurnout = TotalIssuanceOf; type Polls = TestPolls; + type BlockNumberProvider = frame_system::Pallet; + type VotingHooks = (); } pub(crate) struct ExtBuilder { @@ -294,6 +298,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/conviction-voting/src/tests.rs b/operator/precompiles/conviction-voting/src/tests.rs index 36f45fe1..32450ded 100644 --- a/operator/precompiles/conviction-voting/src/tests.rs +++ b/operator/precompiles/conviction-voting/src/tests.rs @@ -45,6 +45,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/datahaven-native-transfer/Cargo.toml b/operator/precompiles/datahaven-native-transfer/Cargo.toml index bbc6fb04..c5812dbd 100644 --- a/operator/precompiles/datahaven-native-transfer/Cargo.toml +++ b/operator/precompiles/datahaven-native-transfer/Cargo.toml @@ -13,7 +13,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -48,6 +47,5 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/precompiles/datahaven-native-transfer/src/lib.rs b/operator/precompiles/datahaven-native-transfer/src/lib.rs index 6cff5810..82a94696 100644 --- a/operator/precompiles/datahaven-native-transfer/src/lib.rs +++ b/operator/precompiles/datahaven-native-transfer/src/lib.rs @@ -21,6 +21,7 @@ #![cfg_attr(not(feature = "std"), no_std)] +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::fungible::Inspect; @@ -31,7 +32,6 @@ use pallet_evm::AddressMapping; use precompile_utils::prelude::*; use sp_core::{H160, U256}; use sp_runtime::traits::Dispatchable; -use sp_std::marker::PhantomData; /// Solidity selector for the TokensLocked event: /// keccak256("TokensLocked(address,uint256)") diff --git a/operator/precompiles/datahaven-native-transfer/src/mock.rs b/operator/precompiles/datahaven-native-transfer/src/mock.rs index 48dc9627..ea2f2624 100644 --- a/operator/precompiles/datahaven-native-transfer/src/mock.rs +++ b/operator/precompiles/datahaven-native-transfer/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use frame_support::traits::Everything; use frame_support::{construct_runtime, parameter_types, weights::Weight}; use pallet_evm::{EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider}; -use parity_scale_codec::{Decode, Encode}; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode}; use precompile_utils::{mock_account, precompile_set::*, testing::MockAccount}; use snowbridge_core::TokenId; use snowbridge_outbound_queue_primitives::v1::Ticket; @@ -146,6 +146,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -194,7 +196,7 @@ impl SendMessage for MockOutboundQueue { } } -#[derive(Clone, Encode, Decode)] +#[derive(Clone, Encode, Decode, DecodeWithMemTracking)] pub struct MockTicket; impl Ticket for MockTicket { @@ -272,6 +274,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/erc20-balances/Cargo.toml b/operator/precompiles/erc20-balances/Cargo.toml index 787ee63d..059b98da 100644 --- a/operator/precompiles/erc20-balances/Cargo.toml +++ b/operator/precompiles/erc20-balances/Cargo.toml @@ -16,7 +16,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -46,5 +45,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/erc20-balances/src/eip2612.rs b/operator/precompiles/erc20-balances/src/eip2612.rs index da764a45..ec78e316 100644 --- a/operator/precompiles/erc20-balances/src/eip2612.rs +++ b/operator/precompiles/erc20-balances/src/eip2612.rs @@ -15,6 +15,7 @@ // along with Moonbeam. If not, see . use super::*; +use alloc::vec::Vec; use frame_support::{ ensure, traits::{Get, Time}, @@ -22,7 +23,6 @@ use frame_support::{ use sp_core::H256; use sp_io::hashing::keccak_256; use sp_runtime::traits::UniqueSaturatedInto; -use sp_std::vec::Vec; /// EIP2612 permit typehash. pub const PERMIT_TYPEHASH: [u8; 32] = keccak256!( @@ -39,9 +39,11 @@ pub struct Eip2612(PhantomData<(Runtime, Metad impl Eip2612 where Runtime: pallet_balances::Config + pallet_evm::Config, - Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, - Runtime::RuntimeCall: From>, - ::RuntimeOrigin: From>, + ::RuntimeCall: + Dispatchable + GetDispatchInfo, + ::RuntimeCall: From>, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: + From>, BalanceOf: TryFrom + Into, Metadata: Erc20Metadata, Instance: InstanceToPrefix + 'static, diff --git a/operator/precompiles/erc20-balances/src/lib.rs b/operator/precompiles/erc20-balances/src/lib.rs index af0a0032..0c283970 100644 --- a/operator/precompiles/erc20-balances/src/lib.rs +++ b/operator/precompiles/erc20-balances/src/lib.rs @@ -17,7 +17,10 @@ //! Precompile to interact with pallet_balances instances using the ERC20 interface standard. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use core::convert::{TryFrom, TryInto}; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::{ dispatch::{GetDispatchInfo, PostDispatchInfo}, @@ -33,10 +36,6 @@ use pallet_balances::pallet::{ use pallet_evm::AddressMapping; use precompile_utils::prelude::*; use sp_core::{H160, H256, U256}; -use sp_std::{ - convert::{TryFrom, TryInto}, - marker::PhantomData, -}; mod eip2612; use eip2612::Eip2612; diff --git a/operator/precompiles/erc20-balances/src/mock.rs b/operator/precompiles/erc20-balances/src/mock.rs index aaa2a64d..35bc3727 100644 --- a/operator/precompiles/erc20-balances/src/mock.rs +++ b/operator/precompiles/erc20-balances/src/mock.rs @@ -127,6 +127,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -207,6 +209,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/erc20-balances/src/tests.rs b/operator/precompiles/erc20-balances/src/tests.rs index e4eb35c1..b14d8930 100644 --- a/operator/precompiles/erc20-balances/src/tests.rs +++ b/operator/precompiles/erc20-balances/src/tests.rs @@ -280,7 +280,7 @@ fn transfer() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -370,7 +370,7 @@ fn transfer_from() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -466,7 +466,7 @@ fn transfer_from_self() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -576,6 +576,7 @@ fn deposit(data: Vec) { None, // max priority None, // nonce vec![], // access list + vec![], // authorization list ) .expect("it works"); @@ -692,6 +693,7 @@ fn deposit_zero() { None, // max priority None, // nonce vec![], // access list + vec![], // authorization list ) .expect("it works"); diff --git a/operator/precompiles/identity/Cargo.toml b/operator/precompiles/identity/Cargo.toml index 127e2707..0162614f 100644 --- a/operator/precompiles/identity/Cargo.toml +++ b/operator/precompiles/identity/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = [ "max-encoded-len" ] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } pallet-identity = { workspace = true } # Frontier @@ -22,6 +21,10 @@ fp-evm = { workspace = true } pallet-evm = { workspace = true, features = [ "forbid-evm-reentrancy" ] } precompile-utils = { workspace = true } +# Temp +## TODO/ remove it once we move to 2506 +serde = { workspace = true } + [dev-dependencies] pallet-balances = { workspace = true, features = [ "std" ] } @@ -47,7 +50,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/identity/src/lib.rs b/operator/precompiles/identity/src/lib.rs index 7b2e29ee..113d434b 100644 --- a/operator/precompiles/identity/src/lib.rs +++ b/operator/precompiles/identity/src/lib.rs @@ -20,6 +20,9 @@ extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::sp_runtime::traits::StaticLookup; @@ -30,9 +33,6 @@ use parity_scale_codec::MaxEncodedLen; use precompile_utils::prelude::*; use sp_core::{ConstU32, Get, H160, H256, U256}; use sp_runtime::traits::Dispatchable; -use sp_std::boxed::Box; -use sp_std::marker::PhantomData; -use sp_std::vec::Vec; #[cfg(test)] mod mock; @@ -78,8 +78,10 @@ where >, Runtime::AccountId: Into, Runtime::Hash: From, - Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, - ::RuntimeOrigin: From>, + ::RuntimeCall: + Dispatchable + GetDispatchInfo, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: + From>, Runtime::RuntimeCall: From>, BalanceOf: TryFrom + Into + solidity::Codec, ::AddressMapping: AddressMapping, diff --git a/operator/precompiles/identity/src/mock.rs b/operator/precompiles/identity/src/mock.rs index b984730f..e91b7a7b 100644 --- a/operator/precompiles/identity/src/mock.rs +++ b/operator/precompiles/identity/src/mock.rs @@ -25,10 +25,12 @@ use frame_system::{EnsureRoot, EnsureSignedBy}; use pallet_evm::{EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider}; use pallet_identity::legacy::IdentityInfo; use precompile_utils::mock_account; -use precompile_utils::{ - precompile_set::*, - testing::{MockAccount, MockSignature}, -}; +use precompile_utils::testing::MockSigner; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; +use sp_core::keccak_256; +use sp_core::{Decode, DecodeWithMemTracking, Encode}; use sp_core::{H256, U256}; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -40,6 +42,60 @@ pub type Balance = u128; type Block = frame_system::mocking::MockBlockU32; +// TODO: remove this chunk once we moved to 2506. `MockSignature` was missing the `DecodeWithMemTracking` trait in frontier 2503. +// We should be able to use the one from frontier when migrating to 2506 +#[derive( + Eq, + PartialEq, + Clone, + Encode, + Decode, + DecodeWithMemTracking, + sp_core::RuntimeDebug, + TypeInfo, + Serialize, + Deserialize, +)] +pub struct MockSignature(sp_core::ecdsa::Signature); + +impl From for MockSignature { + fn from(x: sp_core::ecdsa::Signature) -> Self { + MockSignature(x) + } +} + +impl From for MockSignature { + fn from(signature: sp_runtime::MultiSignature) -> Self { + match signature { + sp_runtime::MultiSignature::Ed25519(_) => { + panic!("Ed25519 not supported for MockSignature") + } + sp_runtime::MultiSignature::Sr25519(_) => { + panic!("Sr25519 not supported for MockSignature") + } + sp_runtime::MultiSignature::Ecdsa(sig) => Self(sig), + } + } +} + +impl sp_runtime::traits::Verify for MockSignature { + type Signer = MockSigner; + fn verify>(&self, mut msg: L, signer: &MockAccount) -> bool { + let mut m = [0u8; 32]; + m.copy_from_slice(keccak_256(msg.get()).as_slice()); + match sp_io::crypto::secp256k1_ecdsa_recover(self.0.as_ref(), &m) { + Ok(pubkey) => { + MockAccount(sp_core::H160::from_slice( + &keccak_256(&pubkey).as_slice()[12..32], + )) == *signer + } + Err(sp_io::EcdsaVerifyError::BadRS) => false, + Err(sp_io::EcdsaVerifyError::BadV) => false, + Err(sp_io::EcdsaVerifyError::BadSignature) => false, + } + } +} + construct_runtime!( pub enum Runtime { System: frame_system, @@ -136,6 +192,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -240,6 +298,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/identity/src/tests.rs b/operator/precompiles/identity/src/tests.rs index 7efa1519..e3d25173 100644 --- a/operator/precompiles/identity/src/tests.rs +++ b/operator/precompiles/identity/src/tests.rs @@ -49,6 +49,7 @@ fn evm_call(source: impl Into, input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/precompile-registry/src/lib.rs b/operator/precompiles/precompile-registry/src/lib.rs index e81bb477..5e52d3fb 100644 --- a/operator/precompiles/precompile-registry/src/lib.rs +++ b/operator/precompiles/precompile-registry/src/lib.rs @@ -92,7 +92,7 @@ where // AccountCodes: Blake2128(16) + H160(20) + Vec(5) // We asume an existing precompile can hold at most 5 bytes worth of dummy code. handle.record_db_read::(41)?; - pallet_evm::Pallet::::create_account(address.0, DUMMY_CODE.to_vec()); + let _ = pallet_evm::Pallet::::create_account(address.0, DUMMY_CODE.to_vec(), None); Ok(()) } diff --git a/operator/precompiles/precompile-registry/src/mock.rs b/operator/precompiles/precompile-registry/src/mock.rs index 45f364ce..c1a66780 100644 --- a/operator/precompiles/precompile-registry/src/mock.rs +++ b/operator/precompiles/precompile-registry/src/mock.rs @@ -127,6 +127,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -181,6 +183,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -191,6 +194,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( SmartContract.into(), b"SmartContract".to_vec(), + None, ); }); ext diff --git a/operator/precompiles/preimage/Cargo.toml b/operator/precompiles/preimage/Cargo.toml index 757540bd..a5988746 100644 --- a/operator/precompiles/preimage/Cargo.toml +++ b/operator/precompiles/preimage/Cargo.toml @@ -14,7 +14,6 @@ pallet-preimage = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -41,8 +40,6 @@ std = [ "pallet-evm/std", "pallet-preimage/std", "parity-scale-codec/std", - "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/precompiles/preimage/src/lib.rs b/operator/precompiles/preimage/src/lib.rs index 4a93a378..d5133e12 100644 --- a/operator/precompiles/preimage/src/lib.rs +++ b/operator/precompiles/preimage/src/lib.rs @@ -15,7 +15,10 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::ConstU32; @@ -24,7 +27,6 @@ use pallet_preimage::Call as PreimageCall; use precompile_utils::prelude::*; use sp_core::{Hasher, H256}; use sp_runtime::traits::Dispatchable; -use sp_std::{marker::PhantomData, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/preimage/src/mock.rs b/operator/precompiles/preimage/src/mock.rs index 2c520ef1..6bb4279a 100644 --- a/operator/precompiles/preimage/src/mock.rs +++ b/operator/precompiles/preimage/src/mock.rs @@ -125,6 +125,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -187,6 +189,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/preimage/src/tests.rs b/operator/precompiles/preimage/src/tests.rs index 626c22f4..dddddd7f 100644 --- a/operator/precompiles/preimage/src/tests.rs +++ b/operator/precompiles/preimage/src/tests.rs @@ -34,6 +34,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/proxy/Cargo.toml b/operator/precompiles/proxy/Cargo.toml index 6760477d..c2dda344 100644 --- a/operator/precompiles/proxy/Cargo.toml +++ b/operator/precompiles/proxy/Cargo.toml @@ -15,7 +15,6 @@ pallet-proxy = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -47,5 +46,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-runtime/std", - "sp-std/std", ] \ No newline at end of file diff --git a/operator/precompiles/proxy/src/lib.rs b/operator/precompiles/proxy/src/lib.rs index 031e6afc..bb54449e 100644 --- a/operator/precompiles/proxy/src/lib.rs +++ b/operator/precompiles/proxy/src/lib.rs @@ -15,7 +15,10 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use evm::ExitReason; use fp_evm::{ Context, PrecompileFailure, PrecompileHandle, Transfer, ACCOUNT_CODES_METADATA_PROOF_SIZE, @@ -33,7 +36,6 @@ use sp_runtime::{ traits::{ConstU32, Dispatchable, StaticLookup, Zero}, SaturatedConversion, }; -use sp_std::marker::PhantomData; /// System account size in bytes = Pallet_Name_Hash (16) + Storage_name_hash (16) + /// Blake2_128Concat (16) + AccountId (20) + AccountInfo (4 + 12 + AccountData (4* 16)) = 148 @@ -57,11 +59,12 @@ where ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { fn is_allowed(_caller: H160, selector: Option) -> bool { match selector { @@ -85,16 +88,17 @@ where Runtime: pallet_proxy::Config + pallet_evm::Config + frame_system::Config + pallet_balances::Config, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::ProxyType: Decode + EvmProxyCallFilter, ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { fn is_allowed(_caller: H160, selector: Option) -> bool { match selector { @@ -147,16 +151,17 @@ where Runtime: pallet_proxy::Config + pallet_evm::Config + frame_system::Config + pallet_balances::Config, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::ProxyType: Decode + EvmProxyCallFilter, ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { /// Register a proxy account for the sender that is able to make calls on its behalf. /// The dispatch origin for this call must be Signed. @@ -198,8 +203,8 @@ where return Err(revert("Cannot add more than one proxy")); } - let delegate: ::Source = - Runtime::Lookup::unlookup(delegate.clone()); + let delegate: <::Lookup as StaticLookup>::Source = + ::Lookup::unlookup(delegate.clone()); let call: ProxyCall = ProxyCall::::add_proxy { delegate, proxy_type, @@ -233,8 +238,8 @@ where })?; let delay = delay.into(); - let delegate: ::Source = - Runtime::Lookup::unlookup(delegate.clone()); + let delegate: <::Lookup as StaticLookup>::Source = + ::Lookup::unlookup(delegate.clone()); let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call: ProxyCall = ProxyCall::::remove_proxy { delegate, @@ -413,7 +418,7 @@ where let transfer = if value.is_zero() { None } else { - let contract_address: Runtime::AccountId = + let contract_address: ::AccountId = Runtime::AddressMapping::into_account_id(handle.context().address); // Send back funds received by the precompile. @@ -421,12 +426,12 @@ where handle, Some(contract_address).into(), pallet_balances::Call::::transfer_allow_death { - dest: Runtime::Lookup::unlookup(who), + dest: ::Lookup::unlookup(who), value: { let balance: >::Balance = value.try_into().map_err(|_| PrecompileFailure::Revert { exit_status: fp_evm::ExitRevert::Reverted, - output: sp_std::vec::Vec::new(), + output: Vec::new(), })?; balance }, diff --git a/operator/precompiles/proxy/src/mock.rs b/operator/precompiles/proxy/src/mock.rs index 3985182e..394a1787 100644 --- a/operator/precompiles/proxy/src/mock.rs +++ b/operator/precompiles/proxy/src/mock.rs @@ -168,6 +168,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressAlways; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -269,6 +271,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = BlakeTwo256; type AnnouncementDepositBase = (); type AnnouncementDepositFactor = (); + type BlockNumberProvider = (); } /// Build test externalities, prepopulated with data for testing democracy precompiles @@ -298,6 +301,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/proxy/src/tests.rs b/operator/precompiles/proxy/src/tests.rs index b7d7c906..bf3a60b6 100644 --- a/operator/precompiles/proxy/src/tests.rs +++ b/operator/precompiles/proxy/src/tests.rs @@ -551,6 +551,7 @@ fn test_nested_evm_bypass_proxy_should_allow_elevating_proxy_type() { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), }); // call the evm call in a proxy call @@ -603,19 +604,20 @@ fn fails_if_called_by_smart_contract() { #[test] fn succeed_if_called_by_precompile() { + // AddressU64<2> is registered in the precompile set as RevertPrecompile and is the only + // precompile allowed to call Proxy via CallableByPrecompile>>. + let precompile2 = MockAccount::from_u64(2); ExtBuilder::default() - .with_balances(vec![(Alice.into(), 1000), (Bob.into(), 1000)]) + .with_balances(vec![ + (Alice.into(), 1000), + (Bob.into(), 1000), + (precompile2.into(), 1000), + ]) .build() .execute_with(|| { - // Set dummy code to Alice address as it if was a precompile. - pallet_evm::AccountCodes::::insert( - H160::from(Alice), - vec![0x60, 0x00, 0x60, 0x00, 0xfd], - ); - PrecompilesValue::get() .prepare_test( - Alice, + precompile2, Precompile1, PCall::add_proxy { delegate: Address(Bob.into()), diff --git a/operator/precompiles/referenda/Cargo.toml b/operator/precompiles/referenda/Cargo.toml index e8451753..0e2b79dc 100644 --- a/operator/precompiles/referenda/Cargo.toml +++ b/operator/precompiles/referenda/Cargo.toml @@ -15,7 +15,6 @@ pallet-referenda = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -47,7 +46,6 @@ std = [ "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/referenda/src/lib.rs b/operator/precompiles/referenda/src/lib.rs index d5687774..bd6bfa97 100644 --- a/operator/precompiles/referenda/src/lib.rs +++ b/operator/precompiles/referenda/src/lib.rs @@ -15,7 +15,11 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; +use core::{marker::PhantomData, str::FromStr}; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::{ @@ -29,8 +33,8 @@ use pallet_referenda::{ use parity_scale_codec::{Encode, MaxEncodedLen}; use precompile_utils::prelude::*; use sp_core::{H160, H256, U256}; +use sp_runtime::str_array; use sp_runtime::traits::Dispatchable; -use sp_std::{boxed::Box, marker::PhantomData, str::FromStr, vec::Vec}; #[cfg(test)] mod mock; @@ -39,7 +43,7 @@ mod tests; pub const CALL_DATA_LIMIT: u32 = 2u32.pow(16); -type BlockNumberFor = frame_system::pallet_prelude::BlockNumberFor; +type BlockNumberFor = pallet_referenda::BlockNumberFor; type BalanceOf = <::Currency as Currency< ::AccountId, >>::Balance; @@ -202,7 +206,7 @@ where fn track_ids(_handle: &mut impl PrecompileHandle) -> EvmResult> { let track_ids: Vec = Runtime::Tracks::tracks() .into_iter() - .filter_map(|(track_id, _)| (*track_id).try_into().ok()) + .filter_map(|track| track.id.try_into().ok()) .collect(); Ok(track_ids) @@ -215,21 +219,18 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("Track id type").into()) .in_field("trackId")?; - let (_, track_info) = Runtime::Tracks::tracks() - .iter() - .find(|(id, _)| *id == track_id) + let track = Runtime::Tracks::tracks() + .find(|track| track.id == track_id) .ok_or(RevertReason::custom("No such track").in_field("trackId"))?; + let track_info = &track.info; // trim the nulls bytes at the end of the name // caused by this https://github.com/paritytech/polkadot-sdk/pull/2072 let track_name_trimmed: &[u8] = track_info .name - .as_bytes() .iter() .rposition(|&b| b != 0) - .map_or(track_info.name.as_bytes(), |pos| { - &track_info.name.as_bytes()[..=pos] - }); + .map_or(&[], |pos| &track_info.name[..=pos]); Ok(TrackInfo { name: track_name_trimmed.into(), @@ -246,19 +247,22 @@ where /// Use Runtime::Tracks::tracks to get the origin for input trackId fn track_id_to_origin(track_id: TrackIdOf) -> EvmResult>> { - let (_, track_info) = Runtime::Tracks::tracks() - .iter() - .find(|(id, _)| *id == track_id) + let track = Runtime::Tracks::tracks() + .find(|track| track.id == track_id) .ok_or(RevertReason::custom("No such track").in_field("trackId"))?; - let origin = if track_info.name == "root" { + let track_info = &track.info; + + let origin = if track_info.name == str_array("root") { frame_system::RawOrigin::Root.into() } else { - GovOrigin::from_str(track_info.name) - .map_err(|_| { - RevertReason::custom("Custom origin does not exist for {track_info.name}") - .in_field("trackId") - })? - .into() + GovOrigin::from_str(str::from_utf8(&track_info.name).map_err(|_| { + RevertReason::custom("Track name is not valid UTF-8").in_field("trackId") + })?) + .map_err(|_| { + RevertReason::custom("Custom origin does not exist for {track_info.name}") + .in_field("trackId") + })? + .into() }; Ok(Box::new(origin)) } diff --git a/operator/precompiles/referenda/src/mock.rs b/operator/precompiles/referenda/src/mock.rs index 661c11db..903f476f 100644 --- a/operator/precompiles/referenda/src/mock.rs +++ b/operator/precompiles/referenda/src/mock.rs @@ -18,6 +18,7 @@ use super::*; +use alloc::borrow::Cow; use frame_support::pallet_prelude::*; use frame_support::traits::VoteTally; use frame_support::{ @@ -29,6 +30,7 @@ use frame_system::RawOrigin; use pallet_evm::{ EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider, SubstrateBlockHashMapping, }; +use pallet_referenda::Track; use pallet_referenda::{Curve, TrackInfo, TracksInfo}; use precompile_utils::{precompile_set::*, testing::MockAccount}; use sp_core::{H256, U256}; @@ -36,7 +38,7 @@ use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, BuildStorage, Perbill, }; -use sp_std::{str::FromStr, vec::Vec}; +use std::{str::FromStr, vec::Vec}; pub type AccountId = MockAccount; pub type Balance = u128; @@ -164,6 +166,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -217,6 +221,7 @@ impl pallet_scheduler::Config for Runtime { type WeightInfo = (); type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; + type BlockNumberProvider = (); } // Preimage configuration @@ -244,7 +249,9 @@ parameter_types! { pub struct TestTracksInfo; // Simple tally implementation for testing -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive( + Debug, Clone, PartialEq, Eq, Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen, +)] pub struct Tally { pub ayes: u128, pub nays: u128, @@ -274,7 +281,7 @@ impl Get)>> for TestTracksInfo { ( 0, TrackInfo { - name: "root", + name: str_array("root"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -296,7 +303,7 @@ impl Get)>> for TestTracksInfo { ( 1, TrackInfo { - name: "none", + name: str_array("none"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -323,12 +330,12 @@ impl TracksInfo for TestTracksInfo { type Id = u8; type RuntimeOrigin = OriginCaller; - fn tracks() -> &'static [(Self::Id, TrackInfo)] { - static TRACKS: &[(u8, TrackInfo)] = &[ - ( - 0, - TrackInfo { - name: "root", + fn tracks() -> impl Iterator>> { + static DATA: [Track; 2] = [ + Track { + id: 0, + info: TrackInfo { + name: str_array("root"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -346,11 +353,11 @@ impl TracksInfo for TestTracksInfo { ceil: Perbill::from_percent(50), }, }, - ), - ( - 1, - TrackInfo { - name: "none", + }, + Track { + id: 1, + info: TrackInfo { + name: str_array("none"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -368,9 +375,9 @@ impl TracksInfo for TestTracksInfo { ceil: Perbill::from_percent(50), }, }, - ), + }, ]; - TRACKS + DATA.iter().map(Cow::Borrowed) } fn track_for(origin: &Self::RuntimeOrigin) -> Result { @@ -399,6 +406,7 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = (); type Tracks = TestTracksInfo; type Preimages = Preimage; + type BlockNumberProvider = (); } pub(crate) struct ExtBuilder { @@ -425,6 +433,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/referenda/src/tests.rs b/operator/precompiles/referenda/src/tests.rs index 028a08ca..0a9c1862 100644 --- a/operator/precompiles/referenda/src/tests.rs +++ b/operator/precompiles/referenda/src/tests.rs @@ -42,6 +42,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } @@ -295,7 +296,7 @@ fn submit_track_id_oob_fails() { .execute_with(|| { let proposal = vec![1, 2, 3]; let proposal_hash = sp_runtime::traits::BlakeTwo256::hash(&proposal); - let oob_track_id = ::Tracks::tracks().len(); + let oob_track_id = ::Tracks::tracks().count(); // submit with an invalid track_id let input: Vec = PCall::submit_at { diff --git a/operator/primitives/bridge/Cargo.toml b/operator/primitives/bridge/Cargo.toml index 135bbcdf..e00ca4d2 100644 --- a/operator/primitives/bridge/Cargo.toml +++ b/operator/primitives/bridge/Cargo.toml @@ -16,7 +16,6 @@ parity-scale-codec = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } hex = { workspace = true } [features] @@ -29,6 +28,5 @@ std = [ "pallet-external-validators/std", "pallet-datahaven-native-transfer/std", "sp-core/std", - "sp-std/std", "snowbridge-inbound-queue-primitives/std", ] diff --git a/operator/primitives/bridge/src/lib.rs b/operator/primitives/bridge/src/lib.rs index ab8fcad0..c467312f 100644 --- a/operator/primitives/bridge/src/lib.rs +++ b/operator/primitives/bridge/src/lib.rs @@ -15,14 +15,15 @@ // along with DataHaven. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use frame_support::pallet_prelude::*; use parity_scale_codec::DecodeAll; use snowbridge_inbound_queue_primitives::v2::{ EthereumAsset, Message as SnowbridgeMessage, MessageProcessor, }; use sp_core::H160; -use sp_std::vec::Vec; // Message ID. This is not expected to change and its arbitrary bytes defined here. // It should match the EL_MESSAGE_ID in DataHavenSnowbridgeMessages.sol diff --git a/operator/primitives/snowbridge/beacon/Cargo.toml b/operator/primitives/snowbridge/beacon/Cargo.toml index b22e6e6e..42a3c212 100644 --- a/operator/primitives/snowbridge/beacon/Cargo.toml +++ b/operator/primitives/snowbridge/beacon/Cargo.toml @@ -24,7 +24,6 @@ frame-support = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } byte-slice-cast = { workspace = true } ssz_rs = { workspace = true } @@ -51,6 +50,5 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "ssz_rs/std", ] diff --git a/operator/primitives/snowbridge/beacon/src/bits.rs b/operator/primitives/snowbridge/beacon/src/bits.rs index 6c5e9e16..42bc8a22 100644 --- a/operator/primitives/snowbridge/beacon/src/bits.rs +++ b/operator/primitives/snowbridge/beacon/src/bits.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use sp_std::prelude::*; +use alloc::vec::Vec; use ssz_rs::{Bitvector, Deserialize}; pub fn decompress_sync_committee_bits< diff --git a/operator/primitives/snowbridge/beacon/src/bls.rs b/operator/primitives/snowbridge/beacon/src/bls.rs index c96d1d02..8669a459 100644 --- a/operator/primitives/snowbridge/beacon/src/bls.rs +++ b/operator/primitives/snowbridge/beacon/src/bls.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork use crate::{PublicKey, Signature}; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{ensure, PalletError}; pub use milagro_bls::{ @@ -10,7 +11,6 @@ pub use milagro_bls::{ use scale_info::TypeInfo; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[derive( Copy, diff --git a/operator/primitives/snowbridge/beacon/src/lib.rs b/operator/primitives/snowbridge/beacon/src/lib.rs index 7afb8f21..a3695286 100644 --- a/operator/primitives/snowbridge/beacon/src/lib.rs +++ b/operator/primitives/snowbridge/beacon/src/lib.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod bits; pub mod bls; diff --git a/operator/primitives/snowbridge/beacon/src/receipt.rs b/operator/primitives/snowbridge/beacon/src/receipt.rs index 60e7744c..3f57681b 100644 --- a/operator/primitives/snowbridge/beacon/src/receipt.rs +++ b/operator/primitives/snowbridge/beacon/src/receipt.rs @@ -1,8 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use sp_core::H256; use sp_io::hashing::keccak_256; -use sp_std::prelude::*; use snowbridge_ethereum::{mpt, Receipt}; diff --git a/operator/primitives/snowbridge/beacon/src/serde_utils.rs b/operator/primitives/snowbridge/beacon/src/serde_utils.rs index ac0b506a..5e09d27d 100644 --- a/operator/primitives/snowbridge/beacon/src/serde_utils.rs +++ b/operator/primitives/snowbridge/beacon/src/serde_utils.rs @@ -100,7 +100,7 @@ pub struct HexVisitor(); impl<'de, const LENGTH: usize> serde::de::Visitor<'de> for HexVisitor { type Value = [u8; LENGTH]; - fn expecting(&self, formatter: &mut Formatter) -> sp_std::fmt::Result { + fn expecting(&self, formatter: &mut Formatter) -> core::fmt::Result { formatter.write_str("a hex string with an '0x' prefix") } diff --git a/operator/primitives/snowbridge/beacon/src/ssz.rs b/operator/primitives/snowbridge/beacon/src/ssz.rs index f4b026ca..8903f367 100644 --- a/operator/primitives/snowbridge/beacon/src/ssz.rs +++ b/operator/primitives/snowbridge/beacon/src/ssz.rs @@ -6,9 +6,9 @@ use crate::{ BeaconHeader, ExecutionPayloadHeader, ForkData, SigningData, SyncAggregate, SyncCommittee, }, }; +use alloc::{vec, vec::Vec}; use byte_slice_cast::AsByteSlice; use sp_core::H256; -use sp_std::{vec, vec::Vec}; use ssz_rs::{ prelude::{List, Vector}, Bitvector, Deserialize, DeserializeError, SimpleSerialize, SimpleSerializeError, Sized, U256, @@ -204,9 +204,9 @@ pub mod deneb { ssz::hash_tree_root, types::deneb::ExecutionPayloadHeader, }; + use alloc::{vec, vec::Vec}; use byte_slice_cast::AsByteSlice; use sp_core::H256; - use sp_std::{vec, vec::Vec}; use ssz_rs::{ prelude::{List, Vector}, Deserialize, DeserializeError, SimpleSerializeError, Sized, U256, diff --git a/operator/primitives/snowbridge/beacon/src/types.rs b/operator/primitives/snowbridge/beacon/src/types.rs index 062eb218..e44a5f2b 100644 --- a/operator/primitives/snowbridge/beacon/src/types.rs +++ b/operator/primitives/snowbridge/beacon/src/types.rs @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::iter::repeat; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; use sp_core::{H160, H256, U256}; use sp_runtime::RuntimeDebug; -use sp_std::{boxed::Box, iter::repeat, prelude::*}; use crate::config::{PUBKEY_SIZE, SIGNATURE_SIZE}; @@ -89,7 +91,7 @@ impl Serialize for PublicKey { } } -#[derive(Copy, Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Copy, Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Signature(pub [u8; SIGNATURE_SIZE]); impl Default for Signature { @@ -238,7 +240,16 @@ impl TryFrom<&SyncCommittee> /// Beacon block header as it is stored in the runtime storage. The block root is the /// Merkleization of a BeaconHeader. #[derive( - Copy, Clone, Default, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen, + Copy, + Clone, + Default, + Encode, + Decode, + PartialEq, + RuntimeDebug, + TypeInfo, + MaxEncodedLen, + DecodeWithMemTracking, )] #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct BeaconHeader { @@ -261,7 +272,15 @@ impl BeaconHeader { } } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(Deserialize), @@ -329,7 +348,14 @@ impl /// ExecutionPayloadHeader /// #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", @@ -391,7 +417,15 @@ pub struct CompactBeaconState { } /// VersionedExecutionPayloadHeader -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(Serialize, Deserialize), @@ -453,7 +487,15 @@ impl VersionedExecutionPayloadHeader { } } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Deserialize), @@ -470,7 +512,15 @@ pub struct ExecutionProof { pub execution_branch: Vec, } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Deserialize), @@ -609,18 +659,25 @@ pub enum Mode { } pub mod deneb { - use codec::{Decode, Encode}; + use alloc::vec::Vec; + use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_core::{H160, H256, U256}; - use sp_std::prelude::*; /// ExecutionPayloadHeader /// #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", diff --git a/operator/primitives/snowbridge/beacon/src/updates.rs b/operator/primitives/snowbridge/beacon/src/updates.rs index 07d5564a..f580f5a2 100644 --- a/operator/primitives/snowbridge/beacon/src/updates.rs +++ b/operator/primitives/snowbridge/beacon/src/updates.rs @@ -1,14 +1,22 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use codec::{Decode, Encode}; +use alloc::vec::Vec; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; use sp_core::H256; -use sp_std::prelude::*; use crate::types::{BeaconHeader, SyncAggregate, SyncCommittee}; -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Serialize, serde::Deserialize), @@ -24,7 +32,14 @@ pub struct CheckpointUpdate { } #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", @@ -54,7 +69,14 @@ pub struct Update } #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", diff --git a/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml b/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml index 081868b9..2b289ab1 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml +++ b/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml @@ -17,7 +17,6 @@ scale-info = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-core.workspace = true sp-runtime.workspace = true -sp-std.workspace = true xcm.workspace = true xcm-builder.workspace = true xcm-executor.workspace = true @@ -33,7 +32,6 @@ std = [ "snowbridge-core/std", "sp-core/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs b/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs index 2f0a6d09..0b25fa8e 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs +++ b/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. //! Runtime configuration for MessageQueue pallet -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::marker::PhantomData; use cumulus_primitives_core::{AggregateMessageOrigin as CumulusAggregateMessageOrigin, ParaId}; use frame_support::{ @@ -29,7 +29,18 @@ use xcm::latest::prelude::{Junction, Location}; /// The aggregate origin of an inbound message. /// This is specialized for BridgeHub, as the snowbridge-outbound-queue-pallet is also using /// the shared MessageQueue pallet. -#[derive(Encode, Decode, Copy, MaxEncodedLen, Clone, Eq, PartialEq, TypeInfo, Debug)] +#[derive( + Encode, + Decode, + Copy, + MaxEncodedLen, + Clone, + Eq, + PartialEq, + TypeInfo, + DecodeWithMemTracking, + Debug, +)] pub enum AggregateMessageOrigin { /// The message came from the para-chain itself. Here, diff --git a/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs b/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs index be42fd73..27bee748 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs +++ b/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs @@ -25,7 +25,7 @@ use xcm::{ /// configured XCM version between the destination `dest` and the bridge hub location provided as /// `Get`. pub struct XcmVersionOfDestAndRemoteBridge( - sp_std::marker::PhantomData<(Version, RemoteBridge)>, + core::marker::PhantomData<(Version, RemoteBridge)>, ); impl> GetVersion for XcmVersionOfDestAndRemoteBridge @@ -35,7 +35,7 @@ impl> GetVersion let bridge_hub_version = Version::get_version_for(&RemoteBridge::get()); match (dest_version, bridge_hub_version) { - (Some(dv), Some(bhv)) => Some(sp_std::cmp::min(dv, bhv)), + (Some(dv), Some(bhv)) => Some(core::cmp::min(dv, bhv)), (Some(dv), None) => Some(dv), (None, Some(bhv)) => Some(bhv), (None, None) => None, diff --git a/operator/primitives/snowbridge/core/Cargo.toml b/operator/primitives/snowbridge/core/Cargo.toml index f0eabf55..09895952 100644 --- a/operator/primitives/snowbridge/core/Cargo.toml +++ b/operator/primitives/snowbridge/core/Cargo.toml @@ -29,7 +29,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm-executor = { workspace = true } bp-relayers = { workspace = true } @@ -62,7 +61,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/core/src/lib.rs b/operator/primitives/snowbridge/core/src/lib.rs index 25e81ff6..87dc0fb5 100644 --- a/operator/primitives/snowbridge/core/src/lib.rs +++ b/operator/primitives/snowbridge/core/src/lib.rs @@ -4,6 +4,7 @@ //! //! Common traits and types #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod tests; @@ -22,6 +23,8 @@ pub use polkadot_parachain_primitives::primitives::{ pub use ringbuffer::{RingBufferMap, RingBufferMapImpl}; pub use sp_core::U256; +use alloc::vec; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::{traits::Contains, BoundedVec}; use hex_literal::hex; @@ -29,7 +32,6 @@ use scale_info::TypeInfo; use sp_core::{ConstU32, H256}; use sp_io::hashing::keccak_256; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; -use sp_std::prelude::*; use xcm::latest::{Asset, Junction::Parachain, Location, Result as XcmResult, XcmContext}; use xcm_executor::traits::TransactAsset; diff --git a/operator/primitives/snowbridge/core/src/location.rs b/operator/primitives/snowbridge/core/src/location.rs index 2816a79e..7038ad3f 100644 --- a/operator/primitives/snowbridge/core/src/location.rs +++ b/operator/primitives/snowbridge/core/src/location.rs @@ -9,9 +9,9 @@ pub use polkadot_parachain_primitives::primitives::{ }; pub use sp_core::U256; +use alloc::vec::Vec; use codec::Encode; use sp_core::H256; -use sp_std::prelude::*; use xcm::prelude::{ AccountId32, AccountKey20, GeneralIndex, GeneralKey, GlobalConsensus, Location, PalletInstance, }; @@ -56,7 +56,7 @@ impl DescribeLocation for DescribeHere { } } } -pub struct DescribeGlobalPrefix(sp_std::marker::PhantomData); +pub struct DescribeGlobalPrefix(core::marker::PhantomData); impl DescribeLocation for DescribeGlobalPrefix { fn describe_location(l: &Location) -> Option> { match (l.parent_count(), l.first_interior()) { diff --git a/operator/primitives/snowbridge/core/src/pricing.rs b/operator/primitives/snowbridge/core/src/pricing.rs index eca50c66..edbe86e3 100644 --- a/operator/primitives/snowbridge/core/src/pricing.rs +++ b/operator/primitives/snowbridge/core/src/pricing.rs @@ -1,14 +1,15 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_arithmetic::traits::{BaseArithmetic, Unsigned, Zero}; use sp_core::U256; use sp_runtime::{FixedU128, RuntimeDebug}; -use sp_std::prelude::*; -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)] +#[derive( + Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, DecodeWithMemTracking, TypeInfo, +)] pub struct PricingParameters { /// ETH/DOT exchange rate pub exchange_rate: FixedU128, @@ -20,7 +21,9 @@ pub struct PricingParameters { pub multiplier: FixedU128, } -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)] +#[derive( + Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, DecodeWithMemTracking, TypeInfo, +)] pub struct Rewards { /// Local reward in DOT pub local: Balance, diff --git a/operator/primitives/snowbridge/core/src/reward.rs b/operator/primitives/snowbridge/core/src/reward.rs index 5b79f31c..931dc205 100644 --- a/operator/primitives/snowbridge/core/src/reward.rs +++ b/operator/primitives/snowbridge/core/src/reward.rs @@ -4,6 +4,7 @@ extern crate alloc; use crate::reward::RewardPaymentError::{ChargeFeesFailure, XcmSendFailure}; +use core::{fmt::Debug, marker::PhantomData}; use frame_support::dispatch::GetDispatchInfo; use scale_info::TypeInfo; use sp_runtime::{ @@ -11,7 +12,6 @@ use sp_runtime::{ traits::Get, DispatchError, }; -use sp_std::{fmt::Debug, marker::PhantomData}; use xcm::{ opaque::latest::prelude::Xcm, prelude::{ExecuteXcm, Junction::*, Location, SendXcm, *}, diff --git a/operator/primitives/snowbridge/core/src/sparse_bitmap.rs b/operator/primitives/snowbridge/core/src/sparse_bitmap.rs index d7192642..bea8b362 100644 --- a/operator/primitives/snowbridge/core/src/sparse_bitmap.rs +++ b/operator/primitives/snowbridge/core/src/sparse_bitmap.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use core::marker::PhantomData; use frame_support::storage::StorageMap; -use sp_std::marker::PhantomData; /// Sparse bitmap interface. pub trait SparseBitmap diff --git a/operator/primitives/snowbridge/ethereum/Cargo.toml b/operator/primitives/snowbridge/ethereum/Cargo.toml index 9d49aa6d..bfa63dc1 100644 --- a/operator/primitives/snowbridge/ethereum/Cargo.toml +++ b/operator/primitives/snowbridge/ethereum/Cargo.toml @@ -28,7 +28,6 @@ serde-big-array = { optional = true, features = [ sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } ethabi = { workspace = true } @@ -51,5 +50,4 @@ std = [ "serde-big-array", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/primitives/snowbridge/ethereum/src/header.rs b/operator/primitives/snowbridge/ethereum/src/header.rs index 0348880c..f9c3871c 100644 --- a/operator/primitives/snowbridge/ethereum/src/header.rs +++ b/operator/primitives/snowbridge/ethereum/src/header.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use codec::{Decode, Encode}; use ethbloom::Bloom as EthBloom; use hex_literal::hex; @@ -8,7 +10,6 @@ use rlp::RlpStream; use scale_info::TypeInfo; use sp_io::hashing::keccak_256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; diff --git a/operator/primitives/snowbridge/ethereum/src/lib.rs b/operator/primitives/snowbridge/ethereum/src/lib.rs index b44ea3c6..60bac359 100644 --- a/operator/primitives/snowbridge/ethereum/src/lib.rs +++ b/operator/primitives/snowbridge/ethereum/src/lib.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod header; pub mod log; diff --git a/operator/primitives/snowbridge/ethereum/src/log.rs b/operator/primitives/snowbridge/ethereum/src/log.rs index 589d928d..5273e382 100644 --- a/operator/primitives/snowbridge/ethereum/src/log.rs +++ b/operator/primitives/snowbridge/ethereum/src/log.rs @@ -1,8 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::vec::Vec; use codec::{Decode, Encode}; use ethereum_types::{H160, H256}; -use sp_std::prelude::*; #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct Log { diff --git a/operator/primitives/snowbridge/ethereum/src/mpt.rs b/operator/primitives/snowbridge/ethereum/src/mpt.rs index 035016aa..e13180fc 100644 --- a/operator/primitives/snowbridge/ethereum/src/mpt.rs +++ b/operator/primitives/snowbridge/ethereum/src/mpt.rs @@ -2,8 +2,9 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Helper types to work with Ethereum's Merkle Patricia Trie nodes +use alloc::boxed::Box; +use alloc::vec::Vec; use ethereum_types::H256; -use sp_std::prelude::*; pub trait Node { fn contains_hash(&self, hash: H256) -> bool; diff --git a/operator/primitives/snowbridge/ethereum/src/receipt.rs b/operator/primitives/snowbridge/ethereum/src/receipt.rs index 3ef64e66..267a1b8f 100644 --- a/operator/primitives/snowbridge/ethereum/src/receipt.rs +++ b/operator/primitives/snowbridge/ethereum/src/receipt.rs @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork use crate::{Bloom, Log}; +use alloc::vec::Vec; use codec::{Decode, Encode}; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[derive(Clone, Default, Encode, Decode, PartialEq, RuntimeDebug)] pub struct Receipt { diff --git a/operator/primitives/snowbridge/inbound-queue/Cargo.toml b/operator/primitives/snowbridge/inbound-queue/Cargo.toml index b58f333a..6069eff4 100644 --- a/operator/primitives/snowbridge/inbound-queue/Cargo.toml +++ b/operator/primitives/snowbridge/inbound-queue/Cargo.toml @@ -23,7 +23,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-builder = { workspace = true } @@ -61,7 +60,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/inbound-queue/src/lib.rs b/operator/primitives/snowbridge/inbound-queue/src/lib.rs index 20ff50ed..0d0f8565 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/lib.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/lib.rs @@ -2,12 +2,14 @@ // SPDX-FileCopyrightText: 2023 Snowfork // SPDX-FileCopyrightText: 2021-2022 Parity Technologies (UK) Ltd. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + pub mod v1; pub mod v2; use codec::Encode; +use core::marker::PhantomData; use snowbridge_beacon_primitives::BeaconHeader; use sp_core::{blake2_256, RuntimeDebug, H256}; -use sp_std::marker::PhantomData; use xcm::prelude::{AccountKey20, Ethereum, GlobalConsensus, Location}; use xcm_executor::traits::ConvertLocation; diff --git a/operator/primitives/snowbridge/inbound-queue/src/v1.rs b/operator/primitives/snowbridge/inbound-queue/src/v1.rs index 41aa2270..c82a4b59 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v1.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v1.rs @@ -3,6 +3,7 @@ //! Converts messages from Ethereum to XCM messages use crate::{CallIndex, EthereumLocationsConverterFor}; +use alloc::vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use core::marker::PhantomData; use frame_support::{traits::tokens::Balance as BalanceT, PalletError}; @@ -10,7 +11,6 @@ use scale_info::TypeInfo; use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160, H256}; use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; -use sp_std::prelude::*; use xcm::prelude::{Junction::AccountKey20, *}; const MINIMUM_DEPOSIT: u128 = 1; diff --git a/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs b/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs index fd28e7a3..3dfcf677 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs @@ -1,9 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts messages from Solidity ABI-encoding to XCM +extern crate alloc; use super::{message::*, traits::*}; use crate::{v2::LOG_TARGET, CallIndex, EthereumLocationsConverterFor}; +use alloc::vec; +use alloc::vec::Vec; use codec::{Decode, DecodeLimit, Encode}; use core::marker::PhantomData; use frame_support::ensure; @@ -11,7 +14,6 @@ use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160}; use sp_io::hashing::blake2_256; use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; -use sp_std::prelude::*; use xcm::{ prelude::{Junction::*, *}, MAX_XCM_DECODE_DEPTH, diff --git a/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs b/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs index 6e3f8fb5..299fcbe3 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs @@ -1,8 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts messages from Ethereum to XCM messages +extern crate alloc; use crate::{v2::IGatewayV2::Payload as GatewayV2Payload, Log}; +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::B256, sol, @@ -11,7 +14,6 @@ use alloy_core::{ use codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; sol! { interface IGatewayV2 { diff --git a/operator/primitives/snowbridge/outbound-queue/Cargo.toml b/operator/primitives/snowbridge/outbound-queue/Cargo.toml index 636a94c8..30513acc 100644 --- a/operator/primitives/snowbridge/outbound-queue/Cargo.toml +++ b/operator/primitives/snowbridge/outbound-queue/Cargo.toml @@ -28,7 +28,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } alloy-core = { workspace = true, features = ["sol-types"] } ethabi = { workspace = true } @@ -56,7 +55,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs b/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs index e218e4b0..69c2df57 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs @@ -1,15 +1,17 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! # Outbound V1 primitives +extern crate alloc; use crate::{OperatingMode, SendError, SendMessageFeeProvider}; +use alloc::borrow::ToOwned; +use alloc::{vec, vec::Vec}; use codec::{Decode, DecodeWithMemTracking, Encode}; use ethabi::Token; use scale_info::TypeInfo; use snowbridge_core::{pricing::UD60x18, ChannelId}; use sp_arithmetic::traits::{BaseArithmetic, Unsigned}; use sp_core::{RuntimeDebug, H160, H256, U256}; -use sp_std::{borrow::ToOwned, vec, vec::Vec}; /// Enqueued outbound messages need to be versioned to prevent data corruption /// or loss after forkless runtime upgrades diff --git a/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs index f90ed90d..746a51fd 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs @@ -1,3 +1,5 @@ +extern crate alloc; + pub mod message; pub use message::*; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs index 3dee18c5..3036c19b 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts XCM messages into InboundMessage that can be processed by the Gateway contract +extern crate alloc; use codec::DecodeAll; use core::slice::Iter; @@ -13,9 +14,10 @@ use crate::v2::{ }; use crate::v2::convert::XcmConverterError::{AssetResolutionFailed, FilterDoesNotConsumeAllAssets}; +use alloc::vec::Vec; +use core::{iter::Peekable, marker::PhantomData}; use sp_core::H160; use sp_runtime::traits::MaybeEquivalence; -use sp_std::{iter::Peekable, marker::PhantomData, prelude::*}; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; use XcmConverterError::*; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs index 3c6ca5dd..861833ff 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts XCM messages into simpler commands that can be processed by the Gateway contract +extern crate alloc; #[cfg(test)] mod tests; @@ -9,7 +10,9 @@ pub mod convert; pub use convert::XcmConverter; use super::message::SendMessage; +use alloc::vec::Vec; use codec::{Decode, Encode}; +use core::{marker::PhantomData, ops::ControlFlow}; use frame_support::{ ensure, traits::{Contains, Get, ProcessMessageError}, @@ -17,7 +20,6 @@ use frame_support::{ use snowbridge_core::{ParaId, TokenId}; use sp_core::H256; use sp_runtime::traits::MaybeEquivalence; -use sp_std::{marker::PhantomData, ops::ControlFlow, prelude::*}; use xcm::prelude::*; use xcm_builder::{CreateMatcher, ExporterFor, MatchXcm}; use xcm_executor::traits::{ConvertLocation, ExportXcm}; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs index aa0c48ee..5b231fb3 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs @@ -6,10 +6,10 @@ use crate::{ v2::{convert::XcmConverterError, Command, Message}, SendError, SendMessageFeeProvider, }; +use core::default::Default; use frame_support::{parameter_types, BoundedVec}; use hex_literal::hex; use snowbridge_core::{AgentIdOf, TokenIdOf}; -use sp_std::default::Default; use xcm::{latest::WESTEND_GENESIS_HASH, prelude::SendError as XcmSendError}; parameter_types! { diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs index 21b5f4d5..bb393b96 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + use crate::Log; +use alloc::vec::Vec; use alloy_core::{primitives::B256, sol, sol_types::SolEvent}; use codec::Decode; use frame_support::pallet_prelude::{Encode, TypeInfo}; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; sol! { event InboundMessageDispatched(uint64 indexed nonce, bytes32 topic, bool success, bytes32 reward_address); diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs index 44c87c2b..529b26b8 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs @@ -1,8 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + +use alloc::vec::Vec; use core::marker::PhantomData; use snowbridge_core::operating_mode::ExportPausedQuery; -use sp_std::vec::Vec; use xcm::{ prelude::{Location, SendError, SendResult, SendXcm, Xcm, XcmHash}, VersionedLocation, VersionedXcm, diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs index 4d42e121..9d424e71 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs @@ -1,12 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! # Outbound V2 primitives +extern crate alloc; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{pallet_prelude::ConstU32, BoundedVec}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::vec::Vec; use crate::{OperatingMode, SendError}; use abi::{ @@ -121,7 +122,7 @@ pub struct OutboundMessage { pub const MAX_COMMANDS: u32 = 8; /// A message which can be accepted by implementations of `/[`SendMessage`\]` -#[derive(Encode, Decode, TypeInfo, PartialEq, Clone, RuntimeDebug)] +#[derive(Encode, Decode, TypeInfo, PartialEq, Clone, RuntimeDebug, DecodeWithMemTracking)] pub struct Message { /// Origin pub origin: H256, @@ -134,7 +135,7 @@ pub struct Message { } /// A command which is executable by the Gateway contract on Ethereum -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub enum Command { /// Upgrade the Gateway contract Upgrade { diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs index 543cb65a..3aa4d4ea 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + pub mod converter; pub mod delivery_receipt; pub mod exporter; @@ -9,10 +11,10 @@ pub use converter::*; pub use delivery_receipt::*; pub use message::*; +use alloc::vec::Vec; use codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; /// The `XCM::Transact` payload for calling arbitrary smart contracts on Ethereum. /// On Ethereum, this call will be dispatched by the agent contract acting as a proxy diff --git a/operator/primitives/snowbridge/test-utils/Cargo.toml b/operator/primitives/snowbridge/test-utils/Cargo.toml index 9038fc70..6525434e 100644 --- a/operator/primitives/snowbridge/test-utils/Cargo.toml +++ b/operator/primitives/snowbridge/test-utils/Cargo.toml @@ -24,7 +24,6 @@ scale-info = { features = [ ], workspace = true, default-features = true } snowbridge-outbound-queue-primitives = { workspace = true, default-features = true } sp-core = { workspace = true, default-features = true } -sp-std = { workspace = true, default-features = true } xcm = { workspace = true, default-features = true } xcm-builder = { workspace = true, default-features = true } xcm-executor = { workspace = true, default-features = true } diff --git a/operator/primitives/snowbridge/test-utils/src/mock_origin.rs b/operator/primitives/snowbridge/test-utils/src/mock_origin.rs index efced79f..e2058549 100644 --- a/operator/primitives/snowbridge/test-utils/src/mock_origin.rs +++ b/operator/primitives/snowbridge/test-utils/src/mock_origin.rs @@ -20,7 +20,17 @@ pub mod pallet_xcm_origin { // Insert this custom Origin into the aggregate RuntimeOrigin #[pallet::origin] - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] + #[derive( + PartialEq, + Eq, + Clone, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + DecodeWithMemTracking, + MaxEncodedLen, + )] pub struct Origin(pub Location); impl From for Origin { diff --git a/operator/primitives/snowbridge/verification/Cargo.toml b/operator/primitives/snowbridge/verification/Cargo.toml index 23fea6c6..b14e1125 100644 --- a/operator/primitives/snowbridge/verification/Cargo.toml +++ b/operator/primitives/snowbridge/verification/Cargo.toml @@ -17,7 +17,6 @@ frame-support = { workspace = true } scale-info = { features = ["derive"], workspace = true } snowbridge-beacon-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -27,5 +26,4 @@ std = [ "scale-info/std", "snowbridge-beacon-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/primitives/snowbridge/verification/src/lib.rs b/operator/primitives/snowbridge/verification/src/lib.rs index 2262cc57..ae2b9f8f 100644 --- a/operator/primitives/snowbridge/verification/src/lib.rs +++ b/operator/primitives/snowbridge/verification/src/lib.rs @@ -2,19 +2,21 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Types for representing inbound messages #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Decode, Encode}; +extern crate alloc; + +use alloc::vec::Vec; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::PalletError; use scale_info::TypeInfo; use snowbridge_beacon_primitives::{BeaconHeader, ExecutionProof}; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; /// A trait for verifying inbound messages from Ethereum. pub trait Verifier { fn verify(event: &Log, proof: &Proof) -> Result<(), VerificationError>; } -#[derive(Clone, Encode, Decode, RuntimeDebug, PalletError, TypeInfo)] +#[derive(Clone, Encode, Decode, RuntimeDebug, PalletError, TypeInfo, DecodeWithMemTracking)] #[cfg_attr(feature = "std", derive(PartialEq))] pub enum VerificationError { /// Execution header is missing @@ -30,7 +32,7 @@ pub enum VerificationError { } /// A bridge message from the Gateway contract on Ethereum -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct EventProof { /// Event log emitted by Gateway contract pub event_log: Log, @@ -46,7 +48,7 @@ pub enum LogValidationError { } /// Event log -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Log { pub address: H160, pub topics: Vec, @@ -63,7 +65,7 @@ impl Log { } /// Inclusion proof for a transaction receipt -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Proof { // Proof keys and values (receipts tree) pub receipt_proof: (Vec>, Vec>), diff --git a/operator/runtime/common/Cargo.toml b/operator/runtime/common/Cargo.toml index 6d071a57..164f13ca 100644 --- a/operator/runtime/common/Cargo.toml +++ b/operator/runtime/common/Cargo.toml @@ -32,7 +32,6 @@ snowbridge-outbound-queue-primitives = { workspace = true } sp-core = { workspace = true, features = ["serde"] } sp-io = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } -sp-std = { workspace = true } xcm = { workspace = true } [features] @@ -61,7 +60,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/runtime/common/src/deal_with_fees.rs b/operator/runtime/common/src/deal_with_fees.rs index 4e9948e4..cda77e67 100644 --- a/operator/runtime/common/src/deal_with_fees.rs +++ b/operator/runtime/common/src/deal_with_fees.rs @@ -25,7 +25,7 @@ use sp_runtime::Perbill; /// Deal with substrate based fees and tip. This should be used with pallet_transaction_payment. pub struct DealWithSubstrateFeesAndTip( - sp_std::marker::PhantomData<(R, FeesTreasuryProportion)>, + core::marker::PhantomData<(R, FeesTreasuryProportion)>, ); impl DealWithSubstrateFeesAndTip where @@ -74,7 +74,7 @@ where /// Deal with ethereum based fees. To handle tips/priority fees, use DealWithEthereumPriorityFees. pub struct DealWithEthereumBaseFees( - sp_std::marker::PhantomData<(R, FeesTreasuryProportion)>, + core::marker::PhantomData<(R, FeesTreasuryProportion)>, ); impl OnUnbalanced>> for DealWithEthereumBaseFees @@ -93,7 +93,7 @@ where } } -pub struct BlockAuthorAccountId(sp_std::marker::PhantomData); +pub struct BlockAuthorAccountId(core::marker::PhantomData); impl TypedGet for BlockAuthorAccountId where R: frame_system::Config + pallet_authorship::Config, @@ -106,7 +106,7 @@ where } /// Deal with ethereum based priority fees/tips. See DealWithEthereumBaseFees for base fees. -pub struct DealWithEthereumPriorityFees(sp_std::marker::PhantomData); +pub struct DealWithEthereumPriorityFees(core::marker::PhantomData); impl OnUnbalanced>> for DealWithEthereumPriorityFees where diff --git a/operator/runtime/common/src/impl_on_charge_evm_transaction.rs b/operator/runtime/common/src/impl_on_charge_evm_transaction.rs index d2e6c41b..9977ff9b 100644 --- a/operator/runtime/common/src/impl_on_charge_evm_transaction.rs +++ b/operator/runtime/common/src/impl_on_charge_evm_transaction.rs @@ -18,7 +18,7 @@ macro_rules! impl_on_charge_evm_transaction { {} => { pub struct OnChargeEVMTransaction( - sp_std::marker::PhantomData<(BaseFeesOU, PriorityFeesOU)> + core::marker::PhantomData<(BaseFeesOU, PriorityFeesOU)> ); impl OnChargeEVMTransactionT diff --git a/operator/runtime/common/src/inflation.rs b/operator/runtime/common/src/inflation.rs index b18332bc..e7149a3d 100644 --- a/operator/runtime/common/src/inflation.rs +++ b/operator/runtime/common/src/inflation.rs @@ -59,7 +59,7 @@ pub struct ExternalRewardsEraInflationProvider< BlocksPerSession, MillisecsPerBlock, >( - sp_std::marker::PhantomData<( + core::marker::PhantomData<( AnnualAmount, SessionsPerEra, BlocksPerSession, @@ -155,7 +155,7 @@ where /// This struct provides a mint_inflation method that can be called from wrapper implementations /// in your runtime to avoid circular dependencies. pub struct ExternalRewardsInflationHandler( - sp_std::marker::PhantomData<(Balances, TreasuryProportion, TreasuryAccount)>, + core::marker::PhantomData<(Balances, TreasuryProportion, TreasuryAccount)>, ); impl diff --git a/operator/runtime/common/src/lib.rs b/operator/runtime/common/src/lib.rs index d13044cd..cb29f6c5 100644 --- a/operator/runtime/common/src/lib.rs +++ b/operator/runtime/common/src/lib.rs @@ -15,6 +15,7 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod constants; pub use constants::*; diff --git a/operator/runtime/common/src/rewards_adapter.rs b/operator/runtime/common/src/rewards_adapter.rs index 330bf4b5..d7456ef7 100644 --- a/operator/runtime/common/src/rewards_adapter.rs +++ b/operator/runtime/common/src/rewards_adapter.rs @@ -20,6 +20,8 @@ //! via Snowbridge. The adapter is configurable through the [`RewardsSubmissionConfig`] //! trait, allowing runtimes to provide environment-specific values. +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::{Address, Uint, U256}, sol, @@ -31,8 +33,6 @@ use snowbridge_outbound_queue_primitives::v2::{ }; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec; -use sp_std::vec::Vec; /// Default description for rewards submissions. pub const REWARDS_DESCRIPTION: &str = "DataHaven validator rewards"; diff --git a/operator/runtime/common/src/safe_mode.rs b/operator/runtime/common/src/safe_mode.rs index 8849e80f..8c3b2de3 100644 --- a/operator/runtime/common/src/safe_mode.rs +++ b/operator/runtime/common/src/safe_mode.rs @@ -18,10 +18,10 @@ use crate::time::DAYS; use crate::Balance; +use core::marker::PhantomData; use frame_support::{parameter_types, traits::Contains}; use pallet_tx_pause::RuntimeCallNameOf; use polkadot_primitives::BlockNumber; -use sp_std::marker::PhantomData; // Safe Mode Constants parameter_types! { diff --git a/operator/runtime/common/src/slashes_adapter.rs b/operator/runtime/common/src/slashes_adapter.rs index 74fa5c58..66fc307c 100644 --- a/operator/runtime/common/src/slashes_adapter.rs +++ b/operator/runtime/common/src/slashes_adapter.rs @@ -1,3 +1,5 @@ +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::{Address, U256}, sol, @@ -8,8 +10,6 @@ use snowbridge_outbound_queue_primitives::v2::SendMessage; use snowbridge_outbound_queue_primitives::v2::{Command, Message as OutboundMessage}; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec; -use sp_std::vec::Vec; use crate::AccountId; diff --git a/operator/runtime/mainnet/Cargo.toml b/operator/runtime/mainnet/Cargo.toml index 186bc7b9..a4cadb47 100644 --- a/operator/runtime/mainnet/Cargo.toml +++ b/operator/runtime/mainnet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true, features = ["serde"] } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -120,7 +121,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -190,6 +190,7 @@ default = ["std"] std = [ "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -282,7 +283,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/mainnet/src/benchmarks.rs b/operator/runtime/mainnet/src/benchmarks.rs index 01d8bf96..f807eabe 100644 --- a/operator/runtime/mainnet/src/benchmarks.rs +++ b/operator/runtime/mainnet/src/benchmarks.rs @@ -28,8 +28,7 @@ frame_benchmarking::define_benchmarks!( // Substrate pallets [pallet_balances, Balances] [pallet_session, pallet_session_benchmarking::Pallet::] - // FIXME: benchmarking identity fail - // [pallet_identity, Identity] + [pallet_identity, Identity] [pallet_im_online, ImOnline] [pallet_multisig, Multisig] [pallet_preimage, Preimage] diff --git a/operator/runtime/mainnet/src/configs/governance/origins.rs b/operator/runtime/mainnet/src/configs/governance/origins.rs index 277e35a1..b11603c2 100644 --- a/operator/runtime/mainnet/src/configs/governance/origins.rs +++ b/operator/runtime/mainnet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/mainnet/src/configs/governance/referenda.rs b/operator/runtime/mainnet/src/configs/governance/referenda.rs index b4ceff70..dfc8c841 100644 --- a/operator/runtime/mainnet/src/configs/governance/referenda.rs +++ b/operator/runtime/mainnet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = mainnet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = mainnet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/mainnet/src/configs/governance/tracks.rs b/operator/runtime/mainnet/src/configs/governance/tracks.rs index 74199f9d..7c1937ca 100644 --- a/operator/runtime/mainnet/src/configs/governance/tracks.rs +++ b/operator/runtime/mainnet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 2 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 100 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 2 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 4 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 100 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,26 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +159,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +183,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +199,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/mainnet/src/configs/mod.rs b/operator/runtime/mainnet/src/configs/mod.rs index 48f1aad9..e7ad43be 100644 --- a/operator/runtime/mainnet/src/configs/mod.rs +++ b/operator/runtime/mainnet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -48,6 +49,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; Decode, RuntimeDebug, MaxEncodedLen, + DecodeWithMemTracking, TypeInfo, serde::Serialize, serde::Deserialize, @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -396,6 +395,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = mainnet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -593,6 +593,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = mainnet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -656,8 +657,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -687,6 +687,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = mainnet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -852,6 +853,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1053,6 +1055,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = mainnet_weights::pallet_evm::WeightInfo; } diff --git a/operator/runtime/mainnet/src/configs/runtime_params.rs b/operator/runtime/mainnet/src/configs/runtime_params.rs index 9d3cdeb3..914381c0 100644 --- a/operator/runtime/mainnet/src/configs/runtime_params.rs +++ b/operator/runtime/mainnet/src/configs/runtime_params.rs @@ -15,11 +15,11 @@ // along with DataHaven. If not, see . use crate::Runtime; +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::configs::storagehub::{ChallengeTicksTolerance, ReplicationTargetType, SpMinDeposit}; use crate::currency::{GIGAWEI, HAVE, SUPPLY_FACTOR}; diff --git a/operator/runtime/mainnet/src/configs/storagehub/client.rs b/operator/runtime/mainnet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/mainnet/src/configs/storagehub/client.rs +++ b/operator/runtime/mainnet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/mainnet/src/configs/storagehub/mod.rs b/operator/runtime/mainnet/src/configs/storagehub/mod.rs index 79a71b14..49b6bad6 100644 --- a/operator/runtime/mainnet/src/configs/storagehub/mod.rs +++ b/operator/runtime/mainnet/src/configs/storagehub/mod.rs @@ -19,7 +19,7 @@ use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,7 +27,10 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; + #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; use datahaven_runtime_common::time::{DAYS, MINUTES}; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -626,16 +628,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -699,6 +701,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/mainnet/src/genesis_config_presets.rs b/operator/runtime/mainnet/src/genesis_config_presets.rs index 321df0a1..5eb01dc3 100644 --- a/operator/runtime/mainnet/src/genesis_config_presets.rs +++ b/operator/runtime/mainnet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 110)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/mainnet/src/lib.rs b/operator/runtime/mainnet/src/lib.rs index f295318a..efc6df50 100644 --- a/operator/runtime/mainnet/src/lib.rs +++ b/operator/runtime/mainnet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -54,7 +58,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -85,7 +89,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -193,16 +196,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -227,6 +224,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1073,6 +1071,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1102,6 +1101,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1120,6 +1120,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1153,6 +1154,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1232,7 +1234,7 @@ impl_runtime_apis! { //║ STORAGEHUB APIS ║ //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1279,6 +1281,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1414,7 +1425,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1427,6 +1438,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/mainnet/src/weights/frame_system.rs b/operator/runtime/mainnet/src/weights/frame_system.rs index 56f672bb..8cfa2ed7 100644 --- a/operator/runtime/mainnet/src/weights/frame_system.rs +++ b/operator/runtime/mainnet/src/weights/frame_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_babe.rs b/operator/runtime/mainnet/src/weights/pallet_babe.rs index d6f48f94..4392b7ca 100644 --- a/operator/runtime/mainnet/src/weights/pallet_babe.rs +++ b/operator/runtime/mainnet/src/weights/pallet_babe.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_balances.rs b/operator/runtime/mainnet/src/weights/pallet_balances.rs index 69b60f9e..47e0ebde 100644 --- a/operator/runtime/mainnet/src/weights/pallet_balances.rs +++ b/operator/runtime/mainnet/src/weights/pallet_balances.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs index 1693f449..13332957 100644 --- a/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); @@ -90,4 +90,6 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(1_511_565, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + + fn n_leafs_proof_is_optimal(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs index 2908a4de..3a0afab2 100644 --- a/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs index 5dc0ea6c..d04373b6 100644 --- a/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs b/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs index 71601819..2de9a383 100644 --- a/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs index 12c8125a..6dae14ed 100644 --- a/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_evm.rs b/operator/runtime/mainnet/src/weights/pallet_evm.rs index 21a49e58..c1efba9c 100644 --- a/operator/runtime/mainnet/src/weights/pallet_evm.rs +++ b/operator/runtime/mainnet/src/weights/pallet_evm.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs index deb5261f..757af34c 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validators.rs b/operator/runtime/mainnet/src/weights/pallet_external_validators.rs index f14183e4..d6a4a937 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs index 10854100..764ade91 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_grandpa.rs b/operator/runtime/mainnet/src/weights/pallet_grandpa.rs index 7250e7d1..c2436557 100644 --- a/operator/runtime/mainnet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/mainnet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_im_online.rs b/operator/runtime/mainnet/src/weights/pallet_im_online.rs index 45d02cfa..64f345ad 100644 --- a/operator/runtime/mainnet/src/weights/pallet_im_online.rs +++ b/operator/runtime/mainnet/src/weights/pallet_im_online.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_message_queue.rs b/operator/runtime/mainnet/src/weights/pallet_message_queue.rs index 4515966e..59bae039 100644 --- a/operator/runtime/mainnet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/mainnet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_mmr.rs b/operator/runtime/mainnet/src/weights/pallet_mmr.rs index c4d86617..4fd4bf9b 100644 --- a/operator/runtime/mainnet/src/weights/pallet_mmr.rs +++ b/operator/runtime/mainnet/src/weights/pallet_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_multisig.rs b/operator/runtime/mainnet/src/weights/pallet_multisig.rs index e817907a..a66d67ab 100644 --- a/operator/runtime/mainnet/src/weights/pallet_multisig.rs +++ b/operator/runtime/mainnet/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -169,4 +169,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + + fn poke_deposit(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/mainnet/src/weights/pallet_nfts.rs b/operator/runtime/mainnet/src/weights/pallet_nfts.rs index 4ffc4faf..01c8d947 100644 --- a/operator/runtime/mainnet/src/weights/pallet_nfts.rs +++ b/operator/runtime/mainnet/src/weights/pallet_nfts.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_parameters.rs b/operator/runtime/mainnet/src/weights/pallet_parameters.rs index bb54ca81..6a10a5b2 100644 --- a/operator/runtime/mainnet/src/weights/pallet_parameters.rs +++ b/operator/runtime/mainnet/src/weights/pallet_parameters.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs b/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs index 3022e4da..436712a0 100644 --- a/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_preimage.rs b/operator/runtime/mainnet/src/weights/pallet_preimage.rs index 8acba067..53f35411 100644 --- a/operator/runtime/mainnet/src/weights/pallet_preimage.rs +++ b/operator/runtime/mainnet/src/weights/pallet_preimage.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs index 1d9541c8..9d9bbc1f 100644 --- a/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_proxy.rs b/operator/runtime/mainnet/src/weights/pallet_proxy.rs index 2902eccd..30300e76 100644 --- a/operator/runtime/mainnet/src/weights/pallet_proxy.rs +++ b/operator/runtime/mainnet/src/weights/pallet_proxy.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -224,4 +224,8 @@ impl pallet_proxy::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + + fn poke_deposit() -> Weight { + todo!() + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_randomness.rs b/operator/runtime/mainnet/src/weights/pallet_randomness.rs index 5f7fffcd..aa3ca7e3 100644 --- a/operator/runtime/mainnet/src/weights/pallet_randomness.rs +++ b/operator/runtime/mainnet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_referenda.rs b/operator/runtime/mainnet/src/weights/pallet_referenda.rs index 2ed78f58..a0cecbec 100644 --- a/operator/runtime/mainnet/src/weights/pallet_referenda.rs +++ b/operator/runtime/mainnet/src/weights/pallet_referenda.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs b/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs index a6fc4eaa..2816f5af 100644 --- a/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_scheduler.rs b/operator/runtime/mainnet/src/weights/pallet_scheduler.rs index ba769492..ce780679 100644 --- a/operator/runtime/mainnet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/mainnet/src/weights/pallet_scheduler.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_session.rs b/operator/runtime/mainnet/src/weights/pallet_session.rs index 19df1fa9..cc61e16f 100644 --- a/operator/runtime/mainnet/src/weights/pallet_session.rs +++ b/operator/runtime/mainnet/src/weights/pallet_session.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs b/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs index 7ec61ac9..4119cd57 100644 --- a/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_sudo.rs b/operator/runtime/mainnet/src/weights/pallet_sudo.rs index e9677288..657d51d5 100644 --- a/operator/runtime/mainnet/src/weights/pallet_sudo.rs +++ b/operator/runtime/mainnet/src/weights/pallet_sudo.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_timestamp.rs b/operator/runtime/mainnet/src/weights/pallet_timestamp.rs index a00d76f5..f7b75bcf 100644 --- a/operator/runtime/mainnet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/mainnet/src/weights/pallet_timestamp.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs b/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs index afa6a229..4f09c9c7 100644 --- a/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_treasury.rs b/operator/runtime/mainnet/src/weights/pallet_treasury.rs index 0794cf72..9c7e4760 100644 --- a/operator/runtime/mainnet/src/weights/pallet_treasury.rs +++ b/operator/runtime/mainnet/src/weights/pallet_treasury.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs b/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs index 77db6715..51f1f677 100644 --- a/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_utility.rs b/operator/runtime/mainnet/src/weights/pallet_utility.rs index a6247ad7..b9915e72 100644 --- a/operator/runtime/mainnet/src/weights/pallet_utility.rs +++ b/operator/runtime/mainnet/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -119,4 +119,11 @@ impl pallet_utility::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(6_595_620, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + todo!() + } + + fn if_else() -> Weight { + todo!() + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_whitelist.rs b/operator/runtime/mainnet/src/weights/pallet_whitelist.rs index 2f8f7806..67e86ec9 100644 --- a/operator/runtime/mainnet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/mainnet/src/weights/pallet_whitelist.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs index 68a8f967..bde1e6b2 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 7b593575..54ac1f1b 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 391db9a7..5f3d3213 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs index d2c0af0d..d5f334b2 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs index 287f11a8..9b0e829a 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/tests/common.rs b/operator/runtime/mainnet/tests/common.rs index 1e9ecdf2..f5f1bf21 100644 --- a/operator/runtime/mainnet/tests/common.rs +++ b/operator/runtime/mainnet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/mainnet/tests/governance/benchmarks.rs b/operator/runtime/mainnet/tests/governance/benchmarks.rs index 4a27975a..53bac8c7 100644 --- a/operator/runtime/mainnet/tests/governance/benchmarks.rs +++ b/operator/runtime/mainnet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_mainnet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/mainnet/tests/governance/referenda.rs b/operator/runtime/mainnet/tests/governance/referenda.rs index 1731f369..e76513dd 100644 --- a/operator/runtime/mainnet/tests/governance/referenda.rs +++ b/operator/runtime/mainnet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_mainnet_runtime::{ currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 20 * KILOHAVE * SUPPLY_FACTOR); // 20 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 20 * KILOHAVE * SUPPLY_FACTOR + ); // 20 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 100 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 100 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/mainnet/tests/lib.rs b/operator/runtime/mainnet/tests/lib.rs index c9044c1d..ff7c80b3 100644 --- a/operator/runtime/mainnet/tests/lib.rs +++ b/operator/runtime/mainnet/tests/lib.rs @@ -67,6 +67,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/mainnet/tests/treasury.rs b/operator/runtime/mainnet/tests/treasury.rs index b6195e21..cab39256 100644 --- a/operator/runtime/mainnet/tests/treasury.rs +++ b/operator/runtime/mainnet/tests/treasury.rs @@ -73,6 +73,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -115,6 +116,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/operator/runtime/stagenet/Cargo.toml b/operator/runtime/stagenet/Cargo.toml index c171e435..efd77c24 100644 --- a/operator/runtime/stagenet/Cargo.toml +++ b/operator/runtime/stagenet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -120,7 +121,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -191,6 +191,7 @@ std = [ "alloy-core/std", "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -283,7 +284,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/stagenet/src/benchmarks.rs b/operator/runtime/stagenet/src/benchmarks.rs index 0b400bad..1cfcd098 100644 --- a/operator/runtime/stagenet/src/benchmarks.rs +++ b/operator/runtime/stagenet/src/benchmarks.rs @@ -28,8 +28,7 @@ frame_benchmarking::define_benchmarks!( // Substrate pallets [pallet_balances, Balances] [pallet_session, pallet_session_benchmarking::Pallet::] - // FIXME: benchmarking identity fail - // [pallet_identity, Identity] + [pallet_identity, Identity] [pallet_im_online, ImOnline] [pallet_multisig, Multisig] [pallet_preimage, Preimage] diff --git a/operator/runtime/stagenet/src/configs/governance/origins.rs b/operator/runtime/stagenet/src/configs/governance/origins.rs index 0f943cf6..be8043d8 100644 --- a/operator/runtime/stagenet/src/configs/governance/origins.rs +++ b/operator/runtime/stagenet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/stagenet/src/configs/governance/referenda.rs b/operator/runtime/stagenet/src/configs/governance/referenda.rs index 1ceb8cdf..9f8955c3 100644 --- a/operator/runtime/stagenet/src/configs/governance/referenda.rs +++ b/operator/runtime/stagenet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = stagenet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = stagenet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/stagenet/src/configs/governance/tracks.rs b/operator/runtime/stagenet/src/configs/governance/tracks.rs index 388cf0b4..2bc22f7c 100644 --- a/operator/runtime/stagenet/src/configs/governance/tracks.rs +++ b/operator/runtime/stagenet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(50)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 20 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,25 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +158,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +182,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +198,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/stagenet/src/configs/mod.rs b/operator/runtime/stagenet/src/configs/mod.rs index 12b4a960..a4b43eab 100644 --- a/operator/runtime/stagenet/src/configs/mod.rs +++ b/operator/runtime/stagenet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -49,6 +50,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; RuntimeDebug, MaxEncodedLen, TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, )] @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -395,6 +394,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = stagenet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -590,6 +590,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = stagenet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -653,8 +654,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -684,6 +684,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = stagenet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -849,6 +850,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1050,6 +1052,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = stagenet_weights::pallet_evm::WeightInfo; } diff --git a/operator/runtime/stagenet/src/configs/runtime_params.rs b/operator/runtime/stagenet/src/configs/runtime_params.rs index dcf136c9..5294fd94 100644 --- a/operator/runtime/stagenet/src/configs/runtime_params.rs +++ b/operator/runtime/stagenet/src/configs/runtime_params.rs @@ -15,11 +15,11 @@ // along with DataHaven. If not, see . use crate::Runtime; +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::configs::storagehub::{ChallengeTicksTolerance, ReplicationTargetType, SpMinDeposit}; use crate::currency::{GIGAWEI, HAVE, SUPPLY_FACTOR}; diff --git a/operator/runtime/stagenet/src/configs/storagehub/client.rs b/operator/runtime/stagenet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/stagenet/src/configs/storagehub/client.rs +++ b/operator/runtime/stagenet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/stagenet/src/configs/storagehub/mod.rs b/operator/runtime/stagenet/src/configs/storagehub/mod.rs index 79a71b14..f5a59505 100644 --- a/operator/runtime/stagenet/src/configs/storagehub/mod.rs +++ b/operator/runtime/stagenet/src/configs/storagehub/mod.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +extern crate alloc; #[cfg(not(feature = "runtime-benchmarks"))] use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,6 +28,8 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -626,16 +628,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -699,6 +701,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/stagenet/src/genesis_config_presets.rs b/operator/runtime/stagenet/src/genesis_config_presets.rs index 0265f5a3..671eae1c 100644 --- a/operator/runtime/stagenet/src/genesis_config_presets.rs +++ b/operator/runtime/stagenet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 80)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/stagenet/src/lib.rs b/operator/runtime/stagenet/src/lib.rs index df43090f..be11d95e 100644 --- a/operator/runtime/stagenet/src/lib.rs +++ b/operator/runtime/stagenet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -51,7 +55,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -82,7 +86,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -195,16 +198,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -229,6 +226,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1075,6 +1073,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1104,6 +1103,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1122,6 +1122,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1155,6 +1156,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1235,7 +1237,7 @@ impl_runtime_apis! { //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1282,6 +1284,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1417,7 +1428,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1430,6 +1441,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/stagenet/src/weights/frame_system.rs b/operator/runtime/stagenet/src/weights/frame_system.rs index 444c87c8..ca87528b 100644 --- a/operator/runtime/stagenet/src/weights/frame_system.rs +++ b/operator/runtime/stagenet/src/weights/frame_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_babe.rs b/operator/runtime/stagenet/src/weights/pallet_babe.rs index 6d8f9c58..6ed6b84c 100644 --- a/operator/runtime/stagenet/src/weights/pallet_babe.rs +++ b/operator/runtime/stagenet/src/weights/pallet_babe.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); impl pallet_babe::WeightInfo for WeightInfo { diff --git a/operator/runtime/stagenet/src/weights/pallet_balances.rs b/operator/runtime/stagenet/src/weights/pallet_balances.rs index a809fcf8..9d8baeb2 100644 --- a/operator/runtime/stagenet/src/weights/pallet_balances.rs +++ b/operator/runtime/stagenet/src/weights/pallet_balances.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs index 179b34ed..99d4a97e 100644 --- a/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); @@ -90,4 +90,6 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(1_561_896, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + + fn n_leafs_proof_is_optimal(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs index 1764a190..94d71dcf 100644 --- a/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs index b9ad8bdb..cc490929 100644 --- a/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs b/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs index d39df1d0..ea69215e 100644 --- a/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs index effd2363..63498c9b 100644 --- a/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_evm.rs b/operator/runtime/stagenet/src/weights/pallet_evm.rs index 950955fd..f94d11d7 100644 --- a/operator/runtime/stagenet/src/weights/pallet_evm.rs +++ b/operator/runtime/stagenet/src/weights/pallet_evm.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs index cd06db35..39796b7e 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validators.rs b/operator/runtime/stagenet/src/weights/pallet_external_validators.rs index 763d05b8..52338a21 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs index 34d31953..57e29ee0 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_grandpa.rs b/operator/runtime/stagenet/src/weights/pallet_grandpa.rs index f30c5bcf..d148cee3 100644 --- a/operator/runtime/stagenet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/stagenet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_im_online.rs b/operator/runtime/stagenet/src/weights/pallet_im_online.rs index be005d40..dfa2d965 100644 --- a/operator/runtime/stagenet/src/weights/pallet_im_online.rs +++ b/operator/runtime/stagenet/src/weights/pallet_im_online.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_message_queue.rs b/operator/runtime/stagenet/src/weights/pallet_message_queue.rs index a3a919eb..ec68caa2 100644 --- a/operator/runtime/stagenet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/stagenet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_mmr.rs b/operator/runtime/stagenet/src/weights/pallet_mmr.rs index 5c74c9ab..dc6b7922 100644 --- a/operator/runtime/stagenet/src/weights/pallet_mmr.rs +++ b/operator/runtime/stagenet/src/weights/pallet_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_multisig.rs b/operator/runtime/stagenet/src/weights/pallet_multisig.rs index 2e0b2be6..0623414b 100644 --- a/operator/runtime/stagenet/src/weights/pallet_multisig.rs +++ b/operator/runtime/stagenet/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -169,4 +169,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + + fn poke_deposit(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/stagenet/src/weights/pallet_nfts.rs b/operator/runtime/stagenet/src/weights/pallet_nfts.rs index 852419ff..0dafe6b6 100644 --- a/operator/runtime/stagenet/src/weights/pallet_nfts.rs +++ b/operator/runtime/stagenet/src/weights/pallet_nfts.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_parameters.rs b/operator/runtime/stagenet/src/weights/pallet_parameters.rs index f95cb00c..cae74edc 100644 --- a/operator/runtime/stagenet/src/weights/pallet_parameters.rs +++ b/operator/runtime/stagenet/src/weights/pallet_parameters.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs b/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs index 3ac0c1d5..3c38b1ac 100644 --- a/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_preimage.rs b/operator/runtime/stagenet/src/weights/pallet_preimage.rs index 07cba0f5..2fc3d2d4 100644 --- a/operator/runtime/stagenet/src/weights/pallet_preimage.rs +++ b/operator/runtime/stagenet/src/weights/pallet_preimage.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs index 8fb40c96..860bc5a6 100644 --- a/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_proxy.rs b/operator/runtime/stagenet/src/weights/pallet_proxy.rs index 7e12be9d..ba33a80a 100644 --- a/operator/runtime/stagenet/src/weights/pallet_proxy.rs +++ b/operator/runtime/stagenet/src/weights/pallet_proxy.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -224,4 +224,8 @@ impl pallet_proxy::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + + fn poke_deposit() -> Weight { + todo!() + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_randomness.rs b/operator/runtime/stagenet/src/weights/pallet_randomness.rs index 477df36c..b22a8020 100644 --- a/operator/runtime/stagenet/src/weights/pallet_randomness.rs +++ b/operator/runtime/stagenet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_referenda.rs b/operator/runtime/stagenet/src/weights/pallet_referenda.rs index dfe4de99..1e614169 100644 --- a/operator/runtime/stagenet/src/weights/pallet_referenda.rs +++ b/operator/runtime/stagenet/src/weights/pallet_referenda.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs b/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs index 67af1dcc..03037b9a 100644 --- a/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_scheduler.rs b/operator/runtime/stagenet/src/weights/pallet_scheduler.rs index 3fb00841..1744eb10 100644 --- a/operator/runtime/stagenet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/stagenet/src/weights/pallet_scheduler.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_session.rs b/operator/runtime/stagenet/src/weights/pallet_session.rs index 9c65f513..e4afaff5 100644 --- a/operator/runtime/stagenet/src/weights/pallet_session.rs +++ b/operator/runtime/stagenet/src/weights/pallet_session.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs b/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs index 005a1700..acfd303c 100644 --- a/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_sudo.rs b/operator/runtime/stagenet/src/weights/pallet_sudo.rs index e84c4d05..8c04691d 100644 --- a/operator/runtime/stagenet/src/weights/pallet_sudo.rs +++ b/operator/runtime/stagenet/src/weights/pallet_sudo.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_timestamp.rs b/operator/runtime/stagenet/src/weights/pallet_timestamp.rs index b098ca83..b44b740b 100644 --- a/operator/runtime/stagenet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/stagenet/src/weights/pallet_timestamp.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs b/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs index ea62e0a5..721e7e87 100644 --- a/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_treasury.rs b/operator/runtime/stagenet/src/weights/pallet_treasury.rs index 69ffe3b2..a2caa970 100644 --- a/operator/runtime/stagenet/src/weights/pallet_treasury.rs +++ b/operator/runtime/stagenet/src/weights/pallet_treasury.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs b/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs index a88c0fd3..6b7acfa9 100644 --- a/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_utility.rs b/operator/runtime/stagenet/src/weights/pallet_utility.rs index 0b5be39c..48517ea0 100644 --- a/operator/runtime/stagenet/src/weights/pallet_utility.rs +++ b/operator/runtime/stagenet/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -119,4 +119,11 @@ impl pallet_utility::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(6_810_676, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + todo!() + } + + fn if_else() -> Weight { + todo!() + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_whitelist.rs b/operator/runtime/stagenet/src/weights/pallet_whitelist.rs index 88463552..a5ab6ab7 100644 --- a/operator/runtime/stagenet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/stagenet/src/weights/pallet_whitelist.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs index ba87788d..71d88f12 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 4aa69fde..c27c9ea5 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 90400a2e..1b96e75e 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs index fcfc581c..19254c3b 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs index ec6d7508..4a3fed9c 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/tests/common.rs b/operator/runtime/stagenet/tests/common.rs index 9a8edc40..fa7639e4 100644 --- a/operator/runtime/stagenet/tests/common.rs +++ b/operator/runtime/stagenet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/stagenet/tests/governance/benchmarks.rs b/operator/runtime/stagenet/tests/governance/benchmarks.rs index 1cf51ad2..c40e6110 100644 --- a/operator/runtime/stagenet/tests/governance/benchmarks.rs +++ b/operator/runtime/stagenet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_stagenet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/stagenet/tests/governance/referenda.rs b/operator/runtime/stagenet/tests/governance/referenda.rs index fa8a0c8a..00ea4ca4 100644 --- a/operator/runtime/stagenet/tests/governance/referenda.rs +++ b/operator/runtime/stagenet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_stagenet_runtime::{ currency::{HAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 100000 * HAVE * SUPPLY_FACTOR); // 100 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 100000 * HAVE * SUPPLY_FACTOR + ); // 100 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/stagenet/tests/lib.rs b/operator/runtime/stagenet/tests/lib.rs index 4277d463..93ee9058 100644 --- a/operator/runtime/stagenet/tests/lib.rs +++ b/operator/runtime/stagenet/tests/lib.rs @@ -66,6 +66,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/stagenet/tests/treasury.rs b/operator/runtime/stagenet/tests/treasury.rs index 82d3eeee..7bf9f502 100644 --- a/operator/runtime/stagenet/tests/treasury.rs +++ b/operator/runtime/stagenet/tests/treasury.rs @@ -73,6 +73,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -115,6 +116,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/operator/runtime/testnet/Cargo.toml b/operator/runtime/testnet/Cargo.toml index 9eb0d7d0..1675a8c2 100644 --- a/operator/runtime/testnet/Cargo.toml +++ b/operator/runtime/testnet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true, features = ["serde"] } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -121,7 +122,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -191,6 +191,7 @@ std = [ "alloy-core/std", "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -280,7 +281,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/testnet/src/configs/governance/origins.rs b/operator/runtime/testnet/src/configs/governance/origins.rs index 0f943cf6..be8043d8 100644 --- a/operator/runtime/testnet/src/configs/governance/origins.rs +++ b/operator/runtime/testnet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/testnet/src/configs/governance/referenda.rs b/operator/runtime/testnet/src/configs/governance/referenda.rs index cbb68bf5..e65727d3 100644 --- a/operator/runtime/testnet/src/configs/governance/referenda.rs +++ b/operator/runtime/testnet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = testnet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = testnet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/testnet/src/configs/governance/tracks.rs b/operator/runtime/testnet/src/configs/governance/tracks.rs index c1b8a233..21d171b4 100644 --- a/operator/runtime/testnet/src/configs/governance/tracks.rs +++ b/operator/runtime/testnet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 20 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,25 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +158,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +182,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +198,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/testnet/src/configs/mod.rs b/operator/runtime/testnet/src/configs/mod.rs index 27dbc538..fb73dd44 100644 --- a/operator/runtime/testnet/src/configs/mod.rs +++ b/operator/runtime/testnet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -49,6 +50,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; RuntimeDebug, MaxEncodedLen, TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, )] @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -395,6 +394,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = testnet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -593,6 +593,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = testnet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -656,8 +657,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -687,6 +687,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = testnet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -852,6 +853,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1053,6 +1055,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = testnet_weights::pallet_evm::WeightInfo; } diff --git a/operator/runtime/testnet/src/configs/runtime_params.rs b/operator/runtime/testnet/src/configs/runtime_params.rs index 40c89108..b0ffbfc9 100644 --- a/operator/runtime/testnet/src/configs/runtime_params.rs +++ b/operator/runtime/testnet/src/configs/runtime_params.rs @@ -14,11 +14,11 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::Runtime; diff --git a/operator/runtime/testnet/src/configs/storagehub/client.rs b/operator/runtime/testnet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/testnet/src/configs/storagehub/client.rs +++ b/operator/runtime/testnet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/testnet/src/configs/storagehub/mod.rs b/operator/runtime/testnet/src/configs/storagehub/mod.rs index 7717475c..9f3eb3a3 100644 --- a/operator/runtime/testnet/src/configs/storagehub/mod.rs +++ b/operator/runtime/testnet/src/configs/storagehub/mod.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +extern crate alloc; #[cfg(not(feature = "runtime-benchmarks"))] use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,6 +28,8 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -627,16 +629,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -700,6 +702,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/testnet/src/genesis_config_presets.rs b/operator/runtime/testnet/src/genesis_config_presets.rs index e568f266..d5875718 100644 --- a/operator/runtime/testnet/src/genesis_config_presets.rs +++ b/operator/runtime/testnet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 80)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/testnet/src/lib.rs b/operator/runtime/testnet/src/lib.rs index a8248dbd..40d6345f 100644 --- a/operator/runtime/testnet/src/lib.rs +++ b/operator/runtime/testnet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -54,7 +58,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -85,7 +89,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -193,16 +196,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -227,6 +224,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1073,6 +1071,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1102,6 +1101,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1120,6 +1120,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1153,6 +1154,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1232,7 +1234,7 @@ impl_runtime_apis! { //║ STORAGEHUB APIS ║ //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1279,6 +1281,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1414,7 +1425,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1427,6 +1438,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/testnet/src/weights/frame_system.rs b/operator/runtime/testnet/src/weights/frame_system.rs index 059a1edf..f988cea8 100644 --- a/operator/runtime/testnet/src/weights/frame_system.rs +++ b/operator/runtime/testnet/src/weights/frame_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_babe.rs b/operator/runtime/testnet/src/weights/pallet_babe.rs index f8a55290..6a33371b 100644 --- a/operator/runtime/testnet/src/weights/pallet_babe.rs +++ b/operator/runtime/testnet/src/weights/pallet_babe.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_balances.rs b/operator/runtime/testnet/src/weights/pallet_balances.rs index 7cdcf267..6a06a3c1 100644 --- a/operator/runtime/testnet/src/weights/pallet_balances.rs +++ b/operator/runtime/testnet/src/weights/pallet_balances.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs index 50120ed7..4a536f01 100644 --- a/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); @@ -90,4 +90,6 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(1_513_924, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + + fn n_leafs_proof_is_optimal(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs index 3527a3f4..2aeac645 100644 --- a/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs index b2cdaa06..2a2008e0 100644 --- a/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs b/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs index 22a06d01..7fb44c66 100644 --- a/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs index 30942c1e..e76d68c6 100644 --- a/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_evm.rs b/operator/runtime/testnet/src/weights/pallet_evm.rs index a637fc67..710bb673 100644 --- a/operator/runtime/testnet/src/weights/pallet_evm.rs +++ b/operator/runtime/testnet/src/weights/pallet_evm.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs index 85e6f04f..5dd4c60c 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_external_validators.rs b/operator/runtime/testnet/src/weights/pallet_external_validators.rs index d989bab6..2a5559fd 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs index 9b7e752d..9fc6329e 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_grandpa.rs b/operator/runtime/testnet/src/weights/pallet_grandpa.rs index 6d02ae74..ac0f4d1e 100644 --- a/operator/runtime/testnet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/testnet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_identity.rs b/operator/runtime/testnet/src/weights/pallet_identity.rs index 37a46dc8..1cba2573 100644 --- a/operator/runtime/testnet/src/weights/pallet_identity.rs +++ b/operator/runtime/testnet/src/weights/pallet_identity.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_identity`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_im_online.rs b/operator/runtime/testnet/src/weights/pallet_im_online.rs index bd568124..c65dabff 100644 --- a/operator/runtime/testnet/src/weights/pallet_im_online.rs +++ b/operator/runtime/testnet/src/weights/pallet_im_online.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_message_queue.rs b/operator/runtime/testnet/src/weights/pallet_message_queue.rs index eea08550..c9c4413c 100644 --- a/operator/runtime/testnet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/testnet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/testnet/src/weights/pallet_mmr.rs b/operator/runtime/testnet/src/weights/pallet_mmr.rs index f4b2df6a..02c87727 100644 --- a/operator/runtime/testnet/src/weights/pallet_mmr.rs +++ b/operator/runtime/testnet/src/weights/pallet_mmr.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_multisig.rs b/operator/runtime/testnet/src/weights/pallet_multisig.rs index 98c41959..fff435ce 100644 --- a/operator/runtime/testnet/src/weights/pallet_multisig.rs +++ b/operator/runtime/testnet/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -169,4 +169,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + + fn poke_deposit(_: u32) -> sp_runtime::Weight { todo!() } } diff --git a/operator/runtime/testnet/src/weights/pallet_nfts.rs b/operator/runtime/testnet/src/weights/pallet_nfts.rs index 2e594b5b..ecc08144 100644 --- a/operator/runtime/testnet/src/weights/pallet_nfts.rs +++ b/operator/runtime/testnet/src/weights/pallet_nfts.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_parameters.rs b/operator/runtime/testnet/src/weights/pallet_parameters.rs index 612a193e..540b96e1 100644 --- a/operator/runtime/testnet/src/weights/pallet_parameters.rs +++ b/operator/runtime/testnet/src/weights/pallet_parameters.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_payment_streams.rs b/operator/runtime/testnet/src/weights/pallet_payment_streams.rs index d094d81d..018bd086 100644 --- a/operator/runtime/testnet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/testnet/src/weights/pallet_payment_streams.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_preimage.rs b/operator/runtime/testnet/src/weights/pallet_preimage.rs index da320fba..b8fcd5fa 100644 --- a/operator/runtime/testnet/src/weights/pallet_preimage.rs +++ b/operator/runtime/testnet/src/weights/pallet_preimage.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs index 7ad738bf..4480fc10 100644 --- a/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_proxy.rs b/operator/runtime/testnet/src/weights/pallet_proxy.rs index 44438277..b5e44871 100644 --- a/operator/runtime/testnet/src/weights/pallet_proxy.rs +++ b/operator/runtime/testnet/src/weights/pallet_proxy.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -224,4 +224,19 @@ impl pallet_proxy::WeightInfo for WeightInfo { .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`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `496` + // Estimated: `5302` + // Minimum execution time: 32_000_000 picoseconds. + Weight::from_parts(32_000_000, 5302) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } } diff --git a/operator/runtime/testnet/src/weights/pallet_randomness.rs b/operator/runtime/testnet/src/weights/pallet_randomness.rs index c206ef94..c5e51f01 100644 --- a/operator/runtime/testnet/src/weights/pallet_randomness.rs +++ b/operator/runtime/testnet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_referenda.rs b/operator/runtime/testnet/src/weights/pallet_referenda.rs index a20ffdc7..538545d8 100644 --- a/operator/runtime/testnet/src/weights/pallet_referenda.rs +++ b/operator/runtime/testnet/src/weights/pallet_referenda.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_safe_mode.rs b/operator/runtime/testnet/src/weights/pallet_safe_mode.rs index ab029bd6..19e693ed 100644 --- a/operator/runtime/testnet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/testnet/src/weights/pallet_safe_mode.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_scheduler.rs b/operator/runtime/testnet/src/weights/pallet_scheduler.rs index d4fcdad1..a83cdb7d 100644 --- a/operator/runtime/testnet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/testnet/src/weights/pallet_scheduler.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_session.rs b/operator/runtime/testnet/src/weights/pallet_session.rs index 154c1a57..bc9f6b47 100644 --- a/operator/runtime/testnet/src/weights/pallet_session.rs +++ b/operator/runtime/testnet/src/weights/pallet_session.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_storage_providers.rs b/operator/runtime/testnet/src/weights/pallet_storage_providers.rs index 663eb999..88e584d4 100644 --- a/operator/runtime/testnet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/testnet/src/weights/pallet_storage_providers.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_sudo.rs b/operator/runtime/testnet/src/weights/pallet_sudo.rs index 769930bd..0d189550 100644 --- a/operator/runtime/testnet/src/weights/pallet_sudo.rs +++ b/operator/runtime/testnet/src/weights/pallet_sudo.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_timestamp.rs b/operator/runtime/testnet/src/weights/pallet_timestamp.rs index a94add38..c2774151 100644 --- a/operator/runtime/testnet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/testnet/src/weights/pallet_timestamp.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs b/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs index 55b4152e..3e9c32b5 100644 --- a/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_treasury.rs b/operator/runtime/testnet/src/weights/pallet_treasury.rs index b78574e3..def2b2bb 100644 --- a/operator/runtime/testnet/src/weights/pallet_treasury.rs +++ b/operator/runtime/testnet/src/weights/pallet_treasury.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_tx_pause.rs b/operator/runtime/testnet/src/weights/pallet_tx_pause.rs index 402c7223..cd80698d 100644 --- a/operator/runtime/testnet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/testnet/src/weights/pallet_tx_pause.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_utility.rs b/operator/runtime/testnet/src/weights/pallet_utility.rs index 8928dc1e..89e069e8 100644 --- a/operator/runtime/testnet/src/weights/pallet_utility.rs +++ b/operator/runtime/testnet/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -119,4 +119,21 @@ impl pallet_utility::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(6_535_635, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_000_000 picoseconds. + Weight::from_parts(5_000_000, 0) + } + /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) + /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + fn if_else() -> Weight { + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `1527` + // Minimum execution time: 8_000_000 picoseconds. + Weight::from_parts(8_000_000, 1527) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } } diff --git a/operator/runtime/testnet/src/weights/pallet_whitelist.rs b/operator/runtime/testnet/src/weights/pallet_whitelist.rs index 5bccb462..9018d7d8 100644 --- a/operator/runtime/testnet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/testnet/src/weights/pallet_whitelist.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs index fe2056db..6b63e15f 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 060c275a..1446792c 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 7190ed81..f03e6e6f 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs index 4dddbeec..7bf737cb 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs index 129b8ec4..e68144f8 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/tests/common.rs b/operator/runtime/testnet/tests/common.rs index b2df06ea..77550995 100644 --- a/operator/runtime/testnet/tests/common.rs +++ b/operator/runtime/testnet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/testnet/tests/governance/benchmarks.rs b/operator/runtime/testnet/tests/governance/benchmarks.rs index 0bd3b245..2b5629f4 100644 --- a/operator/runtime/testnet/tests/governance/benchmarks.rs +++ b/operator/runtime/testnet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_testnet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/testnet/tests/governance/referenda.rs b/operator/runtime/testnet/tests/governance/referenda.rs index 0ff9c1e6..9625884b 100644 --- a/operator/runtime/testnet/tests/governance/referenda.rs +++ b/operator/runtime/testnet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_testnet_runtime::{ currency::{HAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 100000 * HAVE * SUPPLY_FACTOR); // 100 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 100000 * HAVE * SUPPLY_FACTOR + ); // 100 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/testnet/tests/lib.rs b/operator/runtime/testnet/tests/lib.rs index e97fde3c..6e1eb99f 100644 --- a/operator/runtime/testnet/tests/lib.rs +++ b/operator/runtime/testnet/tests/lib.rs @@ -67,6 +67,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/testnet/tests/treasury.rs b/operator/runtime/testnet/tests/treasury.rs index 35b3f306..7f5dc514 100644 --- a/operator/runtime/testnet/tests/treasury.rs +++ b/operator/runtime/testnet/tests/treasury.rs @@ -72,6 +72,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -114,6 +115,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/test/.papi/descriptors/package.json b/test/.papi/descriptors/package.json index 185bc678..aa8c9c70 100644 --- a/test/.papi/descriptors/package.json +++ b/test/.papi/descriptors/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.0-autogenerated.18139584469151706411", + "version": "0.1.0-autogenerated.17592112782245438099", "name": "@polkadot-api/descriptors", "files": [ "dist" diff --git a/test/.papi/metadata/datahaven.scale b/test/.papi/metadata/datahaven.scale index 3f4882b211f71d8afcb306069413c129280f4b53..1799b57618aa1771e510b0e641110120b5f9d960 100644 GIT binary patch delta 32981 zcmcG14}4U`_3xcOH+ye(6B6_PA8a6j1d@)S?zG`QPbgO2YH`3ECsedk#U={^w0?PSRMCRcsEyRE9# z-P-E$HcpsOy4Ky;Ry41@vCY%qo^)Wmx{#9dzT0g@zM)!)Sn)NBqbl{iY?~}{RigUp zv?!wcuGJ=x7@whyp{mXIiIz(fY`zpdl@$9X>*HvtO;n9mhx_i=GijMkJULn&;rl`# z$;)lzWl{AV8Rk2yNBX|q6GL4#QIV^r_^#sN;+kAFj=OE-F)?K!ix-dQsv*8(p+ktr zcQ*7=-fSZeiqvaayl=AINjCec?c?YUo47ttP4NB7oI=%yQDeba)z9JKMZYS5s4chttz`;KqojE(zg$fkGU<3B&e8O}|2- z;%f7@O!u_9R@S>~xp?veHh2tg>V4w`Le7TAqrUnB{3E{Oe>T4bulTu;5o`KF- z>8e>XO^(A_PBIz*P$dq}V6lU2{H6tUZs#gL2(oP^83(=@d6Hi;rDV0cvDQ`ASmSMI z!T@%2-|SII!*qU=^}^|C1wjKZovT{B4bJLyb?(OM1AiJl+(Dubd_D1bYR{eSZt}Kz z+A6$jg!6iq=$lX!6GF1Q^|e*L9}40SY;>$fj1{zmpiUvYQ48+&7AgzmF|`q-j<>TS^dj4eG2pH>ac*kyuJ^cG zof7@VMsIs#jk^IezSSIKXac}SW89%hvN66#+a8{%<@%X~%-a!Mxt3gE6{sjmeo6lV z6{0BT56o*nrIHK2+-rW0zbCFqr-X{*1w8q{JDc{Z;u;^%Q*N@Tyu?r3jvHo03o-dd-3mDA;{@iwmY)U<)^S%q1BQ=0|C)H>Vbz-w=; zZABex-PROoZ(v_JfaKgoB~o!13|MLu@`@NHi? zWeGGwRGecmzA1OdhNMtF3k-VM-I*ZpPwp;eDOB?vE=ls8zB`_$QnJt2`Pg#bl_G)X zQL@KJ?qBA6U8ImDz8-NsT~2)^53TSWzh@-(P;fc<_Sr`-@ipv-;|-MTH}iJy7)&=< zfHn6H;ag?81bqMAWOC5=!@bw=bAhD4+~=e*%=i4yR`{;mnMzZbS^V2Ooix=7F5Ts% zhyAI$hLWSc?{{tBJq(CREZ@05iJr6GE_xt^o@aO7x5D?v1DTX?-wzMm#nZVT$1fku zYMV=)qD#lyG`K4pO4@> zI9R#N`M^V(Z|~2?@Z%hdVj#iL!+n)|M$ilV&c{}mAn)xNO|jHP{$d;7rvd|sYSS+U z`67Qg7zD`uic2W3ZHm*I4uwH<^6JnFJJBkeAKIJ2Jt5>6 zDqG>peq=apw$cwgGMIOS_`4_X(QIOh2Oe&szYzXfT@zcJ3UoKFt zdbIh@aND3PXJENjJc^QfAnoz*2ub%jpPWjv57a#QgPM>|6@_L}1wVyrMMX-sOej+F zeAoQCj1>4%e^W@xe6M~Q?Yru2`+>m*CH)f*cz^Q-A>{|A|8|2+|J~EMg@sfrt0g5= zi6EFutH6rgEhUs7Q6Ukn_1?BpN+RatsgT@No|e|Osya7T!InbbsAm$w3c=!LnQ=ua z^i@7{B?N`Xp1D#h238>vN{KJLYaBXmM%Qp))zDRn?mf_zPs^$J{4U(aq?@U)IeobAj=zMHEx!Bz66e?=^Gq@GZ1o-f%WTr=3x9j2)x`&{ zdfP^V5?*=d3e~sm{dix|`$Y-cDVbH;-0oTHt#L`#STrlkIcJihZ1;7(Ur2WNUV6Ws z?Dds=P>=BAA7qB?qI^E))~OFhJNKYlGp@*T&PRX5x4OYzYx^ZByL?$6mIL(a4>QxY zpcZ%Sn1X`5!U+@Rdsa8P+S*&dJ@=TMw2SVh%3ibheSO96A6R_9BxRqkw0o{&zgfUO zS-?TxgWZ>tL%vVDJNzxb`fnNuN_gd+1H||HGd-ATb3WbVhnoEfA%TPguYURuLVA3K zU(EHt9r1Z&aKf%H{v`|T{4&P(#6O$~?KG{oJ*0~&8i_V1z!Bfa|Hy$5`td)8Q>Dw_ z;bDXNfaTJ0*w^%BjN`EEy%Mwcj-cGpgD)=AK{6oOGs5Rr;DHeH%a*#f;?t52}(^PSg2)Py?5ls>5RC3z)__^R2e%klOx$)q*VPBVy zK10crE8I0j*3^|Ea3;o9w?rXdIU^ruse&Ic$<0@Ke4DJ9spBNN22;QF{PvAx*nyefEMp`^JlTQpAHS`~&c#e#bfJP`b$s}TA^w-X zPk!)`^9MJQBI-{Of2HK>h-A;IDmP?SjYLQ>)GEnNdL>XRp)6!s41q}9BoTld5s*)v z5)(+BrtILB`zSLcOR`?Aa(U`orO57H@2+WYbLaTpyO6W-!v%E^Rv~LxqKG+KoUXPu zcS94zGC)Hzx2lpdNwqAl+AJ^Ujj~l{4gJ!94C=_Tk^_iUOKI3F5prry4Dndmtk)ZB z*2vebmWaNp9nwi}jcy1-veI>K&+0lL1F>nPx2?{sy)~VUCpVrRv`{u#jtU9nZz1rS?d(S>YsBOzS!nD+5MvrBvILdR z_cm;FJKK>WY1Ha$kmC#_TkEZd(B0a;5=^em#M)VH&i86(TSt?B0Dv%Vw9nmQ(ju#u z5E)LnyOAj6R0QTum8-Q%63T;ZF!thzS}LYp7X89>v3nI6vOSzcRaBCa z`UY>SHH%wa4H)dL&ZX5AD8}73VM4#6tCu@hwztXs)jC%TwhWTS)-cCNmSpiXHo9BH zPDVD`&r2?sLX``aFd#}eNuY#@Wt@x?XE~W>Dp`mwKI5bkJDw>j8Jil($TI&X%q?5& zZf}?{VXoPW${0mK_MTEGNgh+lRN)OFH;U#EvJshkLddU4qRjO7e`8BS8r~6SGKo2svbAjv@aFA?adxAt@o5qOOqSEzV;kV!Er% zrI6@)_i9&tU)-_Iy|OPBfqi9LUo_f{`PmP+sA+Xm)hdi+cMG^nW7}TQQ%I5q_hm?K z!(451xAdkcnM|C%ndYWuGd^Dm2YVQaH_3_>Gn>gJGLPjkC69^f1Rf{uoIv6-3Xo2e zhCn12r<(xYF57;x!CEZK?ym+gq9STW$T1F^woY%Fluh1d`) z24r@NiXyUjqwE~~BxPmSFlGX+1)0E~X+pnn1sOd=aH4>2A;w@EJBP=t~$Mzn}I z-bU;!lnAUfZmx789|+$i-kwB;5mVrXMnXJ3l*fyl$t09Si^9odx}P%|KbuUPlpGNw zFC&>D5mN53WI!WkDv8#}5d$x-3JuSdnzJguZqOl4m60Mb|1uIgndg56-J-Sn2ULeG z?pAjTlvS1v5sTP*Ppi4eL5^zkK!A68p{6o-U*h&`GSSx1jzwstTRfOU;wC}}TPBy3 zfxtNmAq()Pt;N;Y>X%)>7^U>E&gDUcVp0K%3zr(-nmQL)5oDwU@!jPlC!x{puJt3- zCIz8D;W=XT6jB+MBU zcQZlPw-;dHI4ZCdP2tBFsqp1ai55#1lK0s$76Coh7}0bEN$1BIdDvH8GEz5g?Cf(xr zVuW`rCgZGd1vw**SCcqVxP*)jgs)#hmIt!+^b4=Nl4J*pc<4%!6bQf8FHDw_yg>Sl ze&Jh}lEOgxTT980(Kk(5BVVi|DoqwDJz{`0av)JH5QqXKwdwH(bjBghJpD*k6V zV9fBUK+={KWNsk*ZNKoEDpc>!_IwqVJ3k2$s?j`ucttfS2!tQ4Mn9S9(*rHYboGHY zx=1SeVVjFA!sBBXDGflCtVH4d_T0S^5{*Cn-Acfi;RS)Dy)`KCgm|-tl%cBBS~4Dw zD{IMOa#kFuCG%st8OincaC_dE@spGsML8jo+++kfDW=KCDY3>4L{E!O8S55@WbBOi zt9+al>MAmV_AuWRPqdi2io^xPpX*kU1}i+w7_^%Fo&+M_)RA05&WVhxND+5YOzO#A zGQ_y~DiR5i#Mn_!c2Vl0zDVzIvBFET_!&l;#O+=Zr%8SPBt@+g4_rm28=rYenNH4& z@g2lTvc!@OblL^c*+C$B8rZHzh0&g`Z`G9;7FbpQ^^ikR|6FGZQ}V2 zWZaPdh9%_&v84Z&d0Y@@??8VNE@HQl$wW1-*hX$6px_6cWH>tg!9TDRW5k_g8|4Wc z*1~56q{`Rs0w__%CV}yxiwSp=?Bp<>)z4Z(B8V1Wf}P)5tQL{t#=9|>!$iqFU^J29 z{M}?EVrc>+HAc)6BquY5_g`_s_<$8B41x((oCL8~ki3W#066D2xobSDJT+WN6@M2P z1ZRYP4{^p{Af(7Yz@?zH zbDkqnDaDjbukhB_mq9PQe(tJ(^~=-~g&DBz{920L1&7JQ8YwW|JxaD|Bu{u>Bb!Nq zIQJU5rck834#sgoRK1R=n;7st!7BI3Ie|nuCTzHRkurlrtRUe>lZ$C}K!pB0J z9X}gle@zF(V6pc!xSU(Obeaq$?c%f3BtAX4w5(#>xLnAX9UO{NE3%+(0hR(^xmf-I z87zjsPm(88LY1{}Ou?lJNn4FgDE0z1?u*juJy<;Z(&DX^e2LihAxS2cV&8`(!QQ9l zTQ0iZCkgqLQ0q&zg-4FtD!E5)wd#RbybvbYrBIVkbmlKt5QAui|4Ob{`T=o@kspvT zWVuAKkhp~S036R{A^f)w&`!4u#|h_$SfbLzliei#|4kdxlRPl?mY8hZ#oxucVkjy znD~Q+$3I5PD#fQr9NtH1vq%2-)c@aOPCEK(cF55Y7#Je=L$Icx`bYie`m<`GZ1q4r z4vE$p0$25Ah=7&WRYanvcC@)+G_piQKB2_wFzHkUXs?i7;js;z~D*m{JJ)@BH1pMLhC1awj^u_#@2cO40EVq$G>h z30rxu67v7Iu4!k;8Z_#O zGY}d6zcy;~--)MqYtU+j&bfI1REg1mC8<*mitX40pQj}!|(0mt4Y zuK9%AP7aFDPsuIhnArX)*^R`xJ!FVD`#I6XinHKmyTvtUNe0;?p8f|JD*kX5D`B_j zK1&whF{Ov(i^k8$wc>OS87?9|Cy8XQ81*^HOWwyxnq?ll+})uldw~OkrbF4sm3^{` zbg}Dm5arLG3E>6 z!Ompo7o>F9Zj76$ZWnafetRV;f)WRAHEkVLE5YS!>beE*ArmiVNrz;?my<2xz8*3z zq6_%;8inNE)5OvC4-!7-Feeozj`PcA&M8^2a9(Ku&BGGSY7@;PL7j4RV5b}fEIQ?A zZ*w$p%Rj)#O~MvmjNCDyeMx4+>h1Wc?SHf55t`p+v zugIjNlbkr9m&TNV|A%+gDVSVL+mE80lmO|X@En%KZn5+n83FfPe9uR;DZV$IiN6zkzc?ED5};_0tRLiy+Nan5{W6#kRI zzE>$OKTqbd^AH{?d&n^3f6il7LF(JzlItOpEc*_7k`vX>^TBo!D;Prqbku zVwL2s&7Uw~w%=Y1c|*GbdbDP7Sfx>bI-%0Ch;(3fncu?Iswn9qCxm8i%v6apkcuX1 zi^ph6P+D*d#?-}Q9l>e;DaHVwAMx)YHa05%{$-hzf)1xrSTWR2e<#C zm;Zqd!H^*+dR%gF+J6_@h)MY$DG*$Y4Hb=d2B-aB#WH*Q{y!B1b!VoyUZW$id&!ET zLrAum9Yv?$u{DYo;qhV=t$@gy6ipXgQlOIfsovTS(+{P|)zVfdHbqnCgglJDIqtS~ z-j+3Z1+{5*(5%Dji+M<%HS6-km7(+;b|n>dIt>`yWv6x6oLsQeahcfVINHaK!N_&a zXtAVpjW`;;4ZSa-Yuz#`mOE%_#DLV>9du~Y#i{->!NH2fOAb0Yq9l0gl!(MIT7X>( zxrC;O)NmRlt`DPjvP2Xk0fPKe`EZF2`EUz?N2y08vr1ZOik1clKG8XD`6Ouj(V-Bp z2fiJTx1f6|Xkcoo%T%RIjEta(A}Wf;2RfqM>WFfyBg+4)j;Or2Bg%t10UD5qk5*gx(ZHXuQ6d(3^n-aM&#Ce|O;)iIOBVP}(ZPlF$fu z%CICf!rNsS|7CcG3`;^Iyi0~9p%LCK!;;Vl?-Aj#G?VXD$@9?A#*1ySXlO$$wFM=O zgqT;d6tiug_#u|Ill?|}9KG3GPrr|+k67zxvhHeah2OfTws$%GGJ(EF=zepV%o8EW zbP7MHIx2i$ghq=g%a~2Llj(5CcMmROF=BTz?evF@St+!OA`;@Hi%FNLa?%8HSadjP zCSngc=>){ybwXe{qKeK9EK!U|rHi1nuFRmZcV9-!Aqvd7jMf-4hSJawa@0Wj(s**h z*f)j#mO_}?KZ8aY*G!`Yj2tr%8P9?;8_4{3)k+#CnkuM`oH5o{&`U#+214Y;98)a| z;Bj!bfCccFNhAF@$V-o@P=iX6iRPcuSaGi;-YMhVrBo;6wDIvW$`}No-JN`{m{?7v zLey1Fhe8;-sha+UoHMFi)PNOQ#I2$kV5n18(N8V-XmQ_KI#2jkgZm~J&#tDKI-Val z(fieY03M{N>*$CO=y0+(polI}E?|vr+(4xc7WGDpLEGpAtnl z4)**FGz|IoY^1-Y;A*>euo)M7CK%_4I%3# zrNtMwve?l@3!sNnE(A>=5;9-{5e$D!AR=D94OnH}LMPeP5c1(vC_`af5skOdxVS85 zxodrSYtuY;YZLtAX26vndze+RyN!+;mhCs<_v#^)6f}?OAxf%zriVa?LpztkPJZ@Q=7evl)ojmJ zdOOXwkdFBgq?J4gmn^QlolcD|2qF2B1akxSE=4I2Pu@<)(L#R-#r|fO^fem`qeu(%D}jN!G_%cU{l1U_tHertnyxPi-qEvdojHhirx3pDEpESh>**HfU-n_ zj-}|6ukNK|qGcL&g(&!8CzKC3cZkS+ge4ja?xU*+@fc6xEkqu(ot2D*9?G?%>*=YrJ!cMud<} z#@P?(BwHYJ*(Y=k>9c__*g%Y5eM;+faGcXGu~>UrBfMzf%vR&xCk}rLitQJlU7$nY zBWW5QQjE^8X*mCHp#`8*jj`WRFa7sf3{)_M!|7u*Wj5*UH}^$0)L6pVEU7v-Bfr|T<`_1d_$w8U$1(>L z204FbW5n55rbqwS$qvI7$3j#XjKh=Rz)y~gjKNH?{*P`%?c62$xY zZqt2AuIeV(>uGEQaw5EdY!$yqXL95ILOP1`+x)&yXZAoibvTQQ>ICDEdOd$h*t~7E zimDpU%0*`e)>2t_>~^c}tbVX?8n!?uzrj^;VK^%#JFJ97BiPVoy^?RP2jy2m$Fj<^ zy0teo0}hKV9=KJxd()I%L1TLNKo-0kQwn2xw^hxV5iAFdiO)d$EUPbt3}O&; zTie^b6Jk>qyA!F=*#O)pCT6qo^kj%g?dGGzgW2pWdMZRz{*7lE&*iY~6o(6h^L>_J zc=O;HK)XZ4?!Utk;=#!{A$UeSJDKgU9`T}S3VSyE3~=RI3J2>r8{!b#KH<PJ&-8oOvMO3CpxCG6|^Tr-0=w?CjK>*tw9#jCWStSRKLO{Oi|ADE5RmyGmRBO z7xRy4ER9~UNG=b(G;K)~Yp1ihI9Mo({|ZL?-gI_9)p63VlugOgZ9E<;DcmMBczcA| zcqxgo5lx%BhAUxG0972NEiGJ$K^Vg#%qHFBCelco*!>ZUifVFoz$?)0t|Ji@2*T~i zCKk*90x>pm^$eCBhce(S2va8n&Bj&UFdK;|!_z#r$CLz{u+Qg-;;R{$O(~*mCc6fY zL6<@FIW?0-Lih3cOqMV`-A2+%*L&K4iMIu40OPgpmNu>w*hq$aVa1`qjGh5~emxww z{5j01v>>I5*|XSm^lIlU_6%0sIb{rP2;z7*X5X`AY!H%ODPw6V**5N&=3OUUU-E3A zG5#p#AC+QZ1!h^0zEDQ2n0FZ~NeIRa_0N^Qg

p=BT(>9Jve~T4H>08GDnE67j-p zhJ%pe{A`>v!nsZ;e6z&#a`qF5xi6Ko%XyitPpPPj;wzah=FDMl~dOe6U)DY z0es?>%q||E%Mzd!dtom7i~zu>WSv-5^X9X$;@Wwv80+Y7=doP6&}K?NF-vUL;=SC~ zw|Fm+;5T3yd1^k(gvQPI>wLD5=*!V=y2PfqMDaql5#nOkLUd8Hxa11f0%3mh6|5=t zFg8fj;0Dv^t~a#>4LF_&m7RSNTPh2xTg39D%J1IAtj4dxOAzr(SQ5H;=2F%n_AOy` z)NQ*vj;6`xJR2>S~ z=`en|o}H(VGk{P{Vuy{)#;MSDH)JLAEG3p5Q*!N)?^DI(YcW<&2yBKXh&Qff(OA;V z^w14#GgdD%ynh30p_^^u_-!;=*ze)Gc>6MpoXf9c)#$v(u45CxhPpPQfgu~&udVPe z`z1vfcU_Ne3Tzx=Ze*_o!s<=njv2n5gjlihEbtxZTXwI4&Fm^j)5hDIS!4*wG$8cCsALv2Ry@89bMUBm zb{l&itLyGg=H{g#>&3+QO2h}_M|@&Eu!v)%=glEwiwp%emkdk zt$omBvF09@hIVYbhy4%VZX+Lxt%v9kv33VId#Qn)(ys#Bq7bN^-0R8=Y>^%#bc;1% zGPe3BOlQ9dvlTM~GG}Cn(kbT%qT4NKORB^X>gVsp77`LL4swsQ8z0<{iHJ#>`XGY_ ze3wzUo8hFyUUB^AtU`Ex&Q@FDW#od9vxlu_beC0J>~4SMd-_!lmjjfZEY3g7rYG%@ z_3ySRd*ySVO~FrMw%?}g7mN3@VOVgl-HV0$khpIz_{2eRa4*E2L*mR{mK*zHjuJ|j zG5QfUftshjchVuoEswFk*hqtb6rE?>{SCgIx^!;-kjTpJ(5x z7fG$Z{R6u_AS{YCN7)CM)sPj>qqSu(F@d26c{cH4@zoSa9poY@H%+v?3?3DfWgw8@ zI>ugkC$vZR>J7vH}L`Qw=Ae2djXQ2G8X)e60!OceZnjYCkpt^3<(ydC&Bj4z z`FJ;kXLD(bg`n|qH^ZP6$3Mbixb$yq2F_23hyKRW!Z8 zAAwSIvxFG&(MK$rhH2u$N7yvr8Nf`Ge$2+wNKIV*G31#TO&A|zH<2w)f6ScLBUZ$p zVP!Ny6E$a8aYlmHD;cC{kPPq#ent30Q#A!YOucdzp`;rxoMDeJ$P*=BvI!%yHEYSu z)B2X&Y!kSI<|=tIJE8>=I962OOp~UKw=xv=%TOr6#w*2I|NUr*Hb8w+0yqe1CF1z! zELqfk28L5AuKkRSVC5Qt(U>KO=RSj21(W_~EE(@ixX{lb7?p~-pJT65rs3d0%c_2+ z)-uuYIV&54XvvWkixSkywzJT@vm`hun8{U07b zg$AIPM8lW+iHcRWR|&D)Bx-Ji;*!Kd%x&D(!=8dJ!0d>a27jLRet8Jp@u}poFENp{@tz}sJ^ys^?f< z)K=}{a<+=W-?BuuRWlE)ix~@Mz&aq3$cCq$rR%D%o*&)N_Y!?QBD??2XfBhQ0 zzgzt4YgWMbXym8j**rB~lz+qG!JSuq!-mmL&F9FC7Y}{IlIV8Lbe0o?|H(4wj{cEd znx)NM`A=3tcjJu|J`Vj8dyPGscm@lI$UM(Rpv=niY=XW|wswn##i_5g2mP(>>et$X zR%;IpXzd}ZwTJwzz2aLIuXo8p4{FL`W8JsxN(Mgs+6C4Wbri{5+g79;GXt<;9`CEw zT&N*X^`c=W@RM5L@bUTY+1N`?X(TJ)Dtl=@^oXa#q#sy1KOF!wa7Ot?x~f}Za7I(` zLzPN1PG8ED9!hQXG0wNs1YO{=iyE4ui-%P{JOUoLY5s=G zW6LRh)rj~IehE$0jjRy6Z{U?rRH15&RVTQUs$lmvspyd|+O(cyy_ zH;C6lkh^veUr(^LIv2s`ktJeQB%c7I;f;}eY$-_BJ7&g?F+ES0nDobKndL#)FByov zgar03@m(Y@fZ;Lk65!<#mtDdqK?K`!2_GNxBjvkwG4~ux5nlpqtjDU%tt$;dwRr~C zCP7hKvq^68UOYOsUB{$PG)IW>aujc)Fx{2J^76=ZhDAK%s`lE|)=eiH!~?N>c~m-_ z$;)7$ZNu1=n|fHN%+m5U`8#iOzs}oaq84$GDVq_Zh;A`c;MS2d;6)(PKdG${u$i&$7k|nJQikR7M&80 zWO8{5;xCyzWe^s)WYa}zJe;?>b>A&(5)J1_K91SXn2kBB$17*e3SxTv#6Q=M_&ws` zY~C4lPSUeSSI(PxE+EeZGfylDwXjk{`{pVM6}}w4AymbwDoR2XJ=91X&1X>>7Ak7< z`0X?@RGzSm61Fk?UK$f>z#sb~N)tjYO~sE`8B+W(j#Ly0M%zP_^iXKGhKLWw^Eu!@ zV+x_XDiP}o`52mMy?LpSOE(9{1l;gaD3%uSA>c396!A2gZB>+!=f}OEAMSZ(1rcG; z_(<##EtJJ2im-`%1}(OVZkx!b(h@8D=0v_4`_IWmJn5opO8wQ8`Ku}KS528&O%G&( za#;!NpCDFrCSU6pOs+yo4_gCH10mDl9Oa(|J??+n1;FP%ytY zr}NA-Vk1@q6@v4>Rn6`0cDIv6tn_;8;Y$aRs->Ypq?PjF;J+rSwWWM!r7N^QuRtvq zo9UN>++cm~AUMxJIFAMAk!2@}*crS8d#2;nBracR2+G?$FmJP!S3a=%zNNHV1EH|P zKM*$b8wed1P`t7M0gBir`P>|;;D_8jWJ{>B#cW_IwCtesvy3=aUdueZVsJdZW+(KWP2!acmSwu2lA>z*%4~q<77Nk z#t%Zb0T(~1gFdu`+l}kWc@qiWEgR`5<9k96hQhY+uQ|L9vYC4>PsiidxjZ3zFA$JM zRJc%LNzJJDu5PVbS?~2W>_c;KfWZrw>Afh0mOuw0j?d*WL-&W0DJI98I(zQi@_<9= zegHAq_0n&(vw}y7qzbO%nv8yD6b^-w={SUNX~Fn;?i#nJsm(mPj8m&f98)MyrXCUt zD)`Vz0F+MYc?AW9{UNCdX&q?rgUCpK5NL%D$?8jS<{)sE;YV9VB4k^GnvYc{w2~)X zR>tMN+PV_xFve2Axi+`o(Z$xIeS?g|v1`! z%_}WgP%4+_X(h8~XIRlpaXf+#qh~@zMGrjIZ@z+0qG$b)Pp;s(u-YUq;*-+OVeIsJ zRadmQ;XdcCRg@m!ZhBXr3xzJ_x5=7Es?uaLL;+X1zH?d>AyA?MII6Uy6Q;1zmUd)GQsCJUSbXr||wR=VqPGf9hQ zeP3E~jjKtf_N7QCJ@?AKc(Pj>Ph0vyMBrAG_Fe!b((Y(#ZS<~N+2W~PEtd9xBdlD4 z{Y{MBfIZ}1MicDDsO1n~5Rixt7FVy}Yk7*j&opw0kx|8?;gxF_lWO>U`F!RpbdFKO z8})Rwl4jcBQIY57V?=c=zYJo)qqTf89{UB)i^;QFGE0HIPiD!J&>f)#GIO3?DYQ#V zOS(Ae<_jD+x)>o(Ov0dJCTEG1DsC4|tN3nNb<}G9XUHCZU(F|mcfn((!qwt}O++aL zb_>}s@!lCIjLY6Vh7 zb_*W?o6Eu$ekpA>)0|>o3(x26c2X@S@7H3)w=F!Gci72og0zAgXSecb+U^IfY30oU z1I#C_{2kiie{rUb=kX18ve?WtN?J-thUxu)!(iT~e``(I;Lm?;JNE_(rfd0Ybd&$Z z*K2vX{S+hD`**(doH%_d3m^RXt&#t+`$*VAw9H#&}0iKpA`Qbm#^LOc20mO0}}*z^C@$>o9Jk$3W6(H$m4qWI^Xd?yZjp!`^| z>`gvM{O%1NHzyza0jD)?ciYMMsS8@%xE!>p=<+P*6=3DN?c5ni)1V@+ewy5WVmyfM!M5t z|9&17B5&Zr+9YY3?C+y9{YZL7QqifLHF2@5L*nYcK?s`sEB;Ejy~pYmnDoKMcG7r} zdzjyeK_O4zGUa?6V_MrBlYh}73H z#TLEB55|PyQVY4YjZh+G2-lP-G3I+`VuAw$MkC|<9AM_*x+t8z_2+MV9k*bnIK=MP zc|l~VBdw%KdUd(#TS>Y@afrhyYOJ{MI@gD%!$8yf5+^DATijF!N%r4q0HeHFPNJCc z2ET%);}F`-G^TgBC#9V6U)z%D7&z85MbC#kYVa8bbhG6h9r6#&b13-97U4yKALU6W zu)$9eKb+uBTIf%E`UH=o#SXFT1dop@?uQdGPXt=f*eg2!%x_34kwr#8FSajaKOEuA z3Q~BPLn-r@_UfPc8b`UA9)FrBm3=MA9<|VM(Rf+t@Xt~VAn9g+vXz}^z!H-fa8!De z7lA#gZ}BNf(Dww)AJQwRtQM>;V7{t;ix<-6CI-#~m+ZFOfbMDrBqH1u1YMFJ!H?d; z-oDPLiSMMr29DXMl7@l;)_bK1Ul6T468M_^O9D5!69Qz%I99@pXjw6m^4(M{S zd$1R4`vOAO9xMFZ7km_SIcB=rgC%F53>U$&XeQm%!-v}sItbiYT#9ng;oC-|jiWt$ zX9N~i6XJTR4ju%jDe0$%n@(y#w=S`dsuS2@ho#_Dnd*#!1d!`jS^zm;Fbs&Y-8P%7&@x_>7BkM9V^57IYDiJS{sCICP5}RrNA3pjT8i z^NO>M{*uTU#{fy>46zoX$O`Md>uE<}AFItMf3w>EVy#XZ{8!g7giHRE%NQc;bI~l4@gMBZ>t|mbvRcKciL@&g^_3w(Tt6Y^l6SxSLx_9lM zu?aV$Jl^sjT&R)7Q(Y_FrA^+Nx@o3MVY_ve4qS_a@GBgMU!jFxp&y$^9cl)+=o=0- z9n$f)4mERPX;2X*1B)oJiYN=BZa#=xE?miKlvZxNFBctQ>N6WFgTQhn7>YCpmOP;9 z?*f0Gg+aheWRLYiFF~;vfy*SWEe~^tDa#S0t}w+FrcH+-r=g)mUOdp?5l@AynUI3t z4OcG(V~rW4j;V)iVV$kV-JF<^9+@>)X$Y$Oss2?zHK68Z0QZf9_JKrdN1+%8?ZO$M z#)uaNsY#JAuxO?nY+YE7A@$WDbre+i0Ll4xmyd$jL6?uxk}%&B=i-Cz7v3NuE>Yow z7@;=6+sF)WjZ{Z~=O2tz$7F5}!gb3)T(?-bZjo7U&fFRV-Z>Dw(*o}l&tIa-tA@V6 zM4h!_`vB@ev1N60Kk7m4C8@F_s0s;q(G6C9xLvYm5Z*0*9;G@r_USe*I#;jk2`aF2 zpd+|E%Z-Zn2ElC@2q!NB0NlQy*6f$#5NchkIs1WBU>w$)(EG)=F=|R=krGX^aM4v8 z))Hx$P7y1k)iikZ%#Bs!v6ej;ttJl&))gHTFGZ_^XZAHL%?*pAc`-|GnsO)z>8^nt z(q(l>m&lDlub&e4#;D05<|PlO#MLpXJh6jt_*B8YjRV4}v=}5N@MXNdfQ#kmin~VaLLb zhbbq6a-AAzkvau42{N6MnY5!a%V}ikTLhix^=?qxP%1(5h&uUAo1XeXRTakMQ)0kDvIOPKaTGSf;}h6e<4ucIe-U7*##@BOrqz* zu%H$tfNNtdO~E33bAtSQNw{cEQgPF7xX4R^#8Z^0-j=7rY}(fvvv@t+-<$oZp zbkNPbsUk6{ufV*ppfb8CP>c+eVQ#4W{5#SrBhp|0_epBS=$N3qa)C$)WQE2t(6|IE zXM#WHu4HwrD7zJru$oWv{B=J(Se@@G_>sB~$+`<=LGlkR4p;D#b>l@zP~AIGb!nh#xoPm% zTx!)^8m_^YV<)^1rw&p75LFhGR}PkP(KA#op%!?#a0~-uU*c37b1Q>j_eekRg@KBs zpJAY;g;v&uR@TH+_3E4@L0M%-EDz-D*AdIDjLWTz-KlC-6zuQ)Mv%nMZQ@gI3m`WT-Q84-L%P^>QS63E$aP#&=|9T> z24yTl#@?NZ+y?n4oPVcsEZq81$YidI*(22mXp5JRGzG$&N2*!y33zIxIssPr&+&ls zju%0ld*=#Y;i;*l(X z92IZM2QEy>RIrH)gBpFraqJi3r!H8<*LcN(+=MU`B^D3JWqAfqjsOm9w(~uASav^8}rnOriLmH zc&iTabsm;{w@4qO7V{2A{|`uspN>(p;pqPBF=`2<&VP;p6*h~^v1$q5;qZSxO58CP z0?=&Zsj;d}B|XM73agLdHVTB2mY%PRRn z^L}${vyQ7c&F#6RQ#5a%b_cfMIZ7%N1?ElX@OXh&t9idUZu)brg-O^|4yR(*hs*0)-MISCyed>4jOkZWi`)DVkG%H08kQ@3>d3k! zys8(8>Kvt+IAIR;)HrLs@^bH1cnHV~1#x*{;HvxHw$!$p2cVn{m&wZwEw2-+V);=c z*Z`zW%(d3*sdd)2<4O~JwZfeR8u;_&kW@;R#pjwg#aYB_y&!DG>K+Oo+sBL5C!`l` z)g;h9Ml+t9q~geQh;ekXT8~eth)YY<%i)`GLkT*%RO~NNH^A|J^i;KkVlir-uHr0? zkyEPPhtHyj7iXwTaI;?8Of`|i)G_&T^=dqRd%3!kEHM_%R!_()@3QBpM<{ezUsk9y z2+}9aQy*8c^*Xai{T7>@4;QNsW1wtZg3+^IJiP>x%yQ$yC2AzcZ2Wq;D(@w#UZJ+J zqguCkbA@^{6g5><>gRBs+SqGvTRWev(`7Pv)aL=lU`yw zCgN73q+R`(fQk6-zz%TAIyIBx>X|j`)L}GTH@2-)|15owS6_ooTc&a18ns!T@SJ&_ zdISeK!#1ia1udgCsn-!!pg$>&k5#j9kX$Y4i{;*^-i~u<&)tX)EEM*e)STJ;E2lXM zoR%>dA4HI!Qo|PO!#I00 zco{l5bc^~t&WyaYMSU4A3-{cjo@TrCJ>uG1)hlq!_VruU8v$i3+NvI-@U2PTre>+& ztMj(2!`UIdOI))Z-0!gQ%kAnac};QnJ!&Z!?SgyMDOwLBr-*_B4mmV=SC;sI5jDc$gZ`g@G1sSm0pj`KLf zK;oys3448qxc(t^u(9t!^*SzBg6uu&I4m&kJ!%K`P=DQ{p5}y;^TzLg0jfx+tIli; zlV3ipreYc%eHf!O#hCmUS^!5ZqvR2Yt76yV7$jIg-gs2S=LbW@iw~>g2SCY>MyX== z<7$IkVaTvK;)Y^z*#T&$ z+Kt-}fLZWDj&A?rpt_AZHid2u#m(2X@(T^Jq!@AAZ`9d|wHRG(Zh09WK1(ETj)n`J z^-p~A8+CCa{1M?*=c=!A)xw*_|H^!b%0u#fi+hz++|{<@aIEyd?kzz)d-3}<@VMaBlI(Dv{+Uizj}oPT1&}yu z3Ms{n707f_#C55YlTL+Vjun+y18}~zGPDw+;e@Mb?o!jWEu0hsyxX|HOP!0OHO6Pp zf?um=L+3rD-dy>-YE(WS@@k!UZ>*|{)J)s>AAd9UPVMKINvH18a$|OIQfkw3rSHKN zu=RmQw8AkV#it#F9O8Ta=LzDhPy5^tEx$2VCL*_M&q(3qPusQ0G~I4Q+^ym4SGVC2 z8g8yF6kp$?4dxd(7)$&P4foU*i^cb9E7@VSM0DM&jhE*Tzqwbt1+4mp`?OVfoVicK z6|gFJ&E%ch{TRIO?$qM7eJXLIt>xnTomwtCq~cKJE^Q^WEO+hFCbQ*sm-zE8Ed#fs zU`e3&YjqSSVvYI-wYiv2Hlu5|wn!d4hRAXjDN0(3xZ`0h#u&O^n;6PA+dGWvr?oi3HrO^9S3jeD!N?Y4>9_$EtDa z_u4N*j;N&BRv{is)E_s-|3P~)6rAtOt6J{H?I=x|zZ*WXYJ=Nf;V;CixXNH8c+P61h({F02@>7N<60v#V6 zX?0hd_b~S>CEMEw`3b9~v%0ON-T%I3qtsWoG~izLV!xQy;A)cBx7V0nLbX`0@S#qt zCVW#Zm=f}^&EDkqo;tM&DrgG}0w%4oyS6_q=smvEeuj6yB zn?=Rz+RBj95PVYMN#S@yOA>G0#|DY_U)Rzg{@C8owlI8`qw`H|6Gd+yGGhLsLCex5 z*1V&=kF{vdDeZbf%8Wm~tNoFLoK(qXTb(G`sf`e^)Acz<LA@*>6O)NGn>(cZ>aJ&6!`V%O~ zm9Fm~+#N!?jPHl*MU?f}&l$y;dKA-o?B_9+({NCBpO!41`&QG8YqRuF#xB?^>91FjgVhTJZ!{G(Z{KY#IZohu!icKRq}g&%^~CnSR8g?b*1`X=^*gaQvEI(<`9Et z=y$*ZES{L5-^asrxCYFbsn@G14h&~eIa4nXU(M7LA+QgcrRRg^PM@WZVkM4J(K1UP z3!eFlS!hP3cyE?|0zSmQF4K#^w!SRWa|iE{Gh(*WvMNa~Aw@+PwsQ!+-FVa}xeOJ; zm-o~hJrCQ$L38yvAmoa<`Z#%|%iR_FW4N2em^M$pgYc6fpzWXM>$5p_j&23cZ+g6# zv{;|PPlaGf`{`o+ZLr+hC3*;0vP0BgsXxn4hk*V$OZ5UNxz{e!9}nrqMO+SDc$VoC z#o48}6yeI{`bsQqUCZ?caFkmtuhQjZPd8TS`SR0|-Qwvg{WiAQQRgdpG#X!y6z*!h zK#KG`tMwbeq=&fRkOy8oYNb9Gk84)ym5`y2t<;lQnBHT2x>CQN^0OhR;dZwUmB0>h zbhSQoBd*V4yBry_rq#Le$y;yZmF^breDjl#yB$wWF;nN`!gK#3xyKPP-b`Dt-k-A9 z5s_=A%!EMH>S^8Q$hRP{-NZRboX^K6@eMb?_~2^x#9zoASZ5Hr4Bc83{Wrepatv zWk2CCy)j4_jInVI`lm55VOrbzla35{|JJOrz66~RX2dt@lPSjG;wJrSoT7fcNq1sn z6ei9!>)R;|qqnu_6R@!Vu|=Q8^TPP=MMbMVOysrdi4>O5@>c!2OG;_3|9WR!ON)P?PfjEpf~Aj zh`rw%WBq0wmkJb!|JB*`g)|jL@%wMFBfDQC9cg5QRHzIqo1!qol|e#8E1`tsQaNo| z&Oeh_6y}qQydmg1SuLHi&AAQiA(jx7guxz)ULt~weAt6f4?fge)VX(CR9Fu^eH<<7-gAEE`+nz~x?yOcMjZw(EwbPzsTWWB!E0GqcP=0Oa6z#6EnLhyid1)vm-i9)sS8*3YpIB;G#(M}ZK9J(?z#1=3$lp?5CZJ8Ep!pL)2=dy& z ztb;;~WfenHumw~ppU}D?1e;sJ@;bS!V{%gFinCavJU3c4h4_CDRQZ>I7G=(st0|$8 z-OqJ#X>^BRH`#}Y5Ht{~e;cB;c!L|Kp;%lorLl4v+BD5K4KGMuM&}Id=j&6WGobR8 zW{J2PoSrJ|gpd5GOO7759jn8nXjia3OdGh0!7wxumH7iTf`Q@o2v`M~;n4^g9}B~g z2$Tt>4Cf4kBF+&PqJPOvqtAv^Qe2NxrKqYj% z3LSM(9Hd7JhSY%{anG((@e10E?smc?zdfUyP91R>i_hvAC2TrA)T}b`7f1iqg8~F7 zy>x$%RFLml!|-VooPvYlrdddmDt|T$1N2kY#-N%ScMO`hIT?4jlX4@9XY|>Zd=5INvJJ)WU^Dd4IM`+Ki$bRs!2#w Kx$9Fe8TSL6#|)kT delta 28552 zcmb`w4O~@48b5w!&YXMi;a>0(?*e*JP*6}%P*6}&QAtrzv8)KMaFv_9znE0Mu)F3` zS-N*=vV4ikiprA6PF9v|+2(Fmw(D+gYEs!|n-yDDRMzi1=iDn7Y4^AP|L6Dlpl4p5 zd1mIBndf=tnP=ucd&kI=Cr6knT@B7bEghzR%jB4+SB@p!oe|7R!k5%ID=J(KCH1cQ zdUtizq)B;eTvZL7xk?cw7d+gYO)nCjmaBw&{$-x#`HMN%Q(=i@3MKb@7TzA|x!*FB z1bYry#?f;ozHqt{=26vXdeP(=p~jIo&m46kN%Cw|7m^guF?A73Gm|&?&gJrO&y@iq zNS>!QUv7Dmy&y*~YR1X7V}@ z{*Ddvqz0ytgP!XHb4i!y{=ign#B(e#mmM{eSGjYM9Os!BltE%TD}x-gGaxYr!IMcEk1s6X}PPcvBFhm;fI1z_FVGQtn;(9 z1Y3|jdA{q$g2svlcfEU+&EuRJ(>Zwx*UNT3oVz}ihlG+)OT24sjl0fO!r%T4i|8z_ zi=!m8b3?-!qmHb#k9Nj3om5D#=lk^!;s4zm62y?4*+T|*p4spyMuPexk1M>nNRIN9 z-yTNnp7pnXM^ygy8^jSzSy^tC!&zEd-B{J&Xef7j9=v0`H#1sh%X1xTsvBG)qrtJl z<*IVjxhkvIxXL_*$#I@}x5w~l1x)dLv?YlIdV=n}g9cK*u}B_lB)@QHAPuIx<_wAQ ze0b+U64u#v*Jhc7dD`yE^ep6Nde+o=gJ&|q*VA@)X6O6A5A}sTDR-sKrATM0+OO7fE703+`)TDU|H-9BaSM zlei<67Ew>({nvZ;?1*E_DA}*4kJveixIBeBe@on+w|AF#vUUw+O}@I$o4(pYD^mqc@tLT-vpBT=%6mRc7dtwAj zGkJmP_KslrCU4GndlN~4C+^A3tjL#Sd1?qNHhG8R)~8a~K@%qKvG!t5=)S46%j9{h z{d!O5zOn4E$vZaFJBHFDCeN|m*L%7;QrWRS_+WnLjjGvm!_z?|wzKK!9|*Wg<1^Dq zQs;Be{H#R9QAwf+RKlOcEZNyol1RvwQao=zpHI>}gI~x3o7wkbsORPPt)2BRP~uDM z-1p)qgyeT_e`%dai#U{;l|e1}Wh946cH*dBxzbft=Bmq~1c?%{*H=_GiR!#pn@nn|)er0W_>7Mf+UOF5p>u8Abq zb6=O>et+o719!CiA)V&a)@l~*S@wsapk>n^Vuut`lA2plQGKJUOjKAe5lJf0`GPl_8zemi^fDsPEYP%<}eqvl?&E5xbu;}+$LjfjQjg|QrWrk?;p!@rFWIx@Lm|n z@oaprE1;H=*R!X)Tq~PAfhSX#R7-81o^L`tcb$wJ+DJ*dtF)}%Icd_u#uXLrQb}q= zO>&$hNfxQe^V-SDwsn-$fJk)>D_l;Gb6U7H9;~s-+0a<$YW9pdbspS3=Jfrf*>mu8 zM#3ga=G51X%g9K}nlx##4^EOc39Qp}tS!`I9~t2p^L{$n;`!s5*~VaZzWlzK_$7pO zuKMh0()qU!9+c%R=+m)J!aUnP&L-PDZ+;vhZ}X;H{CF5?^*H|7h?#r$KPwP!{v^aR z_FTAWJ7tT>PS4zPV`JMe%85&p9gCAB5?Svmt*$ETOZwd>;hx`rG6|q>eUcO}n(rzb z*!(tq9JkY*RN8Z?iuOxYIQ9;#!Y@f`*URiZmmRoQN7OD5bx^(`nuU3+pJrf5<$l`a zCB$2wT8LkQAjE@|obXt`X!b(1eL+aSgsh&^1f1;7uNQbBZuu&>f5N}N{!t*U=?(L+ zZyiy!H2%`ykONe*kWhVfba`^V9Ro3&^X&*G9k?`60zJ=u8#L@7CDXi<+lb=`2<=w zW|+Y+YH50IRjI4Kp{{9RU3K+Ja*9eeVizK{%X6rA`p8pQ82unHb-bLzk7u0nBz>O= z@wVdoys>9Nou#hQ?8L?i>B){c&ieACDU#GJT9huG6`yld!XFxznl7E!N%gPq6M|}~ z#Jn|Aa*t=)w~?L+KiFvx_0%RscuIZ<2#*Y1;cO@^XC$-~ieLQ&N^U_#e3}L9b;l3a z$s~#gn@N0U?9Z#I**{l%f{=xj^m53tp$61&K8+Dif2eO6iJ~M*1Cl7hZwVx`tQSOk zqo~wta1;JXAV4lsE(ei`3Xw7WJcX7J{zMQN&1-U%2u1Nvn*=@OpFw0i3FOg($PiI* z@*r{zAw0rPHuBa%UkY z98Mk@N1h|G+R-=?3(2MZYZxgfq+MGQPcU(__~4NwniOjjMv^UZR2C(fi(ISRm`KjL zd(j|Jg73>2 zBnaYFdvh}R(M00-pQnQ^2|REHNt==)6Z=eOgHs}*6|PmzioUq*M%RkIn7z(j-Ov{e zbyYgu6)F6d86;}b9+^yAP}6`tL-w_enUfvkQj4+dLfw_lRj$4wF%37m8yZ}7mr|qz znWsgwR7aA`7GwTOZ8C|}>4*uQB#RlHBB#hw3LiR?jNOoi6e8IdId4p3QU)Rr&WMa- z#$wbXW;0@F#4^MJjTl-{j98EnLo=L+4KiYAhzl{h5kpJ1N>Z>9 zK}+1oy26N|DV2zY7_lryrCL5ej||?>h}3XBbsVZ~LM+0Fq1ttbMH(?w+l*M05ks|` z5F2d7P;Coh(MAmQZb2-@h@swXh{YN)(4ZBuA$n{)NU%K!(V<2ZG}y^6(+;d)R|QjXAr zf{b#c9uzc`qx7I4pgdR)ZkZ~=(Rx_WPL9!of^c%I9^5X1L-gQI5ge)q+YqElvb2Za zHk%}bw2SCoS;8NtzLX+M9b)E3@_)=G>yq}%EYetHj4dGtWMZ+;udZ?dk$rJ>r3+#e z#X$E1eB&H4Jn}yXRoU}-PNda70}LN%pv&^pbI43DThwOdlQ>Gc_*;uflF2Tlf*}I5 z7v_=>3+d93aYF$A<7qkzP#-M^4?N5RoZvD?_*^IHm5<1F?8V0MrWMFK%6G3IY4{vl zL0ZW%zN(buk>h-CDVak~@NY`N$WHN|DiXpAp=y(E-n;w$^aO7K%J&iDMn0jtm^Z~B5u;d#EK?p2U4-ex71gH?OO z%gRx`H@w3y{C;^~(^K7Kw6BTvZgk@;ue|~M_6@h*4Lv;i1`t6{ukmHetH}aixM4M_ z_ZB;{8f@Cz`(YL6nI4|!OM0dPH1=lqh-`1C##QQ|%PUDHh`zm&T!l|hC93rTTv-LY z-mdJff*8@mSNoERtNXH_t_H4S{7f~;M^&S0fbuLatsz&FbNs~`vN)_;CaGT5-g8M10QipgJU;=M(BkvQIYOT1Tpk zaE3Ojo;*#w8P7J7R6=@q+8UA#L0PqijECIR9#~6uQc}#P-Aon(Z^vI*toF>!huBk4ui6WcVH|7s_CL9|DAk~;`Ajf~x7gs%-vyUA9{!Wg-q+xL(N zE&c&Al_U}7zls$$U==G&U&RW)<3W&K<veOnH0;j_n_Bj`L%n9BdV8>Z12bk zncJ8-1u`4*!mkcB7LB1%Op4Rq-$N>)&IyGugfD*#XtJ~ok72HYZa=;R{jPu3&ySNu zVsP&3B2XN&__kNUBeJxX4zkOvo!&#L{-5A#GxPd4$TXTodEwtlsM%0=RSkx&XNBIg z`Azbug`{bze8`I4+VK*1rHdDak`Qe~H@R9RC$tTpk_QOQVxA56hV!h?u)K1#ZJ&`y-#q0<&yzVc zm+_yjk|X)p&&e>7#}|E0un*&Jd`{wn#zB{hoCjsAvUCNll%*)OA@}g&Uiq zzO+aKQPJIBlNeIKgTExh$ueI2H3qJLFZhx~4=!ZHaV@qOlO5^Bl2nL+m+?8c*gZKnvQ^T&bq|4AF8_>_MW+aMPsiMgfNRn^af zLM-u)Z%B#?fhSQnG$v8!Q2y}0NroMIc)Xa)b3hxYkd-1Uny>x}y-ej#e2pP0;HkZ6 zdjao4;)p)_=yd$Q((J#qht%@-zahWF-lOhYG8q-rd=FXRt*(*3{5^>vjeK=41WFTc z=|!{Fen*_d!T<3c2=`yW2RAWtwdhphoU{q4$&O3?OPa#p=q0Q9iSJP9wcnG_|AuAA zf5w7wzJ(v_#j;-T16h>a*pEShLYJ!<1t2{51g5S;*FodNmst)IY)G5=sUOHfvWbuR zk=#jk@`FE;+sJ6m{|S?O zB&8$J#rc#@wC_Qsein;8mn!1VQyMhCosot5erR$2?D@G%iWcRSEY80s56i1v)V^G= zeQ!T{cMPO=2Vg<(4j>=Nb7Y!o5H06&Lha`-$aEe(!1#h%HkxPKXaJwWsGS_-3mCn{ zHxM5%dOJPH_?L|=o_iD;71PCtZC>>%Y}g@!6tLy(CMrH8#~ zi%m2VT3>~Ura6u>l9{*GRoW<+mAC8>G@DtHD2%X2`{?q4i4F!`FPcE>V|<92j+Rd_ z!WURD398IAIPHr;2JUWt(M*%ciN0i1kpd-TorT6*yBTRH zb5*%kOq#?uT4)3VeNSBi)jqROSh))LPbytRy0yXpnk}MtTIoi5mhs@VEP)?dE}I37 zM}xfOHhL{R$N1KpSe)msrvvzxHad%*XIf?;y_3)jjK3a4AEUjDHw>aDNP#xrPQNDv zCp4pIJlUdET|qaI(dYYhwP#>gdyKC3FgxECN)z~uP&!v2@4lIh;LnCa3ZjOdP&zyE zBIe~R_gYt35mYjX#MHTNbk>#C6TUEv#`$r*#7c1>Ra4=1)%7nTU1Xex(Q&Y>d>Kjy z^N+&lSnDNjDJgtNIEbwBso^vxB|#ynYtko8npa)w)TI@ZEK9N9Tqe>p{L-=gQ~7Vh zX}&#BA@Nr>R_Vg69@}Q#9Zpk*2P?$kOU0D8Ts_Vr^-Gh2d0GSwiM=e*zZgKA0NL{P9BMT;mFvVXTNA~5? zE=tk4Zxj!VrWZ&omt*J*v}JY-Eyu=gUksg?1Y4c0aXged$uXG({nEa_dU7ul22)$&NH( zd&987Hk8BThR|4&%fB2(V>ul{L%3r&wUT_EJRIo-{7UgDUQH2n!-3yoGm-ph;|-LJoPpERE!*kuBa7vcDNyIy_|z2ouVn@opnyI3o0cpuByIqMV-5B z6?Px(JUNXfkv)8A8W>MI-*YA!ord;x@a{EGedmm$1<(@6wX{_09Y+I9 z-VAMU7R`$!2esve^m#ZRXwggP92wuTt7xX&zqE$ZpDMmI6pXV(-sp0#DsMQejds!r z0kp#)Q}}+xu%#bB!^K`<2{uCe{YV&a0AoP+E7C!~L>TjO@1bG5paR_Ou(qv&s)QWT z?yID-4EtU1BXTIW-7Qb%pV!a?C~l#(bQlaf6Km-|$SLiLI;t_K3V&Kd6O~{S2_!u3 zKI-5RH`3RArRQ&^i}(FGaYFHOFy%PCXxfZ>rrf> z&)-i+dcm~fJL!4?K78^n5cmY&cefnF^S45+C)(9p>9dq1@!-ehS(jxsd*~+0QcUDJ zzI(46p~c-z-y`&}KLw5m3KY_#erfcW5s5wQrRi}$njRNqJgi73M7d}_Z9Bcod`hHs zD}3rbV7Fgwr*mOznR+kH#LQfKFCCtAw%@8dH*nRR0|KnNa|X`$@1;}Nd4(+JKdqq= zDPZfVE34~pxQHFUI9oK4%vpL|SGo0(J}+9(qewko4ENEjkP8Y)#-^wb=z_vW@1WVV zSK;m*bXq77rQ+PQ2C~bmyd&q}4!VI}RQQygIIqKZ*-knEW4v`IofwnkJ?|3pOScNRe- zfEcqbBiV+KXf{qIjIW*5C;SZaubU^28i=Uv)gcg{1?%&u@?ZRIAWDG?5 ziNkW5cKlB?%z_=vzuuwCRU`_E@pUI*JS^f{PtrEnb2gu*L$rmb#MtVQTa%WV`l&<% z_aU$cib-0`C%ljSk&{2xO=Go(-={JqP7RR}l&sT^eMs-1q*=TEV|tZLTC``+(Wwgd zI^TRw?Iz;lsTm++>;;-=_F*Xfk}4v7QZ`4P9m+`I!GQ0kAgMM zibhuyA8V82w71Oic{o%3H$V-5Tj}L68j#`0db>6+L^k7;njiXyJWN{?CeIP3Nj=gX zCBFdN+Rj*cpUf&vSjL5M@>tW9WCu=qwcFz4n+T|@443ba$xiKeBjgdH188$Ne`};{ zgHSj*5=`^=SHOChk|;C9NExd+Q{+$KHo@nOMZXL#r`xs#G#_ zMm5|!b#;5O0VlzFrlbBgLtaNJjd05Zc^a%)f0`i2VH^F~1X);&#R-g!#KR4$WJN`F z>1yw>L*7I=BBT-QBfr5_=|zhDT&=(q#(y(Wo(H3sXhV3D(S~F{K-iFs8e=l$E6F+| zd~>EeY}qAcIMofjC2*`+>0VWTDK*jA&`{@I(b(X+lqNOzo3)!v0~DG~STb;x%#b5^ zV3s@veag;4*Nh_(DzzBZ|0YY0j2zgZEn?l-`CAh)vVY2wS7I(=EzKa?jZ!U>7N43S;j~ zIEi}qO&v!5wb___`;GA3+48TjIf=@V*Ieq~0VC@`j=bK;im}F5IV)W-a+kWc@scTW zCOv54gT905=+!Cm*Kp0_Q+rvG_Tf~ymD0l|e*af;l;)W(M+Ct=kKc8XMeK0?3pWr(e z%h$`tO%}d>C!GmiCxf9_a;*EelpNsRu2?$$eg39g}(uD)*T9 zmEXaOb?jAg9K8TjW3L>-U02D$BC_@>IiB{K_^zwulwcILkocNvNMU!?%4!rmd6kTf zh)J0HtH9zbua`_+nJxtOkxZB14bDlnI+l%`$l=Y%a^M#U%XmGWlW1*Sc%uYamezzm>!6 zfs&)ZxfVylr7n0Lz^3x=YvlOYU^BDLsJ>Ag8HbrcO8kdiFaA@g6vfA1De}zMcrQ9vqHXE z&M^0>>{hsZtIJ%lwv8>9 zuN8>yD3{ZORq!RZTq+E2!*7t&As|*)$lz)>$mQ5%Pg*U%B@A@d3c19{>ZS!|vF{kl zD=X!t#)cz|FRYeh%%LtZF$%RGE741Dj)t5tu@%Ag!~o;GR({Hta9y2z3oSJ3=TKkP zp&v!Ore3Zvb_p5U6%Fz%;*Ib-8zGODY4bLSsP0r>;S%diJ!7fI4?eo#I} zi~=Fr@;&lCL^SM~ZYBM+&(p@Kf;>KAkYaZ~OA|Uio)~RvK#{vDUi=8vWKlEhab=#9nOI#Z*VM$$&Q0zjb`!^ALp5 zhncF)-zTO?hSu64M-XUid!Lryr(n}t_RE^_Sr|wX!JnXC2#(jQJ@Bl&N~X;Q!mv%= z>RbG(-z4xmqgzDXo6OP{@!e*Y@F!Z;YL;608_&zbu`a)S9zu90AM}D8g;>%H&{}r# z;uqx9@LxKgmfExjUyvtJy2mWk-MD98lHWCxLJit(h)UbdeA`JHt*LLxK{DB^MZP2d zpkSKlE&=K9%C`$=L}+%3IH?sH9{=P$u&^!s&`FsCPAG1QZMCcEmo!cO!YSEmsG{-w zU#B2p2NZyU>xcA%Aw9l^^%k@*g0c{aF5bV7VXv2`;89%{bxt1ky-vX+*#!wW))ro&)1IRA|2b z9A;Ao5B?OaV?SU2soX>ln1v>g!mV$~sy6mt@?lC3nuR_vT8sN!euThYu=^{B%MZVh zPr_bs=u7!D#d1Yj4n1NP%E4g%-B(Z`y~@G3uc6`T;R<@x%u5!@qc}#%syQymYY7(O z_HX1O%W*MH-i5IL<{Nn;IQ^J!`@8z7ti+vKCSRk?S9~43SM-_{NKdhj9*)FNt zoFC-JWGDe$j7=IDY%v5O_IsDMuE9ER4o#K9L~%r;1aP?LP)_uWOangF4?b2vWlC`t z{|#V*Wq>N3061u-3A~W782-`E;2TN&$Dieqa+(GD4`ETQQ&}*{Xf0$h$PrMjx3QTd zxAiR+5t3qovuxc;zjM=+)?SuBXcHw4qg_L2`_C8_x{}E9ZUrbq= zacv@Gz_kgO!+pIUnd>E2o?rKKb#kTJr943g#PV@F;Q3H3PG-A>q!)A!EA$pz=2x(g z+ZC39Q6ZT)16$3Po7fP(T48EXk%h!8ayjd(tFS975@3=1UWE-)mx(G0E!af+niS^r zVs`mqc8VfVJl@2HhUCjJ)14JgsCOh1Dkz-V^Z8N}OR~5GE~iD}hZu_xV;ffKMYYWj zRV9DZ#L_})Etg}d<-4qGuv}}=Z&C3p&CG#K+iEkLz?v-NGuD_wo3jkqIvQv4sr><^YwY!v|uj%4T5G zCqA^Ne5eN(*GjCE9KGcDT*2 z!`qDx?;OzKokoXudOQ3#D~k+h6F9e9q&*hT%dbUhb{osZeJ#Fd5UUB8- zdqh-y)FR;z)ku}NWuS+STX4&Op9^85=?RPHh2c@!*ig)Ua6&N=6CO3zZ?|8My9K64 zrL%f*JIsg{{%#n%kDj;i#&Fh3do0`*!Aj``kUN5nu)~ND?`3%N(Y^~h;?P3|;urh) zNUsGKYofHENcJI>FIq4p2}(2{6pe{Ocr>sC}gr9IsJaLQu8!(d;8C z2det@Aij18YoWm^ZXrbRlw_vzgrP8gh3SZLqErJ>oF5{j`8mGEsss2@ENTKjiskPQ zWut+~>R>}iFCXP#3u2)@>&~tc$*goXt#Fk<9=NN^+@)bM`91$4m<;C!9LyTiOG)}d z_`A9q>KD|xSGjQ-8z(vtrGn3$aj-I&tUWuEqcvw7yAHl({H0-R5gf^ahqFmI?wU88 zjn5lkl#!$~;J~0pN*Vn+kv6as0ur6b;;#;88G~~GkX%$%=c;Xly%+aMNo0e&bhWD? zmxsi&DZ-&Fo@IvqLXA0mS3J9Je6CS(jwooP=j$V2_!bsuwF&GVN()u) zmdzm8&yX|p#nZ8V!5xk)86A%}EpZnl@{Vu5VpyGOHCfi0rN zHp#w8mA0t-%{UUNjZS9C=74Q_SENjECg*te2=rMsoh9OPsb6%b3jgcD+O~8?Y2HcS zePG8WEyYn)-QZY>tGQ*48_RL|7Al*o5;rTVRyi7~9i@W%SB!DYuWndyW0k8;vOq^W zGJ(z2Mo(lNgtn=kK^5Wr>r7aZ_wcz{tOYzwR32(Kmem$NqtsqLcoO>@ik~_eV!DHm zm<$`ietz?0HWpm%@yRSU2ofzucVNnd&(cBdZ1o-9en9HVNAAf2tE+7Z<$3Q~PK>gOxgk*Dhi+M)cCi0^Av>Y9Mx_rz~b0p^ksC7?U}RKed=m?H3!#r!HYpmnF3?VZuS6ugpk(MG=zH zL<6Gu%p#Wj|DhE__%lT;Hcc?;MYy&Oms~HC)=ynvjB{4>F?v|3ou&GPz${Le;%0P4 z0IA?x7el95v6O`vT}b4+mNJ#(@JE-jBwXuw2DMF>#DmWgk1fP_C3?jgJx*RUf~-2ud*JD}xH zNSBCXZ3(VW<80!xWiQI4QA;Ud ztt6;P^vae8wy`BZTF2jB&dRZ!%yKeuOkLt+QDx0&i#Vu+iz7C4i51nW>ctsGb>$|s zeYyxpQZum71hcd$z~XQZwOKl1rj1ofD+T)@VvFHb=7x^=?*tC*gpie z4BHAk6e4mZM%ay~0!aF`Gs+vQR!?@!pO-fu0{N6^6)gQycYyel6svUB=u!~QP&S+k zAa=M1ti}anXGMe4UDuZozrs~f;lvr*+P<`yQfG}w?Mo3}YpxZ2@feplJ*@MCu&->a zXuJdB3A$NfP-t;m5{ua8v&_Ujq?E2>XpD& zKMCBg)S(;MY&8(~2&rnt*@k^ByUALNO@g?+gp(1GFhY3us(jro*qj_)%i6q+`Wuvj z**CGtfqp(g*mT@=6Z;d6)ULUiZNlfw&8(3oScR9;2!Y{8q}{ZRy(=eK@g~eh7RGN_ zkKJ$^-?W}BfH*$Bp5>2D!4}lmh>3HWH0uBvlZN(!)1>)uT)%-uPj7>NDY4hoxz@BP zB)tHpXk`w*1;mc2ul`R6WfVFfU* zx3yqXd6u7VVNPqY-skjm$!YX%h|_DbcKOW`mzWYxv*gy14cGp38`~HO8$W4>-mvmP z#{EtNCi8-a@L*CcU-l3a*W)%n#GXb>2QAvecEHLZ!g1w`VP?djEHbun)9Y*M3-I<5 ztdCA{`BGxI(!fGwsmW+p*gEg*ZT4%|Is@&ghuLYhS+sGT6&n$~s`npZzkxHo9^UXM zYleXY;f=nA-rdfMAb&nlL<^w)tV}=Pa|w$O!+XGl6zJFN`mLm8B%_wUT7r_XSP^ zy5rJbtJfI@31ShX!2=@^cegix$G=!0J&Trp%)-T2FLd3sb?{@hMi+og9C9} zo7rJ;+Gc7sNx>op*MKk^7_N@)rE_exElN+0>?TsIO|Wx)uE6g2DKn3Xvt2e};%xmV z3@}PN(1`@z_9-jG6`rp?Wz(WzAo1Dsh383r8B{=AbAby*JD>kAmId>)UcVT?$P^oJ zr26bYvt0U9G;n|BUH`&LO4A}fW8lphJm@=?%p1RD)3KF!?py2^;0XOKi-^n-SJK6Q z6cZ#@bjD`4M@o4b3P9fFYg2kzCZz>7!YD4Wf^Oon>BlMBhM(C}@?f_p9$#szwKdwBZ0l^B zY%R7ewrw^z^2Rb{FfWspRB$Ri{FJPW2B*@)7i485jIs!4!zimKH85p_wb@4CC*g#K zY{M%?q1pka?6BkdlMYc6rVJSbuN>hGW%wOPEqrH~GD+ToHtR;h3t@^Q1mZQ-YeiYG zQeW-ccx|}i;B&&2A=XyBk5YiMb==hwsncLD=?Pbo=uW*xo*JQq4bGr&hJe0ORqrk( zZ8pd~-=itKBti)fYqyb1q03$Z!d!3Tw?!!P98vvVq>%+47tmB!5zq?yB>yHtnML;) zl`V=?G7~Q=5h{>64d`qPaJv{6v|%rQI#Rh3g6LwTk~De0&0mCf*anF34itk3KLEHs zzm&IOX*kH8QA&t<(8xb%8M?1oqtE5^V!x)r zv-$GfKMB-_mGIYw0>8p#hmruknB-8BmIem;&k1#4Vbv%c47k2Ikq$zJ0ahm@TBRIWddwEGlwbTDxp>ww{P_)aHKR*G*!yzSNAjiRX;PJ z<}3jBDZ)7eDV77InD;q>p4#3}{_QX&Iv7U`7Lo{Q>ef$n>lHqHxH6jN3Xqil^ehu7 z-|tx_49@@XEK?qznxG8lqvMrIsK9#o#dt8z0{&6FGA^m0U+W78w!YA4eW572IjN{0 z__BfE%M9>k{EGxdJdcqwLYcFncpyE^-pS%mPaLI#PR@Q+z>;(M^c9|9fOCnlLf9Q> zv$@t(#;kx{2)>@7)16?ruy7Eh=tqwQ)y#MGJhV!`Hkjl3{PiRF)uRP3&gmvZlV%0zOUiy`Zc_H;5alJ zcu%4dW702+ckyG1%1|RIZt8#&zfJwR+T!2UmH}OD5nUZ)^fIA;2RHQZ;Ff+3ZXIYY zY{h;Vl-|}4u6-b!FromiwIAHxfp8myl?8y?(P(Dd61Xj}HBj2wuhjm5=P>(WWk;bl zQOL4I6xo9!eT>e5k#7gJbw=mt8~JvF-0gvuwcZD5`H4|V#hAVQO50Jo!&e%IoxXX~ zVU+IRZ;gT&{rza=kD2@X6+9q@q03kD0Kk1kyNseDi5?7u>By6;B+{-xzHp2(f`6E- zETo46`RilA=no6@!}#x0l-tve3`BqQm(U+I&>z+Dt?{8sJ=U*yH%04?`-&u=;=WT%d$M zj9fZ0&iAXRM^NyBucjVR#M{OTMpZp}7vp$)s`4}VR(qO~j>lN^0r@#iSvTTt3JhYHbP8Xe4o-b$yi%2__AA(8 zM#(^5N#UX9t1r+f8YqhH3<>U6N*BtUisG%Z5DH#*h4^}iS)>naF(_)Q+ zu|~m|2}=H$xB&$dexYE3Q4kkFMW3FXpxl(2)URNH6;-DAN*0K{oR@|vMp0~GGL?~h z^F$^4>NFJXld;Z$G66;qLBfoFRdgt*BFk4r2d)|Us>m{`$TF&!o~bNI&FNS4gp8uO zzM?1KNbD<`YZT2DMax6-`jrwYO+N3=0>$$UuzaJ2^;ycokb(iQg$8V)0b6Lm4xgkH zjw$K~D@JFTuQ7h3v&<;C%qVzdlCoq%F_P#qv*hfDAQA{%J_O=bFfXZH1_GCX;HJq+ z_7Hc!g8I^~^p)(Uym^8W%3sM;@Dg9PGHXcfKHe<3vXnJJQTUO3H}F_!eRZR z9H@NxJZOrNjML@GQYWg(C155{uO6eU*psl>tk=kOFInx3&N$f%Z-UKhKWyAPWGZZv$h7!ZVtlsy@McN1! zYsEuOIjeEg;j0{g(3wgEeBTGpRHm_9tM{dHUN=)2O5Ik^7;7xwH&cnlJ&`wODihfO z0g<*3mw00Hlz4X3>V2x5Uz?{mgw1JP9z=f{e+D67!LN$QgWHg=6$Z5htF2x$sBF+Y{jgQ%iWiH$f7cE7Tb9wVpWgW@YeqO4;S1+IEE>m8F5A{#Wl>3C2?Y-A3 z%kb9a*Vih88O$VumMb^mbK7!d2Odot=~Rx3XPPdqQ1Aj~zV?bsfhTg27O+ZrQo)os zP@#Me3-B|Q%A>gKTwJB3fS$KkDT#1of2K+aW|)Sr)hTW`Ii%Jr4f0+~H-DsF*^Gf6 z+n{_w_Vb~Qig@^BMRix|hfai*`q|vWC)A7S4X7JV(!3_)EW0eg&N^ zca!p0$2p5C;cN)nW{p!E66t}M(8V}GbrA{9SQ)os3invF>RXj2S$Jc8+Ja4KixzyF z@(E$RmH>$d-+^^xzXN6vyu>m24rMsKXwjD6q5Ms@5S2-+#<9ec`yn3A+o~+a)z>{+ zm0AkBW`svM4DbF^9z~%<)jn)h))P2h?c;^Bm1Mq^E4i0qci*Gji6fZ1?!jON^Y`vi z#so=`xvQY{I|*TmJ&YG^S61Sh$BWw)T<#6ly6#n05Uj5F9cXL{pSuJ5_$+?=4kc?) zhb144l1P+H&PW)zzwCgXT&Vr918WbKxX4|~A^85E*rmLIaeR2U(k(Zs>-cT=W9Qzi zb>FZ2nxOZt2NXDP#A@UBD9N}fh)2eh5%M;*mA5=57Ol4bF=ZtMZ;08em67G`#F0WRUgo< zeOehrDHy_Y&nQEn#sB>opee#pMZ521Q8C_ z*AVqN^Q#mTH$vi*>PpKf&Xw+nHMtW#&X=NtH4`Y zuCfyG$fK){JKt2U4ob)HQVV!HGFaed}pw@6g5@qt< zQm(#YreD@-w~k9gddQrWPF#^1fN*IxJL3>82XN9BkHt7(gDG{@Rp}m1cqUhzIP1nH z{O*9SN(bz3rK{`5z;OA++sb%L4kPDG61e)PW6F4}y6cZA?WWcMu`GD*J4!eo{totr z?L7M(jN@Lu{v9QQ7T~PqN@ZApL~=0MLf%`gR%n*1Nq)#mKSj#>gi}7%sU^q;3pme zw0}Hqxticg&iK6+{h`4_Pg;hsvkXS*51zD4757Yr?X#?q+m$H3d7mXyTuAELXSoeG zbmnzfR?5qibY9S5iQsQ^Sh7rb|3A-+)5r^!k$l|KmPQ(D^}PRB7--X~kbHDLfxrH= zB~@utlB^A4^2PGOot7CwAa`1(${E%yet)MWQT$Rsf%ZnHrJUlHoHpTE3tr7aV6$eq zia;{F|C}X-0PE@e*plk31U6~Tz>_)n*i%|;ZA5ltEOq2M z%BtZB;Br(tYaA=*y(Jb*7+uRr(9d!A&2@$5OE z0SPxg;o@NAq~1bfH;j>*i6ghFNk;%rKV&-lkmEderF*TzT`yKfy|_>ADie5C;0bB` zG)D#8pIo8@JOr^4MY8t?I^ZjaRJ0D>QDa=xu>k7|MMNv>8&}{pzxOVwKy7^8tmlr#3#QGO4 zf~${c^74kdM%VH&QX6qxr8_gi2BV*cqRF~ntLUZiizj6^M|GXAC&|3aL%=|M^!AaY z3JpUEF(CMOyFI3SdZTcRt-s3MaM^h)eknl=DR211vci;P0)N( zx1~gAE?<3R`6DrPDa37Fu3s9dW6Jc;p#&S&w#fNR%7upi1tT^TExWfYpl~83F_)_a)944S*AZmx|yZzoTk1`<%8D4TKNohyeuEFE)+{RRC{`s zy2j25@LL>O@>S|YW$;n!5-HIj-u#u~XC;bo2MMcRsH4}ZL&V|d&g<0Q(-T%czF57> zc1kQyiyOy1m@|W}SHt*+#p*5WtOci_rPr$!;;i%7_39#+u;NQpaT#)1i8@*iv<36c zCF*#H%@<10kyw7AL_H23^XKJiHdd>}siqET5u-EDVOZbAio((^jgHeCkS|-LKWJ#7_(12HWGS)F;4rw5#3fT}1rQ$N}wNH>mR% z&9ixO0|)cP)#@zPg2B}-4iU*GGSpyf}BPM8#Z?94BfKFa~qq;~agdI1k zzk({8zE-v3r#SeuCUpTmTbtBE#|iXRnzInn6hhDcERR?e<*ennMs8AfQSrkkN3{oU zQ71u1<)_!H!!|%n$!=TxoEhb=($zR{yT(;ly%=a*b(OYfrs=8Tu~)Bu|#f{@d$p>4`qdI*tkKBPTpdB zW~QF(TlwP6`)#(9+ilD3Gw>dXEe3a)g_x6Y+v(j6>SQQwp&Qi+xbeFeUM6ZM<}ztk zXF}-BYF0mhs+aUD^-pq}?EwGgS6CDo{I*}KljS3}cK-UW)f=okZTgw=5gX2=a(<(J z7Iw;JX;|B4ON5(V>FN^UGM3(L)23`vr&1JNzgfMB^lH7ERR@$W8;@>LTPY5To^DYm zK`NbZQD?AT8+(q_sP_`B@NP9v zhRV&is}ry$-rSCvv4s!0SB;X-%CUUXz3OY$gh1mh#+1Me&3d2uThcFO*ADe%f*siP zyVNE4bna3cp!+B8R+lgwpghN&yVMZw*{xn5x&N2i6X?j}H~dZ=t)<@&_7RyIczLhT z=0Hb|0n_<_dK-;A|I2ua4VaC4)X7w?rFsvqkWFXhz(7kL?|KB1{nN+PI5N7;W~*>j z+4BOWnPB{NO(iQ`u97mi!niByEw)B@Dj5Lzff8S~R~^EaJfSYKL{Xy@fAR^n-WSW) zlJ=^@uubIio>c2(ML7XwU&R~X+Q_HW9w-EXy;^jKS}bE{*Yu3KlR)lAJPQVacW$3m z&*77$sY^*B->RvRjsoWIy_hX-`-!IEl1K?W7#kUX6K~lrZ)C<{M6AWH9XSFrqmJFbvyy$pJM|Znw4Zn+~YOSeEY|P+!yI zZO^Myz(LPEuWlh>c?`$flK%RRVg1Riai{WMy{M*P!~M*QY9^HG^DnB?uz<%LRHxA+ zfxPCRnoN%c@?8fprA`F$lLysdv^((bm()@C@Z^`&3G{p*FMCNHA8uaOC4t=LDFwm;Z?5+XFad#Qp0&^ zmzo4y#Fj2K25afDE^y;0{&ttT3 Date: Thu, 26 Mar 2026 12:57:54 +0100 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E2=9C=A8=20Bump=20client=20version?= =?UTF-8?q?=20to=20v0.30.0=20and=20runtime=20to=20RT1500=20(#480)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- operator/Cargo.lock | 172 +++++++++++++-------------- operator/Cargo.toml | 2 +- operator/runtime/mainnet/src/lib.rs | 2 +- operator/runtime/stagenet/src/lib.rs | 2 +- operator/runtime/testnet/src/lib.rs | 2 +- test/.papi/metadata/datahaven.scale | Bin 640566 -> 640566 bytes 6 files changed, 90 insertions(+), 90 deletions(-) diff --git a/operator/Cargo.lock b/operator/Cargo.lock index cf90f05d..5ccff712 100644 --- a/operator/Cargo.lock +++ b/operator/Cargo.lock @@ -1612,7 +1612,7 @@ dependencies = [ "pallet-message-queue", "parity-scale-codec", "scale-info", - "snowbridge-core 0.23.0", + "snowbridge-core 0.30.0", "sp-core", "sp-runtime", "staging-xcm", @@ -2694,7 +2694,7 @@ dependencies = [ [[package]] name = "datahaven-mainnet-runtime" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", @@ -2808,11 +2808,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -2821,7 +2821,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -2851,7 +2851,7 @@ dependencies = [ [[package]] name = "datahaven-node" -version = "0.23.0" +version = "0.30.0" dependencies = [ "async-channel 1.9.0", "clap", @@ -2964,7 +2964,7 @@ dependencies = [ [[package]] name = "datahaven-runtime-common" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "fp-account", @@ -2988,7 +2988,7 @@ dependencies = [ "polkadot-runtime-common", "precompile-utils", "scale-info", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -2997,7 +2997,7 @@ dependencies = [ [[package]] name = "datahaven-stagenet-runtime" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", @@ -3111,11 +3111,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3124,7 +3124,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3154,7 +3154,7 @@ dependencies = [ [[package]] name = "datahaven-testnet-runtime" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", @@ -3268,11 +3268,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3281,7 +3281,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3460,7 +3460,7 @@ dependencies = [ [[package]] name = "dhp-bridge" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -3468,7 +3468,7 @@ dependencies = [ "pallet-datahaven-native-transfer", "pallet-external-validators", "parity-scale-codec", - "snowbridge-core 0.23.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", ] @@ -8607,7 +8607,7 @@ dependencies = [ [[package]] name = "pallet-datahaven-native-transfer" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -8615,8 +8615,8 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -8720,7 +8720,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-balances-erc20" -version = "0.23.0" +version = "0.30.0" dependencies = [ "fp-evm", "frame-support", @@ -8742,7 +8742,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-batch" -version = "0.23.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8780,7 +8780,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-call-permit" -version = "0.23.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8843,7 +8843,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-datahaven-native-transfer" -version = "0.23.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8857,8 +8857,8 @@ dependencies = [ "parity-scale-codec", "precompile-utils", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -8933,7 +8933,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-proxy" -version = "0.23.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8975,7 +8975,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-registry" -version = "0.23.0" +version = "0.30.0" dependencies = [ "fp-evm", "frame-support", @@ -9025,8 +9025,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -9035,7 +9035,7 @@ dependencies = [ [[package]] name = "pallet-external-validators" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9049,7 +9049,7 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -9058,7 +9058,7 @@ dependencies = [ [[package]] name = "pallet-external-validators-rewards" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9071,8 +9071,8 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -9161,7 +9161,7 @@ dependencies = [ [[package]] name = "pallet-grandpa-benchmarking" -version = "0.23.0" +version = "0.30.0" dependencies = [ "finality-grandpa", "frame-benchmarking", @@ -9307,7 +9307,7 @@ dependencies = [ [[package]] name = "pallet-outbound-commitment-store" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -9428,7 +9428,7 @@ dependencies = [ [[package]] name = "pallet-proxy-genesis-companion" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -9621,7 +9621,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -14692,7 +14692,7 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.23.0" +version = "0.30.0" dependencies = [ "byte-slice-cast", "frame-support", @@ -14738,7 +14738,7 @@ dependencies = [ [[package]] name = "snowbridge-core" -version = "0.23.0" +version = "0.30.0" dependencies = [ "bp-relayers", "ethabi-decode", @@ -14813,9 +14813,9 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", + "snowbridge-verification-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -14837,7 +14837,7 @@ dependencies = [ [[package]] name = "snowbridge-merkle-tree" -version = "0.23.0" +version = "0.30.0" dependencies = [ "array-bytes", "hex", @@ -14893,7 +14893,7 @@ dependencies = [ [[package]] name = "snowbridge-outbound-queue-primitives" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "ethabi-decode", @@ -14905,8 +14905,8 @@ dependencies = [ "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-verification-primitives 0.30.0", "sp-arithmetic", "sp-core", "sp-io", @@ -14918,21 +14918,21 @@ dependencies = [ [[package]] name = "snowbridge-outbound-queue-v2-runtime-api" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-merkle-tree 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-api", "staging-xcm", ] [[package]] name = "snowbridge-pallet-ethereum-client" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -14945,8 +14945,8 @@ dependencies = [ "scale-info", "serde", "serde_json", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-ethereum 0.3.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client-fixtures", @@ -14961,15 +14961,15 @@ name = "snowbridge-pallet-ethereum-client-fixtures" version = "0.9.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", ] [[package]] name = "snowbridge-pallet-inbound-queue-v2" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "bp-relayers", @@ -14983,8 +14983,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-inbound-queue-v2-fixtures", @@ -15004,8 +15004,8 @@ name = "snowbridge-pallet-inbound-queue-v2-fixtures" version = "0.10.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", ] @@ -15035,7 +15035,7 @@ dependencies = [ [[package]] name = "snowbridge-pallet-outbound-queue-v2" -version = "0.23.0" +version = "0.30.0" dependencies = [ "alloy-core", "bp-relayers", @@ -15049,12 +15049,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.23.0", - "snowbridge-core 0.23.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", - "snowbridge-verification-primitives 0.23.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", + "snowbridge-verification-primitives 0.30.0", "sp-arithmetic", "sp-core", "sp-io", @@ -15080,8 +15080,8 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-pallet-outbound-queue", "sp-core", "sp-io", @@ -15092,7 +15092,7 @@ dependencies = [ [[package]] name = "snowbridge-pallet-system-v2" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15104,8 +15104,8 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.23.0", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-pallet-outbound-queue-v2", "snowbridge-pallet-system", "snowbridge-test-utils", @@ -15119,17 +15119,17 @@ dependencies = [ [[package]] name = "snowbridge-system-v2-runtime-api" -version = "0.23.0" +version = "0.30.0" dependencies = [ "parity-scale-codec", - "snowbridge-core 0.23.0", + "snowbridge-core 0.30.0", "sp-api", "staging-xcm", ] [[package]] name = "snowbridge-test-utils" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15139,7 +15139,7 @@ dependencies = [ "pallet-xcm", "parity-scale-codec", "scale-info", - "snowbridge-outbound-queue-primitives 0.23.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "staging-xcm", "staging-xcm-builder", @@ -15161,12 +15161,12 @@ dependencies = [ [[package]] name = "snowbridge-verification-primitives" -version = "0.23.0" +version = "0.30.0" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.23.0", + "snowbridge-beacon-primitives 0.30.0", "sp-core", ] diff --git a/operator/Cargo.toml b/operator/Cargo.toml index 12e449cc..208618d6 100644 --- a/operator/Cargo.toml +++ b/operator/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" homepage = "https://datahaven.xyz/" license = "GPL-3" repository = "https://github.com/datahavenxyz/datahaven" -version = "0.23.0" +version = "0.30.0" [workspace] members = [ diff --git a/operator/runtime/mainnet/src/lib.rs b/operator/runtime/mainnet/src/lib.rs index efc6df50..85527ea2 100644 --- a/operator/runtime/mainnet/src/lib.rs +++ b/operator/runtime/mainnet/src/lib.rs @@ -145,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/operator/runtime/stagenet/src/lib.rs b/operator/runtime/stagenet/src/lib.rs index be11d95e..9ac518f1 100644 --- a/operator/runtime/stagenet/src/lib.rs +++ b/operator/runtime/stagenet/src/lib.rs @@ -148,7 +148,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/operator/runtime/testnet/src/lib.rs b/operator/runtime/testnet/src/lib.rs index 40d6345f..554f337e 100644 --- a/operator/runtime/testnet/src/lib.rs +++ b/operator/runtime/testnet/src/lib.rs @@ -145,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/test/.papi/metadata/datahaven.scale b/test/.papi/metadata/datahaven.scale index 1799b57618aa1771e510b0e641110120b5f9d960..a3dd8d10877cbc65dbd7f7022f9c02ca954c801b 100644 GIT binary patch delta 43 ucmdniqrR<2y`hD%g{g(Pg=Gut?qJ3{?R$b*ftU@5*@2j2`<`IVsv-b-d=WkX delta 43 ucmdniqrR<2y`hD%g{g(Pg=Gut?qJ4>_C3L@K+Fcj>_E)1eNQlFRS^JjfDqaM