diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 3ee490945..b667b1c1d 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -7,13 +7,13 @@ if npm run lint; then npm run docgen git add docs cp artifacts/contracts/PolygonZKEVMBridge.sol/PolygonZKEVMBridge.json compiled-contracts/ - cp artifacts/contracts/GlobalExitRootManager.sol/GlobalExitRootManager.json compiled-contracts/ - cp artifacts/contracts/GlobalExitRootManagerL2.sol/GlobalExitRootManagerL2.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVMGlobalExitRoot.sol/PolygonZKEVMGlobalExitRoot.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVMGlobalExitRootL2.sol/PolygonZKEVMGlobalExitRootL2.json compiled-contracts/ cp artifacts/contracts/lib/TokenWrapped.sol/TokenWrapped.json compiled-contracts/ cp artifacts/contracts/mocks/PolygonZKEVMBridgeMock.sol/PolygonZKEVMBridgeMock.json compiled-contracts/ cp artifacts/contracts/mocks/ERC20PermitMock.sol/ERC20PermitMock.json compiled-contracts/ - cp artifacts/contracts/mocks/GlobalExitRootManagerL2Mock.sol/GlobalExitRootManagerL2Mock.json compiled-contracts/ - cp artifacts/contracts/mocks/GlobalExitRootManagerMock.sol/GlobalExitRootManagerMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol/PolygonZKEVMGlobalExitRootL2Mock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol/PolygonZKEVMGlobalExitRootMock.json compiled-contracts/ cp artifacts/contracts/mocks/PolygonZKEVMMock.sol/PolygonZKEVMMock.json compiled-contracts/ cp artifacts/contracts/mocks/VerifierRollupHelperMock.sol/VerifierRollupHelperMock.json compiled-contracts/ cp artifacts/contracts/PolygonZKEVM.sol/PolygonZKEVM.json compiled-contracts/ diff --git a/README.md b/README.md index eabc738c2..e85f3eee5 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Private keys and mnemonics contained in this repository are used for internal te - `contracts`: zkevm contracts - `PolygonZKEVMBridge.sol`: transfer assets between chains - - `GlobalExitRootManager.sol`: manage global exit root in L1 - - `GlobalExitRootManagerL2.sol`: manage global exit root in L2 + - `PolygonZKEVMGlobalExitRoot.sol`: manage global exit root in L1 + - `PolygonZKEVMGlobalExitRootL2.sol`: manage global exit root in L2 - `PolygonZKEVM.sol`: consensus algorithm used by polyhon hermez zkevm - `docs`: specs and useful links - `test`: contracts tests diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json deleted file mode 100644 index 6756a527b..000000000 --- a/compiled-contracts/Bridge.json +++ /dev/null @@ -1,706 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridge", - "sourceName": "contracts/PolygonZKEVMBridge.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "depositCount", - "type": "uint32" - } - ], - "name": "BridgeEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "wrappedTokenAddress", - "type": "address" - } - ], - "name": "NewWrappedToken", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAINNET_NETWORK_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "permitData", - "type": "bytes" - } - ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "claimedBitMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDepositRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "metadataHash", - "type": "bytes32" - } - ], - "name": "getLeafValue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "name": "getTokenWrappedAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - }, - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "tokenInfoToWrappedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leafHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMerkleProof", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokenToTokenInfo", - "outputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50614730806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json deleted file mode 100644 index e2095b654..000000000 --- a/compiled-contracts/BridgeMock.json +++ /dev/null @@ -1,797 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridgeMock", - "sourceName": "contracts/mocks/PolygonZKEVMBridgeMock.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "depositCount", - "type": "uint32" - } - ], - "name": "BridgeEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "wrappedTokenAddress", - "type": "address" - } - ], - "name": "NewWrappedToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAINNET_NETWORK_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "permitData", - "type": "bytes" - } - ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "claimedBitMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDepositRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "metadataHash", - "type": "bytes32" - } - ], - "name": "getLeafValue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "name": "getTokenWrappedAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - }, - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxEtherPolygonZKEVMBridge", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxEtherPolygonZKEVMBridge", - "type": "uint256" - } - ], - "name": "setMaxEtherPolygonZKEVMBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - } - ], - "name": "setNetworkID", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "tokenInfoToWrappedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leafHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMerkleProof", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokenToTokenInfo", - "outputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50614b3d806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/PolygonZKEVM.json b/compiled-contracts/PolygonZKEVM.json index a776346ef..7c8af3fa3 100644 --- a/compiled-contracts/PolygonZKEVM.json +++ b/compiled-contracts/PolygonZKEVM.json @@ -642,7 +642,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -653,7 +653,7 @@ { "inputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridge.json b/compiled-contracts/PolygonZKEVMBridge.json index bf8f869a2..5d99193af 100644 --- a/compiled-contracts/PolygonZKEVMBridge.json +++ b/compiled-contracts/PolygonZKEVMBridge.json @@ -493,7 +493,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -509,7 +509,7 @@ "type": "uint32" }, { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridgeMock.json b/compiled-contracts/PolygonZKEVMBridgeMock.json index 7d7b8c32a..22b109ffb 100644 --- a/compiled-contracts/PolygonZKEVMBridgeMock.json +++ b/compiled-contracts/PolygonZKEVMBridgeMock.json @@ -512,7 +512,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -528,7 +528,7 @@ "type": "uint32" }, { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/PolygonZKEVMGlobalExitRoot.json similarity index 53% rename from compiled-contracts/GlobalExitRootManager.json rename to compiled-contracts/PolygonZKEVMGlobalExitRoot.json index 9d6a74abe..a4fbc0cd4 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRoot.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManager", - "sourceName": "contracts/GlobalExitRootManager.sol", + "contractName": "PolygonZKEVMGlobalExitRoot", + "sourceName": "contracts/PolygonZKEVMGlobalExitRoot.sol", "abi": [ { "anonymous": false, @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json similarity index 60% rename from compiled-contracts/GlobalExitRootManagerL2.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootL2.json index 7f3b42deb..32ac939c4 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerL2", - "sourceName": "contracts/GlobalExitRootManagerL2.sol", + "contractName": "PolygonZKEVMGlobalExitRootL2", + "sourceName": "contracts/PolygonZKEVMGlobalExitRootL2.sol", "abi": [ { "inputs": [ @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61019c806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json similarity index 66% rename from compiled-contracts/GlobalExitRootManagerL2Mock.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json index f3b3f2af9..fb78a6f17 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerL2Mock", - "sourceName": "contracts/mocks/GlobalExitRootManagerL2Mock.sol", + "contractName": "PolygonZKEVMGlobalExitRootL2Mock", + "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol", "abi": [ { "inputs": [ @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029538038061029583398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610202806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json similarity index 60% rename from compiled-contracts/GlobalExitRootManagerMock.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootMock.json index d0d6acd6b..15da7037b 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerMock", - "sourceName": "contracts/mocks/GlobalExitRootManagerMock.sol", + "contractName": "PolygonZKEVMGlobalExitRootMock", + "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol", "abi": [ { "inputs": [ @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161076f38038061076f83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610572806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMMock.json b/compiled-contracts/PolygonZKEVMMock.json index 7ee57af7a..3a6e0b57c 100644 --- a/compiled-contracts/PolygonZKEVMMock.json +++ b/compiled-contracts/PolygonZKEVMMock.json @@ -720,7 +720,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -731,7 +731,7 @@ { "inputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json deleted file mode 100644 index a37e696e7..000000000 --- a/compiled-contracts/ProofOfEfficiency.json +++ /dev/null @@ -1,1476 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVM", - "sourceName": "contracts/PolygonZKEVM.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "ConsolidatePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "lastGlobalExitRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "ForceBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "OverridePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicPendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceForceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "SetForceBatchAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "SetMultiplierBatchFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "SetPendingStateTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "SetTrustedAggregator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "SetTrustedAggregatorTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "SetTrustedSequencer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "SetTrustedSequencerURL", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "SetVeryBatchTimeTarget", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "TrustedVerifyBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "VerifyBatches", - "type": "event" - }, - { - "inputs": [], - "name": "FORCE_BATCH_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HALT_AGGREGATION_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "sequencedBatchNum", - "type": "uint64" - } - ], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "batchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PolygonZKEVMBridgeAddress", - "outputs": [ - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "calculateRewardPerBatch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "chainID", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "consolidatePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maticAmount", - "type": "uint256" - } - ], - "name": "forceBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceBatchAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "forcedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "oldStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "contract IERC20Upgradeable", - "name": "_matic", - "type": "address" - }, - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - }, - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "_PolygonZKEVMBridgeAddress", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - }, - { - "internalType": "address", - "name": "trustedSequencer", - "type": "address" - }, - { - "internalType": "uint64", - "name": "pendingStateTimeout", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "forceBatchAllowed", - "type": "bool" - }, - { - "internalType": "address", - "name": "trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "trustedAggregatorTimeout", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", - "name": "initializePackedParameters", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "_trustedSequencerURL", - "type": "string" - }, - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "isPendingStateConsolidable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingState", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingStateConsolidated", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastTimestamp", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "matic", - "outputs": [ - { - "internalType": "contract IERC20Upgradeable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "multiplierBatchFee", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "overridePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingStateTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pendingStateTransitions", - "outputs": [ - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "exitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "proveNonDeterministicPendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rollupVerifier", - "outputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.BatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceForceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "sequencedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "accInputHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "sequencedTimestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "previousLastBatchSequenced", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "setForceBatchAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "setMultiplierBatchFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "setPendingStateTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "setTrustedAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "setTrustedAggregatorTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "setTrustedSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "setTrustedSequencerURL", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "setVeryBatchTimeTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregatorTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencerURL", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "verifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "veryBatchTimeTarget", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061567f80620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json deleted file mode 100644 index 318274233..000000000 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ /dev/null @@ -1,1700 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMMock", - "sourceName": "contracts/mocks/PolygonZKEVMMock.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "ConsolidatePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "lastGlobalExitRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "ForceBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "OverridePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicPendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceForceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "SetForceBatchAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "SetMultiplierBatchFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "SetPendingStateTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "SetTrustedAggregator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "SetTrustedAggregatorTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "SetTrustedSequencer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "SetTrustedSequencerURL", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "SetVeryBatchTimeTarget", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "TrustedVerifyBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "VerifyBatches", - "type": "event" - }, - { - "inputs": [], - "name": "FORCE_BATCH_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HALT_AGGREGATION_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "sequencedBatchNum", - "type": "uint64" - } - ], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "batchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PolygonZKEVMBridgeAddress", - "outputs": [ - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "currentAccInputHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sequencerAddress", - "type": "address" - } - ], - "name": "calculateAccInputHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "calculateRewardPerBatch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "chainID", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "consolidatePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maticAmount", - "type": "uint256" - } - ], - "name": "forceBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceBatchAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "forcedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "oldStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getNextSnarkInput", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "contract IERC20Upgradeable", - "name": "_matic", - "type": "address" - }, - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - }, - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "_PolygonZKEVMBridgeAddress", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - }, - { - "internalType": "address", - "name": "trustedSequencer", - "type": "address" - }, - { - "internalType": "uint64", - "name": "pendingStateTimeout", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "forceBatchAllowed", - "type": "bool" - }, - { - "internalType": "address", - "name": "trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "trustedAggregatorTimeout", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", - "name": "initializePackedParameters", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "_trustedSequencerURL", - "type": "string" - }, - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "isPendingStateConsolidable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingState", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingStateConsolidated", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastTimestamp", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "matic", - "outputs": [ - { - "internalType": "contract IERC20Upgradeable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "multiplierBatchFee", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "overridePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingStateTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pendingStateTransitions", - "outputs": [ - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "exitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "proveNonDeterministicPendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rollupVerifier", - "outputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.BatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceForceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "sequencedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "accInputHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "sequencedTimestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "previousLastBatchSequenced", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "setForceBatchAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "setMultiplierBatchFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "setNetworkName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "setPendingStateTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_numBatch", - "type": "uint64" - } - ], - "name": "setSequencedBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "accInputData", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastPendingStateConsolidated", - "type": "uint64" - } - ], - "name": "setSequencedBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" - } - ], - "name": "setStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "setTrustedAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "setTrustedAggregatorTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "setTrustedSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "setTrustedSequencerURL", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_numBatch", - "type": "uint64" - } - ], - "name": "setVerifiedBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - } - ], - "name": "setVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "setVeryBatchTimeTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregatorTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencerURL", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatchesMock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "verifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "veryBatchTimeTarget", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50615e7d80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/PolygonZKEVM.sol b/contracts/PolygonZKEVM.sol index 8c1c2187e..4b904ce2b 100644 --- a/contracts/PolygonZKEVM.sol +++ b/contracts/PolygonZKEVM.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.15; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; import "./interfaces/IVerifierRollup.sol"; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "./interfaces/IPolygonZKEVMBridge.sol"; @@ -171,7 +171,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { IVerifierRollup public rollupVerifier; // Global Exit Root interface - IGlobalExitRootManager public globalExitRootManager; + IPolygonZKEVMGlobalExitRoot public globalExitRootManager; // Indicates whether the force batch functionality is available bool public forceBatchAllowed; @@ -335,7 +335,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { * @param _networkName L2 network name */ function initialize( - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, IERC20Upgradeable _matic, IVerifierRollup _rollupVerifier, IPolygonZKEVMBridge _bridgeAddress, diff --git a/contracts/PolygonZKEVMBridge.sol b/contracts/PolygonZKEVMBridge.sol index 5c23210df..8f7b13f19 100644 --- a/contracts/PolygonZKEVMBridge.sol +++ b/contracts/PolygonZKEVMBridge.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.15; import "./lib/DepositContract.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "./lib/TokenWrapped.sol"; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; import "./interfaces/IPolygonZKEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; @@ -56,7 +56,7 @@ contract PolygonZKEVMBridge is mapping(address => TokenInformation) public wrappedTokenToTokenInfo; // Global Exit Root address - IGlobalExitRootManager public globalExitRootManager; + IPolygonZKEVMGlobalExitRoot public globalExitRootManager; // Polygon ZK-EVM address address public poeAddress; @@ -67,7 +67,7 @@ contract PolygonZKEVMBridge is */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public virtual initializer { networkID = _networkID; diff --git a/contracts/GlobalExitRootManager.sol b/contracts/PolygonZKEVMGlobalExitRoot.sol similarity index 91% rename from contracts/GlobalExitRootManager.sol rename to contracts/PolygonZKEVMGlobalExitRoot.sol index ae6e4caf7..f10c7414b 100644 --- a/contracts/GlobalExitRootManager.sol +++ b/contracts/PolygonZKEVMGlobalExitRoot.sol @@ -2,13 +2,13 @@ pragma solidity 0.8.15; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { +contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializable { // Rollup exit root, this will be updated every time a batch is verified bytes32 public lastRollupExitRoot; @@ -51,7 +51,7 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == rollupAddress || msg.sender == bridgeAddress, - "GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS" + "PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS" ); if (msg.sender == rollupAddress) { lastRollupExitRoot = newRoot; diff --git a/contracts/GlobalExitRootManagerL2.sol b/contracts/PolygonZKEVMGlobalExitRootL2.sol similarity index 91% rename from contracts/GlobalExitRootManagerL2.sol rename to contracts/PolygonZKEVMGlobalExitRootL2.sol index 04c0154ca..cfde26b10 100644 --- a/contracts/GlobalExitRootManagerL2.sol +++ b/contracts/PolygonZKEVMGlobalExitRootL2.sol @@ -8,7 +8,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; * Contract responsible for managing the exit roots for the L2 and global exit roots * The special circuit variables will be accesed and updated directly by the circuit */ -contract GlobalExitRootManagerL2 { +contract PolygonZKEVMGlobalExitRootL2 { ///////////////////////////// // Special circuit variables //////////////////////////// @@ -40,7 +40,7 @@ contract GlobalExitRootManagerL2 { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == bridgeAddress, - "GlobalExitRootManagerL2::updateExitRoot: ONLY_BRIDGE" + "PolygonZKEVMGlobalExitRootL2::updateExitRoot: ONLY_BRIDGE" ); lastRollupExitRoot = newRoot; } diff --git a/contracts/interfaces/IGlobalExitRootManager.sol b/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol similarity index 88% rename from contracts/interfaces/IGlobalExitRootManager.sol rename to contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol index 939e6e5d7..ff1717598 100644 --- a/contracts/interfaces/IGlobalExitRootManager.sol +++ b/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; -interface IGlobalExitRootManager { +interface IPolygonZKEVMGlobalExitRoot { function getLastGlobalExitRoot() external view returns (bytes32); function updateExitRoot(bytes32 newRollupExitRoot) external; diff --git a/contracts/mocks/PolygonZKEVMBridgeMock.sol b/contracts/mocks/PolygonZKEVMBridgeMock.sol index 8c8d0f4b0..802ddc41c 100644 --- a/contracts/mocks/PolygonZKEVMBridgeMock.sol +++ b/contracts/mocks/PolygonZKEVMBridgeMock.sol @@ -16,7 +16,7 @@ contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public override initializer { networkID = _networkID; diff --git a/contracts/mocks/GlobalExitRootManagerL2Mock.sol b/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol similarity index 81% rename from contracts/mocks/GlobalExitRootManagerL2Mock.sol rename to contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol index 878648d9b..80a942930 100644 --- a/contracts/mocks/GlobalExitRootManagerL2Mock.sol +++ b/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol @@ -1,19 +1,19 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../GlobalExitRootManagerL2.sol"; +import "../PolygonZKEVMGlobalExitRootL2.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManagerL2Mock is GlobalExitRootManagerL2 { +contract PolygonZKEVMGlobalExitRootL2Mock is PolygonZKEVMGlobalExitRootL2 { /** * @param _bridgeAddress PolygonZKEVM Bridge contract address */ constructor( address _bridgeAddress - ) GlobalExitRootManagerL2(_bridgeAddress) {} + ) PolygonZKEVMGlobalExitRootL2(_bridgeAddress) {} /** * @notice Set globalExitRoot diff --git a/contracts/mocks/GlobalExitRootManagerMock.sol b/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol similarity index 88% rename from contracts/mocks/GlobalExitRootManagerMock.sol rename to contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol index 1f736b6c2..adf6f5340 100644 --- a/contracts/mocks/GlobalExitRootManagerMock.sol +++ b/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../GlobalExitRootManager.sol"; +import "../PolygonZKEVMGlobalExitRoot.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManagerMock is GlobalExitRootManager { +contract PolygonZKEVMGlobalExitRootMock is PolygonZKEVMGlobalExitRoot { /** * @param _rollupAddress Rollup contract address * @param _bridgeAddress PolygonZKEVM Bridge contract address diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 3c0e170ce..25892af47 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -100,25 +100,25 @@ async function main() { */ // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager', deployer); - let globalExitRootManager; + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('polygonZKEVMGlobalExitRoot', deployer); + let polygonZKEVMGlobalExitRoot; for (let i = 0; i < attemptsDeployProxy; i++) { try { - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of globalExitRootManager ', error.error.reason); + console.log('upgrades.deployProxy of polygonZKEVMGlobalExitRoot ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('GlobalExitRootManager contract has not been deployed'); + throw new Error('polygonZKEVMGlobalExitRoot contract has not been deployed'); } } console.log('#######################\n'); - console.log('globalExitRootManager deployed to:', globalExitRootManager.address); + console.log('polygonZKEVMGlobalExitRoot deployed to:', polygonZKEVMGlobalExitRoot.address); // deploy PolygonZKEVMBridge let polygonZKEVMBridgeFactory; @@ -169,23 +169,23 @@ async function main() { console.log('Polygon ZK-EVM deployed to:', polygonZKEVMContract.address); /* - * Initialize globalExitRootManager + * Initialize polygonZKEVMGlobalExitRoot */ - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); /* * Initialize PolygonZKEVMBridge */ await (await polygonZKEVMBridgeContract.initialize( networkIDMainnet, - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address, )).wait(); console.log('\n#######################'); console.log('##### Checks PolygonZKEVMBridge #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); + console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); console.log('networkID:', await polygonZKEVMBridgeContract.networkID()); console.log('poeAddress:', await polygonZKEVMBridgeContract.poeAddress()); console.log('owner:', await polygonZKEVMBridgeContract.owner()); @@ -200,7 +200,7 @@ async function main() { console.log('##### Deployment Polygon ZK-EVM #####'); console.log('#######################'); console.log('deployer:', deployer.address); - console.log('globalExitRootManagerAddress:', globalExitRootManager.address); + console.log('PolygonZKEVMGlobalExitRootAddress:', polygonZKEVMGlobalExitRoot.address); console.log('maticTokenAddress:', maticTokenContract.address); console.log('verifierAddress:', verifierContract.address); console.log('polygonZKEVMBridgeContract:', polygonZKEVMBridgeContract.address); @@ -218,7 +218,7 @@ async function main() { console.log('networkName:', networkName); await (await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -241,7 +241,7 @@ async function main() { console.log('\n#######################'); console.log('##### Checks PoE #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await polygonZKEVMContract.globalExitRootManager()); + console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMContract.globalExitRootManager()); console.log('maticTokenAddress:', await polygonZKEVMContract.matic()); console.log('verifierAddress:', await polygonZKEVMContract.rollupVerifier()); console.log('polygonZKEVMBridgeContract:', await polygonZKEVMContract.bridgeAddress()); @@ -290,7 +290,7 @@ async function main() { const outputJson = { polygonZKEVMAddress: polygonZKEVMContract.address, PolygonZKEVMBridgeAddress: polygonZKEVMBridgeContract.address, - globalExitRootManagerAddress: globalExitRootManager.address, + PolygonZKEVMGlobalExitRootAddress: polygonZKEVMGlobalExitRoot.address, maticTokenAddress: maticTokenContract.address, verifierAddress: verifierContract.address, deployerAddress: deployer.address, diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index 52e7d8027..d62d7948d 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -32,7 +32,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "GlobalExitRootManagerL2", + "contractName": "PolygonZKEVMGlobalExitRootL2", "reason": "" }, { diff --git a/deployment/genesis.json b/deployment/genesis.json index 1488f3b7a..f09f2ea12 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -28,7 +28,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "GlobalExitRootManagerL2" + "contractName": "PolygonZKEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 00ea7102f..9196fc0b3 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -50,7 +50,7 @@ async function main() { // verify proxies - const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'globalExitRootManagerAddress']; + const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'PolygonZKEVMGlobalExitRootAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 24834fd09..91eb724fa 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -34,7 +34,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "GlobalExitRootManagerL2" + "contractName": "PolygonZKEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 02ba90780..9d3d258bd 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -38,7 +38,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "GlobalExitRootManagerL2", + "contractName": "PolygonZKEVMGlobalExitRootL2", "reason": "" }, { diff --git a/docs/PolygonZKEVM.md b/docs/PolygonZKEVM.md index dc891e439..e6c66892b 100644 --- a/docs/PolygonZKEVM.md +++ b/docs/PolygonZKEVM.md @@ -10,7 +10,7 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont ### initialize ```solidity function initialize( - contract IGlobalExitRootManager _globalExitRootManager, + contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, contract IPolygonZKEVMBridge _bridgeAddress, @@ -25,7 +25,7 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address +|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | Global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address |`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address |`_bridgeAddress` | contract IPolygonZKEVMBridge | Bridge address diff --git a/docs/PolygonZKEVMBridge.md b/docs/PolygonZKEVMBridge.md index ff71b7417..e9bef06e3 100644 --- a/docs/PolygonZKEVMBridge.md +++ b/docs/PolygonZKEVMBridge.md @@ -7,7 +7,7 @@ Contract responsible to manage the token interactions with other networks ```solidity function initialize( uint32 _networkID, - contract IGlobalExitRootManager _globalExitRootManager + contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager ) public ``` @@ -16,7 +16,7 @@ Contract responsible to manage the token interactions with other networks | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`_networkID` | uint32 | networkID -|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address +|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | global exit root manager address ### bridgeAsset ```solidity diff --git a/docs/GlobalExitRootManager.md b/docs/PolygonZKEVMGlobalExitRoot.md similarity index 100% rename from docs/GlobalExitRootManager.md rename to docs/PolygonZKEVMGlobalExitRoot.md diff --git a/docs/GlobalExitRootManagerL2.md b/docs/PolygonZKEVMGlobalExitRootL2.md similarity index 100% rename from docs/GlobalExitRootManagerL2.md rename to docs/PolygonZKEVMGlobalExitRootL2.md diff --git a/index.js b/index.js index 76fa957d3..362901cc9 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,13 @@ module.exports.PolygonZKEVMBridge = require('./compiled-contracts/PolygonZKEVMBridge.json'); -module.exports.GlobalExitRootManager = require('./compiled-contracts/GlobalExitRootManager.json'); -module.exports.GlobalExitRootManagerL2 = require('./compiled-contracts/GlobalExitRootManagerL2.json'); +module.exports.PolygonZKEVMGlobalExitRoot = require('./compiled-contracts/PolygonZKEVMGlobalExitRoot.json'); +module.exports.PolygonZKEVMGlobalExitRootL2 = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2.json'); module.exports.PolygonZKEVM = require('./compiled-contracts/PolygonZKEVM.json'); module.exports.TokenWrapped = require('./compiled-contracts/TokenWrapped.json'); module.exports.Verifier = require('./compiled-contracts/Verifier.json'); module.exports.PolygonZKEVMBridgeMock = require('./compiled-contracts/PolygonZKEVMBridgeMock.json'); module.exports.ERC20PermitMock = require('./compiled-contracts/ERC20PermitMock.json'); -module.exports.GlobalExitRootManagerL2Mock = require('./compiled-contracts/GlobalExitRootManagerL2Mock.json'); -module.exports.GlobalExitRootManagerMock = require('./compiled-contracts/GlobalExitRootManagerMock.json'); +module.exports.PolygonZKEVMGlobalExitRootL2Mock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json'); +module.exports.PolygonZKEVMGlobalExitRootMock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootMock.json'); module.exports.PolygonZKEVMMock = require('./compiled-contracts/PolygonZKEVMMock.json'); module.exports.VerifierRollupHelperMock = require('./compiled-contracts/VerifierRollupHelperMock.json'); module.exports.PermitHelper = require('./src/permit-helper'); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index ba1d9abe1..a7c06103d 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -15,7 +15,7 @@ describe('PolygonZKEVMBridge Contract', () => { let rollup; let acc1; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -41,16 +41,16 @@ describe('PolygonZKEVMBridge Contract', () => { [deployer, rollup, acc1] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -64,7 +64,7 @@ describe('PolygonZKEVMBridge Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); expect(await polygonZKEVMBridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); }); @@ -83,7 +83,7 @@ describe('PolygonZKEVMBridge Contract', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) @@ -108,7 +108,7 @@ describe('PolygonZKEVMBridge Contract', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -132,7 +132,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge message and verify merkle proof', async () => { @@ -145,7 +145,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -193,7 +193,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should claim tokens from Mainnet to Mainnet', async () => { @@ -206,7 +206,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -226,20 +226,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // check only rollup account with update rollup exit root - await expect(globalExitRootManager.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -326,7 +326,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; // since we are inserting in the exit root can be anything const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -346,20 +346,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTreeRollup.getRoot(); // check only rollup account with update rollup exit root - await expect(globalExitRootManager.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTreeRollup.getProofTreeByIndex(0); @@ -462,7 +462,7 @@ describe('PolygonZKEVMBridge Contract', () => { const wrappedTokenAddress = newWrappedToken.address; const newDestinationNetwork = networkIDRollup; - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(newWrappedToken.approve(polygonZKEVMBridgeContract.address, amount)) @@ -515,7 +515,7 @@ describe('PolygonZKEVMBridge Contract', () => { metadataMainnet, depositCount, ) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot) .to.emit(newWrappedToken, 'Transfer') .withArgs(deployer.address, ethers.constants.AddressZero, amount); @@ -542,7 +542,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot2 = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot2).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot2).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge and sync the current root with events', async () => { @@ -670,7 +670,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -690,16 +690,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -823,7 +823,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -843,16 +843,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -973,7 +973,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -993,16 +993,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 717143a28..e5fc0ed17 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -14,7 +14,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { let deployer; let rollup; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -38,15 +38,15 @@ describe('PolygonZKEVMBridge Mock Contract', () => { [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -60,7 +60,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); }); @@ -78,7 +78,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) @@ -103,7 +103,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -127,7 +127,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('shouldnt be able to PolygonZKEVMBridge more thna 0.25e ehters', async () => { diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 0f0df7c15..19f08b5e9 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -22,7 +22,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { let deployer; let rollup; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -46,15 +46,15 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const polygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(polygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); @@ -82,7 +82,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -130,7 +130,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -154,7 +154,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge with permit DAI type contracts', async () => { @@ -182,7 +182,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await daiContract.balanceOf(deployer.address); const balanceBridge = await daiContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -228,7 +228,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -252,7 +252,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge with permit UNI type contracts', async () => { @@ -281,7 +281,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await uniContract.balanceOf(deployer.address); const balanceBridge = await uniContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -328,7 +328,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -352,6 +352,6 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); }); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index b82c6bbe2..0f5bcd333 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -11,7 +11,7 @@ describe('Emergency mode test', () => { let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -48,8 +48,8 @@ describe('Emergency mode test', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); @@ -59,10 +59,10 @@ describe('Emergency mode test', () => { const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index b28966693..86b0daefa 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -10,46 +10,50 @@ describe('Global Exit Root', () => { let rollup; let PolygonZKEVMBridge; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; beforeEach('Deploy contracts', async () => { // load signers [, rollup, PolygonZKEVMBridge] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [rollup.address, PolygonZKEVMBridge.address]); - await globalExitRootManager.deployed(); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy( + PolygonZKEVMGlobalExitRootFactory, + [rollup.address, + PolygonZKEVMBridge.address], + ); + await polygonZKEVMGlobalExitRoot.deployed(); }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.rollupAddress()).to.be.equal(rollup.address); - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); - expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.rollupAddress()).to.be.equal(rollup.address); + expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check global exit root', async () => { const newRootRollup = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(globalExitRootManager.updateExitRoot(newRootRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(newRootRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // Update root from the rollup - await expect(globalExitRootManager.connect(rollup).updateExitRoot(newRootRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(newRootRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(zero32bytes, newRootRollup); - expect(await globalExitRootManager.getLastGlobalExitRoot()) + expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(zero32bytes, newRootRollup)); // Update root from the PolygonZKEVMBridge const newRootBridge = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(globalExitRootManager.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(newRootBridge, newRootRollup); - expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(newRootBridge); - expect(await globalExitRootManager.getLastGlobalExitRoot()) + expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(newRootBridge); + expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(newRootBridge, newRootRollup)); }); }); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index 537551f5a..9d28ac379 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -5,7 +5,7 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root L2', () => { let PolygonZKEVMBridge; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const PolygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { @@ -18,36 +18,36 @@ describe('Global Exit Root L2', () => { const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); PolygonZKEVMBridge = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); - globalExitRootManager = await globalExitRootManagerFactory.deploy(PolygonZKEVMBridge.address); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootL2Mock', deployer); + polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy(PolygonZKEVMBridge.address); - await PolygonZKEVMBridge.initialize(networkIDRollup, globalExitRootManager.address, PolygonZKEVMAddress); + await PolygonZKEVMBridge.initialize(networkIDRollup, polygonZKEVMGlobalExitRoot.address, PolygonZKEVMAddress); }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check the storage position matches', async () => { // Check global exit root const newRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); const blockNumber = 1; - await globalExitRootManager.setLastGlobalExitRoot(newRoot, blockNumber); - expect(await globalExitRootManager.globalExitRootMap(newRoot)).to.be.equal(blockNumber); + await polygonZKEVMGlobalExitRoot.setLastGlobalExitRoot(newRoot, blockNumber); + expect(await polygonZKEVMGlobalExitRoot.globalExitRootMap(newRoot)).to.be.equal(blockNumber); const mapStoragePosition = 0; const key = newRoot; const storagePosition = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [key, mapStoragePosition]); - const storageValue = await ethers.provider.getStorageAt(globalExitRootManager.address, storagePosition); + const storageValue = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePosition); expect(blockNumber).to.be.equal(ethers.BigNumber.from(storageValue).toNumber()); // Check rollup exit root const newRootRollupExitRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await globalExitRootManager.setExitRoot(newRootRollupExitRoot); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); + await polygonZKEVMGlobalExitRoot.setExitRoot(newRootRollupExitRoot); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); const storagePositionExitRoot = 1; - const storageValueExitRoot = await ethers.provider.getStorageAt(globalExitRootManager.address, storagePositionExitRoot); + const storageValueExitRoot = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePositionExitRoot); expect(newRootRollupExitRoot, storageValueExitRoot); }); }); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index abce35362..455e2e137 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -16,7 +16,7 @@ describe('Polygon ZK-EVM', () => { let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -53,8 +53,8 @@ describe('Polygon ZK-EVM', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); @@ -64,10 +64,10 @@ describe('Polygon ZK-EVM', () => { const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -90,7 +90,7 @@ describe('Polygon ZK-EVM', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMContract.matic()).to.be.equal(maticTokenContract.address); expect(await polygonZKEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(polygonZKEVMBridgeContract.address); @@ -326,7 +326,7 @@ describe('Polygon ZK-EVM', () => { it('sequenceBatches should sequence multiple batches and force batches', async () => { const l2txDataForceBatch = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -507,7 +507,7 @@ describe('Polygon ZK-EVM', () => { it('should force a batch of transactions', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); expect(maticAmount.toString()).to.be.equal((await polygonZKEVMContract.getCurrentBatchFee()).toString()); @@ -558,7 +558,7 @@ describe('Polygon ZK-EVM', () => { it('should sequence force batches using sequenceForceBatches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -735,7 +735,7 @@ describe('Polygon ZK-EVM', () => { it('should verify forced sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -875,7 +875,7 @@ describe('Polygon ZK-EVM', () => { it('should match the computed SC input with the Js input in force batches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index a9a32f969..bdafa216a 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -19,7 +19,7 @@ describe('Real flow test', () => { let maticTokenContract; let polygonZKEVMBridgeContract; let polygonZKEVMContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let deployer; let trustedSequencer; let trustedAggregator; @@ -77,13 +77,20 @@ describe('Real flow test', () => { polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootMock'); - globalExitRootManager = await globalExitRootManagerFactory.deploy(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy( + polygonZKEVMContract.address, + polygonZKEVMBridgeContract.address, + ); + await polygonZKEVMBridgeContract.initialize( + networkIDMainnet, + polygonZKEVMGlobalExitRoot.address, + polygonZKEVMContract.address, + ); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -144,7 +151,7 @@ describe('Real flow test', () => { // prapare globalExitRoot const randomTimestamp = 1001; const { globalExitRoot } = batchesData[0]; - await globalExitRootManager.setGlobalExitRoot(globalExitRoot, randomTimestamp); + await polygonZKEVMGlobalExitRoot.setGlobalExitRoot(globalExitRoot, randomTimestamp); const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced();