[ { "inputs": [ { "internalType": "address", "name": "storage_", "type": "address" }, { "internalType": "address", "name": "validator", "type": "address" }, { "internalType": "bytes3", "name": "ticker_", "type": "bytes3" }, { "internalType": "address", "name": "frontend_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AdminAccountAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AdminAccountRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "frontend", "type": "address" }, { "indexed": true, "internalType": "string", "name": "title", "type": "string" } ], "name": "BridgeFrontend", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "frontend", "type": "address" } ], "name": "BridgeFrontendRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "old", "type": "address" }, { "indexed": true, "internalType": "address", "name": "current", "type": "address" } ], "name": "Frontend", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MaxMintAllowance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MintAllowance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" } ], "name": "OwnershipRenounced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousPendingOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newPendingOwner", "type": "address" } ], "name": "OwnershipTransferPending", "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": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "old", "type": "address" }, { "indexed": true, "internalType": "address", "name": "current", "type": "address" } ], "name": "Storage", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "SystemAccountAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "SystemAccountRemoved", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIAL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SYSTEM_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addAdminAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addSystemAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve_withCaller", "outputs": [ { "internalType": "bool", "name": "ok", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "who", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "h", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "burnFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "h", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "burnFrom_withCaller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimStorageOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFrontend", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxMintAllowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getMintAllowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "getPermitDigest", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStorage", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getValidator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdminAccount", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "frontend_", "type": "address" } ], "name": "isFrontend", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isSystemAccount", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintTo_withCaller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "h", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "recover_withCaller", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeAdminAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "frontend_", "type": "address" } ], "name": "removeBridgeFrontend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeSystemAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "frontend_", "type": "address" }, { "internalType": "string", "name": "title", "type": "string" } ], "name": "setBridgeFrontend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "frontend_", "type": "address" } ], "name": "setFrontend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setMaxMintAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setMintAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "storage_", "type": "address" } ], "name": "setStorage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "validator", "type": "address" } ], "name": "setValidator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ticker", "outputs": [ { "internalType": "bytes3", "name": "", "type": "bytes3" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "transferAndCall_withCaller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom_withCaller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferStorageOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer_withCaller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60c06040526006805460ff191660121790553480156200001e57600080fd5b50604051620043543803806200435483398101604081905262000041916200048e565b600180546001600160a01b03191633179055836000828282826001600160a01b03831615806200006f575081155b620000e75760405162461bcd60e51b815260206004820152603f60248201527f656974686572206120746f6b656e2073746f72616765206d757374206265206960448201527f6e697469616c697a6564206f72206e6f20696e697469616c20737570706c790060648201526084015b60405180910390fd5b6001600160a01b0383166200019e57604051620001049062000463565b604051809103906000f08015801562000121573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040516310f29c1d60e11b8152336004820152602481018490526321e5383a90604401600060405180830381600087803b1580156200017f57600080fd5b505af115801562000194573d6000803e3d6000fd5b50505050620001ba565b600380546001600160a01b0319166001600160a01b0385161790555b600480546001600160a01b0319166001600160a01b03831617905546608052620002a2604080518082018252601281527139ba30b73230b93221b7b73a3937b63632b960711b60209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fe5448f65bca72ba1b802be60235c06fea7a9898bd3b218fd4783069ca85a96e4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b60a05250620002b791506000905033620003b3565b5050506001600160a01b0383166200031e5760405162461bcd60e51b8152602060048201526024808201527f76616c696461746f722063616e6e6f7420626520746865206e756c6c206164646044820152637265737360e01b6064820152608401620000de565b60405163ad41534960e01b8152600a60048201526001600160a01b0384166024820152739b3de470c7ac319fd7f75f7e9e75f0debc768b229063ad4153499060440160006040518083038186803b1580156200037957600080fd5b505af41580156200038e573d6000803e3d6000fd5b5050600b805462ffffff191660e89590951c9490941790935550620004fa9350505050565b620003bf8282620003c3565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620003bf576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200041f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b17806200383d83390190565b80516001600160a01b03811681146200048957600080fd5b919050565b60008060008060808587031215620004a557600080fd5b620004b08562000471565b9350620004c06020860162000471565b60408601519093506001600160e81b031981168114620004df57600080fd5b9150620004ef6060860162000471565b905092959194509250565b60805160a05161331d620005206000396000610f5101526000610e58015261331d6000f3fe608060405234801561001057600080fd5b506004361061034b5760003560e01c806375b238fc116101bd578063b516af70116100f9578063e974fee9116100a2578063ef31f7aa1161007c578063ef31f7aa1461076b578063f27c5f6e1461077e578063f2fde38b14610791578063fd2319c4146107a457600080fd5b8063e974fee914610732578063ebbc3d4614610745578063ee0b54451461075857600080fd5b8063dd62ed3e116100d3578063dd62ed3e146106f9578063e174fd941461070c578063e30c39781461071f57600080fd5b8063b516af70146106cb578063d505accf146106d3578063d547741f146106e657600080fd5b80638fb81d98116101665780639e7f43ca116101405780639e7f43ca1461069d5780639ea33e19146106b0578063a217fddf1461042c578063a84c56d0146106b857600080fd5b80638fb81d98146106405780639137c1a71461065357806391d148541461066657600080fd5b8063802d441f11610197578063802d441f146105dc5780638ba47bdd146105ef5780638da5cb5b1461062d57600080fd5b806375b238fc14610582578063774d5409146105a95780637ecebe00146105bc57600080fd5b8063329e05871161028c5780634e71e0c81161023557806367a89a721161020f57806367a89a721461052257806369569a511461053557806370a082311461054857806375071d2a1461055b57600080fd5b80634e71e0c8146104f45780634eb00754146104fc5780634fe57e7a1461050f57600080fd5b806336568abe1161026657806336568abe146104a55780633cd1570f146104b85780634a36703b146104cb57600080fd5b8063329e0587146104795780633408f73a1461048c5780633644e5151461049d57600080fd5b806325ec2eb0116102f95780632ff2e9dc116102d35780632ff2e9dc1461042c578063313ce56714610434578063322ec0fb14610453578063326ecb051461046657600080fd5b806325ec2eb0146103f35780632c19e8b5146104065780632f2ff15d1461041957600080fd5b80631327d3d81161032a5780631327d3d8146103a557806318160ddd146103ba578063248a9ca3146103d057600080fd5b80623074ff1461035057806301ffc9a71461037a5780631195e07e1461039d575b600080fd5b6004546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b61038d610388366004612b8b565b6107b7565b6040519015158152602001610371565b61035d610850565b6103b86103b3366004612be2565b6108e5565b005b6103c261098a565b604051908152602001610371565b6103c26103de366004612bff565b60009081526020819052604090206001015490565b61038d610401366004612be2565b610a11565b6103c2610414366004612c18565b610a4a565b6103b8610427366004612c69565b610b0e565b6103c2600081565b6006546104419060ff1681565b60405160ff9091168152602001610371565b61038d610461366004612c99565b610b38565b61038d610474366004612be2565b610dd4565b61038d610487366004612be2565b610e14565b6003546001600160a01b031661035d565b6103c2610e54565b6103b86104b3366004612c69565b610f73565b6103c26104c6366004612cf0565b610fff565b6103c26104d9366004612be2565b6001600160a01b031660009081526008602052604090205490565b6103b861118c565b61038d61050a366004612d67565b611221565b6103b861051d366004612be2565b6112c1565b6103b8610530366004612be2565b611339565b6103b8610543366004612be2565b6113b1565b6103c2610556366004612be2565b611424565b6103c27f5719df9ef2c4678b547f89e4f5ae410dbf400fc51cf3ded434c55f6adea2c43f81565b6103c27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61038d6105b7366004612c99565b6114ac565b6103c26105ca366004612be2565b60076020526000908152604090205481565b6103b86105ea366004612be2565b611560565b600b546105fc9060e81b81565b6040517fffffff00000000000000000000000000000000000000000000000000000000009091168152602001610371565b60015461035d906001600160a01b031681565b6103b861064e366004612e02565b6115c0565b6103b8610661366004612be2565b61164a565b61038d610674366004612c69565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61038d6106ab366004612e57565b6116bd565b6009546103c2565b6103b86106c6366004612be2565b6117db565b6103b8611853565b6103b86106e1366004612d67565b6118d4565b6103b86106f4366004612c69565b611b60565b6103c2610707366004612eca565b611b85565b61038d61071a366004612c99565b611c38565b60025461035d906001600160a01b031681565b61038d610740366004612ef8565b611d24565b6103b8610753366004612be2565b611e1a565b6103b8610766366004612be2565b611e92565b61038d610779366004612f5f565b611f1d565b6103b861078c366004613036565b6121d0565b6103b861079f366004612be2565b612345565b6103b86107b2366004612bff565b6123b8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061084a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f6271970c000000000000000000000000000000000000000000000000000000008152600a6004820152600090739b3de470c7ac319fd7f75f7e9e75f0debc768b2290636271970c90602401602060405180830381865af41580156108bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e09190613062565b905090565b6001546001600160a01b031633146108fc57600080fd5b6040517fad415349000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b0382166024820152739b3de470c7ac319fd7f75f7e9e75f0debc768b229063ad4153499060440160006040518083038186803b15801561096f57600080fd5b505af4158015610983573d6000803e3d6000fd5b5050505050565b600354604080517f6c9c2faf00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691636c9c2faf9160048083019260209291908290030181865afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e0919061307f565b6004546000906001600160a01b038381169116148061084a5750506001600160a01b031660009081526005602052604090205460ff1690565b6000610a54610e54565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808a169282019290925290871660608201526080810186905260a0810185905260c0810184905260e00160405160208183030381529060405280519060200120604051602001610aed92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905095945050505050565b600082815260208190526040902060010154610b2981612407565b610b338383612414565b505050565b6000610b4333610a11565b610b4c57600080fd5b6001600160a01b03841660009081527f1feb9b335997de56b08b04054f0301e3df87667f2dfed59b0299f6d9a067ecbe60205260409020548490839060ff16610c025760405162461bcd60e51b815260206004820152603260248201527f4d696e7461626c65436f6e74726f6c6c65723a2063616c6c6572206973206e6f60448201527f7420612073797374656d206163636f756e74000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600090815260086020526040902054811115610c92576040805162461bcd60e51b81526020600482015260248101919091527f4d696e7461626c65436f6e74726f6c6c65723a2063616c6c6572206973206e6f60448201527f7420616c6c6f77656420746f20706572666f726d207468697320616374696f6e6064820152608401610bf9565b610c9b856124b2565b6001600160a01b038616600090815260086020526040902054610cbf9085906130ae565b6001600160a01b03878116600090815260086020526040908190209290925560035491517fb0c29c740000000000000000000000000000000000000000000000000000000081529181166004830152861660248201526044810185905273cf487efd00b70eac8c28c654356fb0e387e66d629063b0c29c7490606401602060405180830381865af4158015610d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7c91906130c5565b610dc85760405162461bcd60e51b815260206004820152601f60248201527f4d696e7461626c65436f6e74726f6c6c65723a206d696e74206661696c6564006044820152606401610bf9565b50600195945050505050565b6001600160a01b03811660009081527f1feb9b335997de56b08b04054f0301e3df87667f2dfed59b0299f6d9a067ecbe602052604081205460ff1661084a565b6001600160a01b03811660009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604081205460ff1661084a565b60007f00000000000000000000000000000000000000000000000000000000000000004614610f4e5750604080518082018252601281527f7374616e64617264436f6e74726f6c6c6572000000000000000000000000000060209182015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fe5448f65bca72ba1b802be60235c06fea7a9898bd3b218fd4783069ca85a96e4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0381163314610ff15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610bf9565b610ffb8282612673565b5050565b600061100a33610a11565b61101357600080fd5b6001600160a01b03881660009081527f1feb9b335997de56b08b04054f0301e3df87667f2dfed59b0299f6d9a067ecbe6020526040902054889060ff166110af5760405162461bcd60e51b815260206004820152602a60248201527f53797374656d526f6c653a2063616c6c6572206973206e6f7420612073797374604482015269195b481858d8dbdd5b9d60b21b6064820152608401610bf9565b6110b8876124b2565b6003546040517f8f7227340000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152898216602482015290881660448201526064810187905260ff8616608482015260a4810185905260c48101849052739b3de470c7ac319fd7f75f7e9e75f0debc768b2290638f7227349060e401602060405180830381865af415801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f919061307f565b9998505050505050505050565b6002546001600160a01b031633146111a357600080fd5b6002546001546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600254600180546001600160a01b0319166001600160a01b03909216918217905561120f906000906126f2565b600280546001600160a01b0319169055565b600061122c33610a11565b61123557600080fd5b6001600160a01b03881630146112b35760405162461bcd60e51b815260206004820152602960248201527f6f6e6c7920616c6c6f77207468697320636f6e747261637420746f206265207460448201527f68652063616c6c657200000000000000000000000000000000000000000000006064820152608401610bf9565b506001979650505050505050565b6001546001600160a01b031633146112d857600080fd5b6113027fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582610b0e565b6040516001600160a01b038216907f5c7eb798b922f0164aa9c5340006161c64436190a49eebc58b4e6e0715700ae690600090a250565b6001546001600160a01b0316331461135057600080fd5b61137a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582611b60565b6040516001600160a01b038216907fc3198db98a2c50068f0a99b9297e60b2dbf0eafcde57e366e70a29f887c44e1090600090a250565b6001546001600160a01b031633146113c857600080fd5b6004546040516001600160a01b038084169216907fcb01f884fc4203d4c1643cb0e126faeb397682c122ca8c0433776d42cdc0060a90600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546040517ff8b2cb4f0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f8b2cb4f90602401602060405180830381865afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a919061307f565b60006114b733610a11565b6114c057600080fd5b60035460405163365feff160e01b81526001600160a01b03918216600482015285821660248201529084166044820152606481018390527359e6279746b02db3a210a882dcae2ac77f494c139063365feff1906084015b602060405180830381865af4158015611534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155891906130c5565b949350505050565b6001546001600160a01b0316331461157757600080fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055517f10cf5a523a14a54e61c21610dc10c01e40e2ebc37baa3effd74032f7d3865e6d9190a250565b6001546001600160a01b031633146115d757600080fd5b6001600160a01b03831660009081526005602052604090819020805460ff191660011790555161160a90839083906130e7565b604051908190038120906001600160a01b038516907fec75908259de4d038ff5f2b6b99e3725bc21871f4d2a44adeff9bb814afbc9f790600090a3505050565b6001546001600160a01b0316331461166157600080fd5b6003546040516001600160a01b038084169216907fdaaa9d417a3107fd3d9db02eba3eeafbae2b8af16ee08c534f5bc449054c1c4c90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6040516332c5a6eb60e01b8152600a60048201526001600160a01b0380871660248301528516604482015260648101849052600090739b3de470c7ac319fd7f75f7e9e75f0debc768b22906332c5a6eb90608401602060405180830381865af415801561172e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175291906130c5565b6117c45760405162461bcd60e51b815260206004820152602160248201527f7472616e73666572416e6443616c6c2072657175657374206e6f742076616c6960448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610bf9565b6117d186868686866126fc565b9695505050505050565b6001546001600160a01b031633146117f257600080fd5b61181c7f5719df9ef2c4678b547f89e4f5ae410dbf400fc51cf3ded434c55f6adea2c43f82610b0e565b6040516001600160a01b038216907fdfb5b1167ef9eadf5cac67570f1a2971a6f6175303b9d4166a65a11d0a294e3490600090a250565b6001546001600160a01b0316331461186a57600080fd5b600360009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118ba57600080fd5b505af11580156118ce573d6000803e3d6000fd5b50505050565b428410156119245760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610bf9565b60006001611930610e54565b6001600160a01b038a811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611a3c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611a725750876001600160a01b0316816001600160a01b0316145b611abe5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610bf9565b5060035460405163365feff160e01b81526001600160a01b03918216600482015288821660248201529087166044820152606481018690527359e6279746b02db3a210a882dcae2ac77f494c139063365feff190608401602060405180830381865af4158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5691906130c5565b5050505050505050565b600082815260208190526040902060010154611b7b81612407565b610b338383612673565b6003546040517f1045d7ce0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152838216602482015290821660448201526000907359e6279746b02db3a210a882dcae2ac77f494c1390631045d7ce90606401602060405180830381865af4158015611c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c31919061307f565b9392505050565b6040516332c5a6eb60e01b8152600a60048201526001600160a01b0380851660248301528316604482015260648101829052600090739b3de470c7ac319fd7f75f7e9e75f0debc768b22906332c5a6eb90608401602060405180830381865af4158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd91906130c5565b611d195760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722072657175657374206e6f742076616c69640000000000006044820152606401610bf9565b6115588484846127bf565b6040516332c5a6eb60e01b8152600a60048201526001600160a01b0380851660248301528316604482015260648101829052600090739b3de470c7ac319fd7f75f7e9e75f0debc768b22906332c5a6eb90608401602060405180830381865af4158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db991906130c5565b611e055760405162461bcd60e51b815260206004820152601e60248201527f7472616e7366657246726f6d2072657175657374206e6f742076616c696400006044820152606401610bf9565b611e1185858585612850565b95945050505050565b6001546001600160a01b03163314611e3157600080fd5b611e5b7f5719df9ef2c4678b547f89e4f5ae410dbf400fc51cf3ded434c55f6adea2c43f82611b60565b6040516001600160a01b038216907f21bfb3de07221bc6197a8c23f7a059308b7a741f259cf4ef3b519cde0fde7ac390600090a250565b6001546001600160a01b03163314611ea957600080fd5b6003546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063f2fde38b90602401600060405180830381600087803b158015611f0957600080fd5b505af1158015610983573d6000803e3d6000fd5b3360008181527f1feb9b335997de56b08b04054f0301e3df87667f2dfed59b0299f6d9a067ecbe602052604081205490919060ff16611fb15760405162461bcd60e51b815260206004820152602a60248201527f53797374656d526f6c653a2063616c6c6572206973206e6f7420612073797374604482015269195b481858d8dbdd5b9d60b21b6064820152608401610bf9565b6003546040517fc5d5b08900000000000000000000000000000000000000000000000000000000815273cf487efd00b70eac8c28c654356fb0e387e66d629163c5d5b08991612014916001600160a01b0316908a908a908a908a9060040161314f565b602060405180830381865af4158015612031573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205591906130c5565b6120a15760405162461bcd60e51b815260206004820152601f60248201527f4d696e7461626c65436f6e74726f6c6c65723a206275726e206661696c6564006044820152606401610bf9565b600480546040517f3823caec0000000000000000000000000000000000000000000000000000000081526001600160a01b038981169382019390935260248101889052604481018790526000606482018190526084820181905260a48201529116908190633823caec9060c4016020604051808303816000875af115801561212d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215191906130c5565b6121c35760405162461bcd60e51b815260206004820152603260248201527f4d696e7461626c65436f6e74726f6c6c65723a20546f6b656e46726f6e74656e60448201527f64206275726e2063616c6c206661696c656400000000000000000000000000006064820152608401610bf9565b5060019695505050505050565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604090205460ff166122745760405162461bcd60e51b815260206004820152602a60248201527f53797374656d526f6c653a2063616c6c6572206973206e6f7420616e2061646d60448201527f696e206163636f756e74000000000000000000000000000000000000000000006064820152608401610bf9565b6009548111156122ec5760405162461bcd60e51b815260206004820152603d60248201527f4d696e7461626c65436f6e74726f6c6c65723a20616c6c6f77616e636520657860448201527f6365656473206d6178696d756d20736574746564206279206f776e65720000006064820152608401610bf9565b6001600160a01b03821660008181526008602052604090819020839055517f8fe74a1bbab5a9534a04463cd7b9423b985ed316426821cace8ed4aeac5a4d14906123399084815260200190565b60405180910390a25050565b6001546001600160a01b0316331461235c57600080fd5b6002546040516001600160a01b038084169216907f8573d4aae9f7fb051c6b88d7440011a1c12376acda6603a45f45bad36a8db4ce90600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146123cf57600080fd5b6040518181527f34affbf2a21d1f1d12e5e49bdca58fb75dba6879f5430f2fbf5c1d07476018d29060200160405180910390a1600955565b6124118133612925565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610ffb576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561246e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381166125085760405162461bcd60e51b815260206004820152601460248201527f6d757374206e6f742073656e6420746f203078300000000000000000000000006044820152606401610bf9565b6001600160a01b0381163014156125615760405162461bcd60e51b815260206004820152601b60248201527f6d757374206e6f742073656e6420746f20636f6e74726f6c6c657200000000006044820152606401610bf9565b6003546001600160a01b03828116911614156125bf5760405162461bcd60e51b815260206004820152601e60248201527f6d757374206e6f742073656e6420746f20746f6b656e2073746f7261676500006044820152606401610bf9565b6004546001600160a01b038281169116141561261d5760405162461bcd60e51b815260206004820152601960248201527f6d757374206e6f742073656e6420746f2066726f6e74656e64000000000000006044820152606401610bf9565b61262681610a11565b156124115760405162461bcd60e51b815260206004820181905260248201527f6d757374206e6f742073656e6420746f2062726964676546726f6e74656e64736044820152606401610bf9565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610ffb576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610ffb8282612414565b600061270733610a11565b61271057600080fd5b612719856124b2565b6003546040517f1eb8bccb00000000000000000000000000000000000000000000000000000000815273f6a1cc6928dbed138d5547dda2b873b47090bfa591631eb8bccb9161277e916001600160a01b0316908a908a908a908a908a90600401613192565b602060405180830381865af415801561279b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906130c5565b60006127ca33610a11565b6127d357600080fd5b6127dc836124b2565b6003546040517f44ded8ba0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015285821660248201529084166044820152606481018390527359e6279746b02db3a210a882dcae2ac77f494c13906344ded8ba90608401611517565b600061285b33610a11565b61286457600080fd5b61286d836124b2565b6003546040517ff3a0ddf90000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152868216602482015285821660448201529084166064820152608481018390527359e6279746b02db3a210a882dcae2ac77f494c139063f3a0ddf99060a401602060405180830381865af4158015612901573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1191906130c5565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610ffb5761295681612998565b6129618360206129aa565b6040516020016129729291906131ef565b60408051601f198184030181529082905262461bcd60e51b8252610bf991600401613270565b606061084a6001600160a01b03831660145b606060006129b9836002613283565b6129c49060026132a2565b67ffffffffffffffff8111156129dc576129dc612f49565b6040519080825280601f01601f191660200182016040528015612a06576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a3d57612a3d6132ba565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a8857612a886132ba565b60200101906001600160f81b031916908160001a9053506000612aac846002613283565b612ab79060016132a2565b90505b6001811115612b3c577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612af857612af86132ba565b1a60f81b828281518110612b0e57612b0e6132ba565b60200101906001600160f81b031916908160001a90535060049490941c93612b35816132d0565b9050612aba565b508315611c315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bf9565b600060208284031215612b9d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611c3157600080fd5b6001600160a01b038116811461241157600080fd5b600060208284031215612bf457600080fd5b8135611c3181612bcd565b600060208284031215612c1157600080fd5b5035919050565b600080600080600060a08688031215612c3057600080fd5b8535612c3b81612bcd565b94506020860135612c4b81612bcd565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215612c7c57600080fd5b823591506020830135612c8e81612bcd565b809150509250929050565b600080600060608486031215612cae57600080fd5b8335612cb981612bcd565b92506020840135612cc981612bcd565b929592945050506040919091013590565b803560ff81168114612ceb57600080fd5b919050565b600080600080600080600060e0888a031215612d0b57600080fd5b8735612d1681612bcd565b96506020880135612d2681612bcd565b95506040880135612d3681612bcd565b945060608801359350612d4b60808901612cda565b925060a0880135915060c0880135905092959891949750929550565b600080600080600080600060e0888a031215612d8257600080fd5b8735612d8d81612bcd565b96506020880135612d9d81612bcd565b95506040880135945060608801359350612d4b60808901612cda565b60008083601f840112612dcb57600080fd5b50813567ffffffffffffffff811115612de357600080fd5b602083019150836020828501011115612dfb57600080fd5b9250929050565b600080600060408486031215612e1757600080fd5b8335612e2281612bcd565b9250602084013567ffffffffffffffff811115612e3e57600080fd5b612e4a86828701612db9565b9497909650939450505050565b600080600080600060808688031215612e6f57600080fd5b8535612e7a81612bcd565b94506020860135612e8a81612bcd565b935060408601359250606086013567ffffffffffffffff811115612ead57600080fd5b612eb988828901612db9565b969995985093965092949392505050565b60008060408385031215612edd57600080fd5b8235612ee881612bcd565b91506020830135612c8e81612bcd565b60008060008060808587031215612f0e57600080fd5b8435612f1981612bcd565b93506020850135612f2981612bcd565b92506040850135612f3981612bcd565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612f7557600080fd5b8435612f8081612bcd565b93506020850135925060408501359150606085013567ffffffffffffffff80821115612fab57600080fd5b818701915087601f830112612fbf57600080fd5b813581811115612fd157612fd1612f49565b604051601f8201601f19908116603f01168101908382118183101715612ff957612ff9612f49565b816040528281528a602084870101111561301257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561304957600080fd5b823561305481612bcd565b946020939093013593505050565b60006020828403121561307457600080fd5b8151611c3181612bcd565b60006020828403121561309157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156130c0576130c0613098565b500390565b6000602082840312156130d757600080fd5b81518015158114611c3157600080fd5b8183823760009101908152919050565b60005b838110156131125781810151838201526020016130fa565b838111156118ce5750506000910152565b6000815180845261313b8160208601602086016130f7565b601f01601f19169290920160200192915050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261318760a0830184613123565b979650505050505050565b60006001600160a01b038089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516132278160178501602088016130f7565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516132648160288401602088016130f7565b01602801949350505050565b602081526000611c316020830184613123565b600081600019048311821515161561329d5761329d613098565b500290565b600082198211156132b5576132b5613098565b500190565b634e487b7160e01b600052603260045260246000fd5b6000816132df576132df613098565b50600019019056fea26469706673582212205606976e4d58e8da73fdda07ad7a948984ba3a2a2c584504b3ffa158081682a064736f6c634300080b0033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055341561002e57600080fd5b610ada8061003d6000396000f3fe608060405234801561001057600080fd5b50600436106100e15760003560e01c80639f727c2711610086578063cf8eeb7e11610063578063cf8eeb7e146101ab578063e30c3978146101be578063f2fde38b146101d1578063f8b2cb4f146101e457005b80639f727c271461017d578063c0ee0b8a14610185578063c7c7e9ea1461019857005b806333dd1b8a116100bf57806333dd1b8a1461011c5780634e71e0c81461012f5780636c9c2faf146101375780638da5cb5b1461015257005b806317ffc320146100e357806321e5383a146100f65780632aed7f3f14610109575b005b6100e16100f136600461091d565b6101f7565b6100e161010436600461093a565b6102b3565b6100e161011736600461091d565b610361565b6100e161012a366004610966565b6103ed565b6100e16104a3565b61013f61052b565b6040519081526020015b60405180910390f35b600054610165906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b6100e16105c0565b6100e16101933660046109a7565b600080fd5b61013f6101a6366004610a30565b610614565b6100e16101b936600461093a565b6106c2565b600154610165906001600160a01b031681565b6100e16101df36600461091d565b610740565b61013f6101f236600461091d565b610749565b6000546001600160a01b0316331461020e57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102929190610a69565b6000549091506102af906001600160a01b038481169116836107ee565b5050565b6000546001600160a01b031633146102ca57600080fd5b6040517f7aeb0ed5000000000000000000000000000000000000000000000000000000008152600260048201526001600160a01b03831660248201526044810182905273e0892e62e8b7f1c664c1ea48bb1515b30e6ab41590637aeb0ed5906064015b60006040518083038186803b15801561034557600080fd5b505af4158015610359573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461037857600080fd5b6000546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152829182169063f2fde38b90602401600060405180830381600087803b1580156103d957600080fd5b505af1158015610359573d6000803e3d6000fd5b6000546001600160a01b0316331461040457600080fd5b6040517f5599b4b7000000000000000000000000000000000000000000000000000000008152600260048201526001600160a01b038085166024830152831660448201526064810182905273e0892e62e8b7f1c664c1ea48bb1515b30e6ab41590635599b4b79060840160006040518083038186803b15801561048657600080fd5b505af415801561049a573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633146104ba57600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03841617909155169055565b6040517f072f9a500000000000000000000000000000000000000000000000000000000081526002600482015260009073e0892e62e8b7f1c664c1ea48bb1515b30e6ab4159063072f9a5090602401602060405180830381865af4158015610597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bb9190610a69565b905090565b6000546001600160a01b031633146105d757600080fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610611573d6000803e3d6000fd5b50565b6040517f9daeae1e000000000000000000000000000000000000000000000000000000008152600260048201526001600160a01b0380841660248301528216604482015260009073e0892e62e8b7f1c664c1ea48bb1515b30e6ab41590639daeae1e90606401602060405180830381865af4158015610697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bb9190610a69565b9392505050565b6000546001600160a01b031633146106d957600080fd5b6040517fd9c7339e000000000000000000000000000000000000000000000000000000008152600260048201526001600160a01b03831660248201526044810182905273e0892e62e8b7f1c664c1ea48bb1515b30e6ab4159063d9c7339e9060640161032d565b61061181610888565b6040517fb0aacf24000000000000000000000000000000000000000000000000000000008152600260048201526001600160a01b038216602482015260009073e0892e62e8b7f1c664c1ea48bb1515b30e6ab4159063b0aacf2490604401602060405180830381865af41580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e89190610a69565b92915050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087a9190610a82565b61088357600080fd5b505050565b6000546001600160a01b0316331461089f57600080fd5b6001546040516001600160a01b038084169216907f8573d4aae9f7fb051c6b88d7440011a1c12376acda6603a45f45bad36a8db4ce90600090a36001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038116811461061157600080fd5b60006020828403121561092f57600080fd5b81356106bb81610908565b6000806040838503121561094d57600080fd5b823561095881610908565b946020939093013593505050565b60008060006060848603121561097b57600080fd5b833561098681610908565b9250602084013561099681610908565b929592945050506040919091013590565b600080600080606085870312156109bd57600080fd5b84356109c881610908565b935060208501359250604085013567ffffffffffffffff808211156109ec57600080fd5b818701915087601f830112610a0057600080fd5b813581811115610a0f57600080fd5b886020828501011115610a2157600080fd5b95989497505060200194505050565b60008060408385031215610a4357600080fd5b8235610a4e81610908565b91506020830135610a5e81610908565b809150509250929050565b600060208284031215610a7b57600080fd5b5051919050565b600060208284031215610a9457600080fd5b815180151581146106bb57600080fdfea2646970667358221220e51bdfea16490038892f8feb2068851f6ae531d935e40110b020c2e80aafd7c664736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8c6bd0b147f9c612c43629ead1784aa57ed60e74555520000000000000000000000000000000000000000000000000000000000000000000000000000000000d58c5db52b5b3eb24ee38af287d2cb0f424172a5