UNPKG

@aave/governance-crosschain-bridges

Version:
693 lines 53.2 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ArbitrumBridgeExecutor", "sourceName": "contracts/bridges/ArbitrumBridgeExecutor.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "ethereumGovernanceExecutor", "type": "address" }, { "internalType": "uint256", "name": "delay", "type": "uint256" }, { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" }, { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" }, { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" }, { "internalType": "address", "name": "guardian", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "DelayLongerThanMax", "type": "error" }, { "inputs": [], "name": "DelayShorterThanMin", "type": "error" }, { "inputs": [], "name": "DuplicateAction", "type": "error" }, { "inputs": [], "name": "EmptyTargets", "type": "error" }, { "inputs": [], "name": "FailedActionExecution", "type": "error" }, { "inputs": [], "name": "GracePeriodTooShort", "type": "error" }, { "inputs": [], "name": "InconsistentParamsLength", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidActionsSetId", "type": "error" }, { "inputs": [], "name": "InvalidInitParams", "type": "error" }, { "inputs": [], "name": "MaximumDelayTooShort", "type": "error" }, { "inputs": [], "name": "MinimumDelayTooLong", "type": "error" }, { "inputs": [], "name": "NotGuardian", "type": "error" }, { "inputs": [], "name": "OnlyCallableByThis", "type": "error" }, { "inputs": [], "name": "OnlyQueuedActions", "type": "error" }, { "inputs": [], "name": "TimelockNotFinished", "type": "error" }, { "inputs": [], "name": "UnauthorizedEthereumExecutor", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ActionsSetCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "initiatorExecution", "type": "address" }, { "indexed": false, "internalType": "bytes[]", "name": "returnedData", "type": "bytes[]" } ], "name": "ActionsSetExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "targets", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "indexed": false, "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "indexed": false, "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "indexed": false, "internalType": "uint256", "name": "executionTime", "type": "uint256" } ], "name": "ActionsSetQueued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "DelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldEthereumGovernanceExecutor", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newEthereumGovernanceExecutor", "type": "address" } ], "name": "EthereumGovernanceExecutorUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldGracePeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newGracePeriod", "type": "uint256" } ], "name": "GracePeriodUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldGuardian", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newGuardian", "type": "address" } ], "name": "GuardianUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMaximumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMaximumDelay", "type": "uint256" } ], "name": "MaximumDelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMinimumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMinimumDelay", "type": "uint256" } ], "name": "MinimumDelayUpdate", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "cancel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "executeDelegateCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getActionsSetById", "outputs": [ { "components": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "internalType": "uint256", "name": "executionTime", "type": "uint256" }, { "internalType": "bool", "name": "executed", "type": "bool" }, { "internalType": "bool", "name": "canceled", "type": "bool" } ], "internalType": "struct IExecutorBase.ActionsSet", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActionsSetCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getCurrentState", "outputs": [ { "internalType": "enum IExecutorBase.ActionsSetState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEthereumGovernanceExecutor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGracePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGuardian", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaximumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "actionHash", "type": "bytes32" } ], "name": "isActionQueued", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" } ], "name": "queue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "receiveFunds", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "updateDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "ethereumGovernanceExecutor", "type": "address" } ], "name": "updateEthereumGovernanceExecutor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" } ], "name": "updateGracePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "guardian", "type": "address" } ], "name": "updateGuardian", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" } ], "name": "updateMaximumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" } ], "name": "updateMinimumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b50604051620026bb380380620026bb83398101604081905262000034916200027e565b8585858585858484848484610258841080620000505750818310155b806200005b57508285105b806200006657508185115b156200008557604051630a5addd160e21b815260040160405180910390fd5b6200009085620000f4565b6200009b8462000135565b620000a68362000176565b620000b182620001b7565b620000bc81620001f8565b5050600880546001600160a01b0319166001600160a01b039a909a169990991790985550620002db9c50505050505050505050505050565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200027957600080fd5b919050565b60008060008060008060c087890312156200029857600080fd5b620002a38762000261565b955060208701519450604087015193506060870151925060808701519150620002cf60a0880162000261565b90509295509295509295565b6123d080620002eb6000396000f3fe6080604052600436106101295760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf1461031e578063dbd183881461033e578063e471b02614610353578063e68a5c3d14610373578063fc52539514610393578063fe0d94c1146103b357600080fd5b8063b3c82e9214610288578063b68df16d146102b5578063c3a76886146102d6578063cebc9a82146102f4578063d89aac391461030957600080fd5b80635ab98d5a116100f25780635ab98d5a146101c157806364d62353146101e15780638533f33714610201578063a75b87d214610216578063b1fc87961461024857600080fd5b80625c33e11461012e57806303c2762114610130578063083a73a21461015457806340e58ee5146101745780635748c13014610194575b600080fd5b005b34801561013c57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061012e61016f3660046119a8565b6103c6565b34801561018057600080fd5b5061012e61018f3660046119a8565b61041f565b3480156101a057600080fd5b506101b46101af3660046119a8565b6106ca565b60405161014b91906119d7565b3480156101cd57600080fd5b5061012e6101dc3660046119a8565b610760565b3480156101ed57600080fd5b5061012e6101fc3660046119a8565b6107ac565b34801561020d57600080fd5b50600554610141565b34801561022257600080fd5b506004546001600160a01b03165b6040516001600160a01b03909116815260200161014b565b34801561025457600080fd5b506102786102633660046119a8565b60009081526007602052604090205460ff1690565b604051901515815260200161014b565b34801561029457600080fd5b506102a86102a33660046119a8565b6107de565b60405161014b9190611b56565b6102c86102c3366004611c3e565b610b51565b60405161014b929190611cc1565b3480156102e257600080fd5b506008546001600160a01b0316610230565b34801561030057600080fd5b50600054610141565b34801561031557600080fd5b50600354610141565b34801561032a57600080fd5b5061012e610339366004612019565b610be2565b34801561034a57600080fd5b50600154610141565b34801561035f57600080fd5b5061012e61036e3660046119a8565b610c41565b34801561037f57600080fd5b5061012e61038e3660046120eb565b610c8c565b34801561039f57600080fd5b5061012e6103ae3660046120eb565b610d15565b61012e6103c13660046119a8565b610d3e565b3330146103e657604051631dbf5f2360e01b815260040160405180910390fd5b60025481116104085760405163cb2f2b2360e01b815260040160405180910390fd5b61041181611066565b61041c6000546110a7565b50565b6004546001600160a01b0316331461044a576040516377b6878160e11b815260040160405180910390fd5b6000610455826106ca565b6003811115610466576104666119c1565b146104845760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b81811015610699576106918360000182815481106104c9576104c961210d565b6000918252602090912001546001850180546001600160a01b0390921691849081106104f7576104f761210d565b90600052602060002001548560020184815481106105175761051761210d565b90600052602060002001805461052c90612123565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612123565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b50505050508660030185815481106105bf576105bf61210d565b9060005260206000200180546105d490612123565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612123565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050876005015488600401878154811061066c5761066c61210d565b90600052602060002090602091828204019190069054906101000a900460ff166110ed565b6001016104a9565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106ee5760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156107195750600292915050565b600681015460ff161561072f5750600192915050565b60015481600501546107419190612158565b4211156107515750600392915050565b50600092915050565b50919050565b33301461078057604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107a3576040516301f6f9e560e71b815260040160405180910390fd5b61041c8161113f565b3330146107cc57604051631dbf5f2360e01b815260040160405180910390fd5b6107d5816110a7565b61041c81611180565b61082a6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561089657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610878575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109c857838290600052602060002001805461093b90612123565b80601f016020809104026020016040519081016040528092919081815260200182805461096790612123565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b50505050508152602001906001019061091c565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610aa1578382906000526020600020018054610a1490612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4090612123565b8015610a8d5780601f10610a6257610100808354040283529160200191610a8d565b820191906000526020600020905b815481529060010190602001808311610a7057829003601f168201915b5050505050815260200190600101906109f5565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610ae75790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b7557604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b9392919061217e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b50909890975095505050505050565b6008546001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b031614610c2d576040516359e8359960e01b815260040160405180910390fd5b610c3a85858585856111c1565b5050505050565b333014610c6157604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610c83576040516301b1029b60e61b815260040160405180910390fd5b6104118161142e565b333014610cac57604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610d3557604051631dbf5f2360e01b815260040160405180910390fd5b61041c8161146f565b6000610d49826106ca565b6003811115610d5a57610d5a6119c1565b14610d785760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610dab57604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610dd757610dd7611ce4565b604051908082528060200260200182016040528015610e0a57816020015b6060815260200190600190039081610df55790505b50905060005b8281101561101d57610ff8846000018281548110610e3057610e3061210d565b6000918252602090912001546001860180546001600160a01b039092169184908110610e5e57610e5e61210d565b9060005260206000200154866002018481548110610e7e57610e7e61210d565b906000526020600020018054610e9390612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebf90612123565b8015610f0c5780601f10610ee157610100808354040283529160200191610f0c565b820191906000526020600020905b815481529060010190602001808311610eef57829003601f168201915b5050505050876003018581548110610f2657610f2661210d565b906000526020600020018054610f3b90612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6790612123565b8015610fb45780601f10610f8957610100808354040283529160200191610fb4565b820191906000526020600020905b815481529060010190602001808311610f9757829003601f168201915b50505050508860050154896004018781548110610fd357610fd361210d565b90600052602060002090602091828204019190069054906101000a900460ff166114d8565b82828151811061100a5761100a61210d565b6020908102919091010152600101610e10565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051611058919061218e565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156110ca576040516361759e6560e01b815260040160405180910390fd5b60035481111561041c576040516386dac63560e01b815260040160405180910390fd5b600086868686868660405160200161110a969594939291906121a1565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516111e057604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806111f3575083518114155b806111ff575082518114155b8061120b575081518114155b1561122957604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461123a9042612158565b600580546001019055905060005b8381101561135b5760008982815181106112645761126461210d565b602002602001015189838151811061127e5761127e61210d565b60200260200101518984815181106112985761129861210d565b60200260200101518985815181106112b2576112b261210d565b6020026020010151868a87815181106112cd576112cd61210d565b60200260200101516040516020016112ea969594939291906121a1565b60405160208183030381529060405280519060200120905061131b8160009081526007602052604090205460ff1690565b1561133957604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611248565b5060008281526006602090815260409091208951909161137f9183918c01906116be565b50875161139590600183019060208b0190611723565b5086516113ab90600283019060208a019061175e565b5085516113c190600383019060208901906117b7565b5084516113d79060048301906020880190611810565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a8860405161141b969594939291906121f5565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156114fb57604051631e9acf1760e31b815260040160405180910390fd5b6000878787878787604051602001611518969594939291906121a1565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611557575084611583565b86805190602001208660405160200161157192919061229c565b60405160208183030381529060405290505b6000606085156116055760405163b68df16d60e01b8152309063b68df16d908c906115b4908f9088906004016122cd565b60006040518083038185885af11580156115d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526115fb91908101906122f1565b9092509050611667565b8a6001600160a01b03168a8460405161161e919061237e565b60006040518083038185875af1925050503d806000811461165b576040519150601f19603f3d011682016040523d82523d6000602084013e611660565b606091505b5090925090505b6116718282611680565b9b9a5050505050505050505050565b6060821561168f5750806116b8565b81511561169f5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b828054828255906000526020600020908101928215611713579160200282015b8281111561171357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116de565b5061171f9291506118ac565b5090565b828054828255906000526020600020908101928215611713579160200282015b82811115611713578251825591602001919060010190611743565b8280548282559060005260206000209081019282156117ab579160200282015b828111156117ab578251805161179b9184916020909101906118c1565b509160200191906001019061177e565b5061171f929150611934565b828054828255906000526020600020908101928215611804579160200282015b8281111561180457825180516117f49184916020909101906118c1565b50916020019190600101906117d7565b5061171f929150611951565b82805482825590600052602060002090601f016020900481019282156117135791602002820160005b8382111561187657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611839565b80156118a35782816101000a81549060ff0219169055600101602081600001049283019260010302611876565b505061171f9291505b5b8082111561171f57600081556001016118ad565b8280546118cd90612123565b90600052602060002090601f0160209004810192826118ef5760008555611713565b82601f1061190857805160ff1916838001178555611713565b828001600101855582156117135791820182811115611713578251825591602001919060010190611743565b8082111561171f576000611948828261196e565b50600101611934565b8082111561171f576000611965828261196e565b50600101611951565b50805461197a90612123565b6000825580601f1061198a575050565b601f01602090049060005260206000209081019061041c91906118ac565b6000602082840312156119ba57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106119f957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611a385781516001600160a01b031687529582019590820190600101611a13565b509495945050505050565b600081518084526020808501945080840160005b83811015611a3857815187529582019590820190600101611a57565b60005b83811015611a8e578181015183820152602001611a76565b83811115611a9d576000848401525b50505050565b60008151808452611abb816020860160208601611a73565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b17578284038952611b05848351611aa3565b98850198935090840190600101611aed565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611a38578151151587529582019590820190600101611b38565b6020815260008251610100806020850152611b756101208501836119ff565b91506020850151601f1980868503016040870152611b938483611a43565b93506040870151915080868503016060870152611bb08483611acf565b93506060870151915080868503016080870152611bcd8483611acf565b935060808701519150808685030160a087015250611beb8382611b24565b92505060a085015160c085015260c0850151611c0b60e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611c3957600080fd5b919050565b600080600060408486031215611c5357600080fd5b611c5c84611c22565b9250602084013567ffffffffffffffff80821115611c7957600080fd5b818601915086601f830112611c8d57600080fd5b813581811115611c9c57600080fd5b876020828501011115611cae57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611cdc6040830184611aa3565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d2357611d23611ce4565b604052919050565b600067ffffffffffffffff821115611d4557611d45611ce4565b5060051b60200190565b600082601f830112611d6057600080fd5b81356020611d75611d7083611d2b565b611cfa565b82815260059290921b84018101918181019086841115611d9457600080fd5b8286015b84811015611db657611da981611c22565b8352918301918301611d98565b509695505050505050565b600082601f830112611dd257600080fd5b81356020611de2611d7083611d2b565b82815260059290921b84018101918181019086841115611e0157600080fd5b8286015b84811015611db65780358352918301918301611e05565b600067ffffffffffffffff821115611e3657611e36611ce4565b50601f01601f191660200190565b6000611e52611d7084611e1c565b9050828152838383011115611e6657600080fd5b828260208301376000602084830101529392505050565b600082601f830112611e8e57600080fd5b81356020611e9e611d7083611d2b565b82815260059290921b84018101918181019086841115611ebd57600080fd5b8286015b84811015611db657803567ffffffffffffffff811115611ee15760008081fd5b8701603f81018913611ef35760008081fd5b611f04898683013560408401611e44565b845250918301918301611ec1565b600082601f830112611f2357600080fd5b81356020611f33611d7083611d2b565b82815260059290921b84018101918181019086841115611f5257600080fd5b8286015b84811015611db657803567ffffffffffffffff811115611f765760008081fd5b8701603f81018913611f885760008081fd5b611f99898683013560408401611e44565b845250918301918301611f56565b801515811461041c57600080fd5b600082601f830112611fc657600080fd5b81356020611fd6611d7083611d2b565b82815260059290921b84018101918181019086841115611ff557600080fd5b8286015b84811015611db657803561200c81611fa7565b8352918301918301611ff9565b600080600080600060a0868803121561203157600080fd5b853567ffffffffffffffff8082111561204957600080fd5b61205589838a01611d4f565b9650602088013591508082111561206b57600080fd5b61207789838a01611dc1565b9550604088013591508082111561208d57600080fd5b61209989838a01611e7d565b945060608801359150808211156120af57600080fd5b6120bb89838a01611f12565b935060808801359150808211156120d157600080fd5b506120de88828901611fb5565b9150509295509295909350565b6000602082840312156120fd57600080fd5b61210682611c22565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061213757607f821691505b6020821081141561075a57634e487b7160e01b600052602260045260246000fd5b6000821982111561217957634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b6020815260006121066020830184611acf565b60018060a01b038716815285602082015260c0604082015260006121c860c0830187611aa3565b82810360608401526121da8187611aa3565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156122375781516001600160a01b031684529284019290840190600101612212565b5050508381038285015261224b818a611a43565b91505082810360408401526122608188611acf565b905082810360608401526122748187611acf565b905082810360808401526122888186611b24565b9150508260a0830152979650505050505050565b6001600160e01b03198316815281516000906122bf816004850160208701611a73565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611cdc90830184611aa3565b6000806040838503121561230457600080fd5b825161230f81611fa7565b602084015190925067ffffffffffffffff81111561232c57600080fd5b8301601f8101851361233d57600080fd5b805161234b611d7082611e1c565b81815286602083850101111561236057600080fd5b612371826020830160208601611a73565b8093505050509250929050565b60008251612390818460208701611a73565b919091019291505056fea2646970667358221220735941bafe1f0c626fc47d5a8c5c5f6c3e6d17138c6cee4b87d59c794d3fda2d64736f6c634300080a0033", "deployedBytecode": "0x6080604052600436106101295760003560e01c8063b3c82e92116100ab578063d9a4cbdf1161006f578063d9a4cbdf1461031e578063dbd183881461033e578063e471b02614610353578063e68a5c3d14610373578063fc52539514610393578063fe0d94c1146103b357600080fd5b8063b3c82e9214610288578063b68df16d146102b5578063c3a76886146102d6578063cebc9a82146102f4578063d89aac391461030957600080fd5b80635ab98d5a116100f25780635ab98d5a146101c157806364d62353146101e15780638533f33714610201578063a75b87d214610216578063b1fc87961461024857600080fd5b80625c33e11461012e57806303c2762114610130578063083a73a21461015457806340e58ee5146101745780635748c13014610194575b600080fd5b005b34801561013c57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061012e61016f3660046119a8565b6103c6565b34801561018057600080fd5b5061012e61018f3660046119a8565b61041f565b3480156101a057600080fd5b506101b46101af3660046119a8565b6106ca565b60405161014b91906119d7565b3480156101cd57600080fd5b5061012e6101dc3660046119a8565b610760565b3480156101ed57600080fd5b5061012e6101fc3660046119a8565b6107ac565b34801561020d57600080fd5b50600554610141565b34801561022257600080fd5b506004546001600160a01b03165b6040516001600160a01b03909116815260200161014b565b34801561025457600080fd5b506102786102633660046119a8565b60009081526007602052604090205460ff1690565b604051901515815260200161014b565b34801561029457600080fd5b506102a86102a33660046119a8565b6107de565b60405161014b9190611b56565b6102c86102c3366004611c3e565b610b51565b60405161014b929190611cc1565b3480156102e257600080fd5b506008546001600160a01b0316610230565b34801561030057600080fd5b50600054610141565b34801561031557600080fd5b50600354610141565b34801561032a57600080fd5b5061012e610339366004612019565b610be2565b34801561034a57600080fd5b50600154610141565b34801561035f57600080fd5b5061012e61036e3660046119a8565b610c41565b34801561037f57600080fd5b5061012e61038e3660046120eb565b610c8c565b34801561039f57600080fd5b5061012e6103ae3660046120eb565b610d15565b61012e6103c13660046119a8565b610d3e565b3330146103e657604051631dbf5f2360e01b815260040160405180910390fd5b60025481116104085760405163cb2f2b2360e01b815260040160405180910390fd5b61041181611066565b61041c6000546110a7565b50565b6004546001600160a01b0316331461044a576040516377b6878160e11b815260040160405180910390fd5b6000610455826106ca565b6003811115610466576104666119c1565b146104845760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b81811015610699576106918360000182815481106104c9576104c961210d565b6000918252602090912001546001850180546001600160a01b0390921691849081106104f7576104f761210d565b90600052602060002001548560020184815481106105175761051761210d565b90600052602060002001805461052c90612123565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612123565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b50505050508660030185815481106105bf576105bf61210d565b9060005260206000200180546105d490612123565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612123565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050876005015488600401878154811061066c5761066c61210d565b90600052602060002090602091828204019190069054906101000a900460ff166110ed565b6001016104a9565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106ee5760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156107195750600292915050565b600681015460ff161561072f5750600192915050565b60015481600501546107419190612158565b4211156107515750600392915050565b50600092915050565b50919050565b33301461078057604051631dbf5f2360e01b815260040160405180910390fd5b6102588110156107a3576040516301f6f9e560e71b815260040160405180910390fd5b61041c8161113f565b3330146107cc57604051631dbf5f2360e01b815260040160405180910390fd5b6107d5816110a7565b61041c81611180565b61082a6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561089657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610878575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109c857838290600052602060002001805461093b90612123565b80601f016020809104026020016040519081016040528092919081815260200182805461096790612123565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b50505050508152602001906001019061091c565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610aa1578382906000526020600020018054610a1490612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4090612123565b8015610a8d5780601f10610a6257610100808354040283529160200191610a8d565b820191906000526020600020905b815481529060010190602001808311610a7057829003601f168201915b5050505050815260200190600101906109f5565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610ae75790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b7557604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b9392919061217e565b600060405180830381855af49150503d8060008114610bce576040519150601f19603f3d011682016040523d82523d6000602084013e610bd3565b606091505b50909890975095505050505050565b6008546001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b031614610c2d576040516359e8359960e01b815260040160405180910390fd5b610c3a85858585856111c1565b5050505050565b333014610c6157604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610c83576040516301b1029b60e61b815260040160405180910390fd5b6104118161142e565b333014610cac57604051631dbf5f2360e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291831660208301527f01dd0ca50426f21c1b37ce7f3e95eef45b4a55bc5da80a7b67b2c65a7463caf0910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b333014610d3557604051631dbf5f2360e01b815260040160405180910390fd5b61041c8161146f565b6000610d49826106ca565b6003811115610d5a57610d5a6119c1565b14610d785760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610dab57604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610dd757610dd7611ce4565b604051908082528060200260200182016040528015610e0a57816020015b6060815260200190600190039081610df55790505b50905060005b8281101561101d57610ff8846000018281548110610e3057610e3061210d565b6000918252602090912001546001860180546001600160a01b039092169184908110610e5e57610e5e61210d565b9060005260206000200154866002018481548110610e7e57610e7e61210d565b906000526020600020018054610e9390612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebf90612123565b8015610f0c5780601f10610ee157610100808354040283529160200191610f0c565b820191906000526020600020905b815481529060010190602001808311610eef57829003601f168201915b5050505050876003018581548110610f2657610f2661210d565b906000526020600020018054610f3b90612123565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6790612123565b8015610fb45780601f10610f8957610100808354040283529160200191610fb4565b820191906000526020600020905b815481529060010190602001808311610f9757829003601f168201915b50505050508860050154896004018781548110610fd357610fd361210d565b90600052602060002090602091828204019190069054906101000a900460ff166114d8565b82828151811061100a5761100a61210d565b6020908102919091010152600101610e10565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051611058919061218e565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b6002548110156110ca576040516361759e6560e01b815260040160405180910390fd5b60035481111561041c576040516386dac63560e01b815260040160405180910390fd5b600086868686868660405160200161110a969594939291906121a1565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516111e057604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806111f3575083518114155b806111ff575082518114155b8061120b575081518114155b1561122957604051630d10f63b60e01b815260040160405180910390fd5b6005546000805461123a9042612158565b600580546001019055905060005b8381101561135b5760008982815181106112645761126461210d565b602002602001015189838151811061127e5761127e61210d565b60200260200101518984815181106112985761129861210d565b60200260200101518985815181106112b2576112b261210d565b6020026020010151868a87815181106112cd576112cd61210d565b60200260200101516040516020016112ea969594939291906121a1565b60405160208183030381529060405280519060200120905061131b8160009081526007602052604090205460ff1690565b1561133957604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611248565b5060008281526006602090815260409091208951909161137f9183918c01906116be565b50875161139590600183019060208b0190611723565b5086516113ab90600283019060208a019061175e565b5085516113c190600383019060208901906117b7565b5084516113d79060048301906020880190611810565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a8860405161141b969594939291906121f5565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156114fb57604051631e9acf1760e31b815260040160405180910390fd5b6000878787878787604051602001611518969594939291906121a1565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611557575084611583565b86805190602001208660405160200161157192919061229c565b60405160208183030381529060405290505b6000606085156116055760405163b68df16d60e01b8152309063b68df16d908c906115b4908f9088906004016122cd565b60006040518083038185885af11580156115d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526115fb91908101906122f1565b9092509050611667565b8a6001600160a01b03168a8460405161161e919061237e565b60006040518083038185875af1925050503d806000811461165b576040519150601f19603f3d011682016040523d82523d6000602084013e611660565b606091505b5090925090505b6116718282611680565b9b9a5050505050505050505050565b6060821561168f5750806116b8565b81511561169f5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b828054828255906000526020600020908101928215611713579160200282015b8281111561171357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116de565b5061171f9291506118ac565b5090565b828054828255906000526020600020908101928215611713579160200282015b82811115611713578251825591602001919060010190611743565b8280548282559060005260206000209081019282156117ab579160200282015b828111156117ab578251805161179b9184916020909101906118c1565b509160200191906001019061177e565b5061171f929150611934565b828054828255906000526020600020908101928215611804579160200282015b8281111561180457825180516117f49184916020909101906118c1565b50916020019190600101906117d7565b5061171f929150611951565b82805482825590600052602060002090601f016020900481019282156117135791602002820160005b8382111561187657835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611839565b80156118a35782816101000a81549060ff0219169055600101602081600001049283019260010302611876565b505061171f9291505b5b8082111561171f57600081556001016118ad565b8280546118cd90612123565b90600052602060002090601f0160209004810192826118ef5760008555611713565b82601f1061190857805160ff1916838001178555611713565b828001600101855582156117135791820182811115611713578251825591602001919060010190611743565b8082111561171f576000611948828261196e565b50600101611934565b8082111561171f576000611965828261196e565b50600101611951565b50805461197a90612123565b6000825580601f1061198a575050565b601f01602090049060005260206000209081019061041c91906118ac565b6000602082840312156119ba57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106119f957634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b83811015611a385781516001600160a01b031687529582019590820190600101611a13565b509495945050505050565b600081518084526020808501945080840160005b83811015611a3857815187529582019590820190600101611a57565b60005b83811015611a8e578181015183820152602001611a76565b83811115611a9d576000848401525b50505050565b60008151808452611abb816020860160208601611a73565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611b17578284038952611b05848351611aa3565b98850198935090840190600101611aed565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611a38578151151587529582019590820190600101611b38565b6020815260008251610100806020850152611b756101208501836119ff565b91506020850151601f1980868503016040870152611b938483611a43565b93506040870151915080868503016060870152611bb08483611acf565b93506060870151915080868503016080870152611bcd8483611acf565b935060808701519150808685030160a087015250611beb8382611b24565b92505060a085015160c085015260c0850151611c0b60e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611c3957600080fd5b919050565b600080600060408486031215611c5357600080fd5b611c5c84611c22565b9250602084013567ffffffffffffffff80821115611c7957600080fd5b818601915086601f830112611c8d57600080fd5b813581811115611c9c57600080fd5b876020828501011115611cae57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611cdc6040830184611aa3565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d2357611d23611ce4565b604052919050565b600067ffffffffffffffff821115611d4557611d45611ce4565b5060051b60200190565b600082601f830112611d6057600080fd5b81356020611d75611d7083611d2b565b611cfa565b82815260059290921b84018101918181019086841115611d9457600080fd5b8286015b84811015611db657611da981611c22565b8352918301918301611d98565