[ { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "ProofWasUsed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "Blacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Mint", "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": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unblacklisted", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_BLOCK_FOR_RESERVATION", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addOperator", "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": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "blacklist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "burner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "bytes", "name": "sig", "type": "bytes" } ], "name": "burn", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "chainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "uint256", "name": "nonce_", "type": "uint256" } ], "name": "execute", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getMintingAuthorizationThreshold", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account_", "type": "address" }, { "internalType": "uint256", "name": "nonce_", "type": "uint256" } ], "name": "getReservation", "outputs": [ { "components": [ { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint96", "name": "fee", "type": "uint96" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "uint64", "name": "expiryBlockNum", "type": "uint64" }, { "internalType": "enum ERC20Reservable.ReservationStatus", "name": "status", "type": "uint8" } ], "internalType": "struct ERC20Reservable.Reservation", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "admin", "type": "address" }, { "internalType": "uint256", "name": "supplyCap_", "type": "uint256" }, { "internalType": "uint8", "name": "mintingAuthorizationThreshold_", "type": "uint8" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isBlacklisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "isNonceUsed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "proofBlockHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "proofTxnHash", "type": "bytes32" } ], "name": "mint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "proofBlockHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "proofTxnHash", "type": "bytes32" } ], "name": "mintedAmountByProof", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "uint256", "name": "nonce_", "type": "uint256" } ], "name": "reclaim", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint96", "name": "fee", "type": "uint96" }, { "internalType": "uint256", "name": "gluwaNonce", "type": "uint256" }, { "internalType": "uint64", "name": "deadline_", "type": "uint64" }, { "internalType": "bytes", "name": "sig", "type": "bytes" } ], "name": "reserve", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account_", "type": "address" } ], "name": "reserveOf", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "name": "revokeSignature", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "newThreshold", "type": "uint8" } ], "name": "setMintingAuthorizationThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "supplyCap_", "type": "uint256" } ], "name": "setSupplyCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supplyCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "gluwaNonce", "type": "uint256" }, { "internalType": "bytes", "name": "sig", "type": "bytes" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "unblacklist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ]
608060405234801561001057600080fd5b50612f77806100206000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c806375e3661e11610182578063a217fddf116100e9578063c514fd0b116100a2578063dd62ed3e1161007c578063dd62ed3e146106b4578063ed2e93b2146106c7578063f9f92be4146106da578063fe575a87146106ed57600080fd5b8063c514fd0b1461067b578063ca15c8731461068e578063d547741f146106a157600080fd5b8063a217fddf14610607578063a22ac5a91461060f578063a9059cbb1461062f578063ac8a584a14610642578063b49dc74114610655578063b6a3f59a1461066857600080fd5b80639010d07c1161013b5780639010d07c1461056657806391d148541461059157806395d89b41146105a45780639870d7fe146105c45780639a8a0592146105d75780639fa77b20146105dd57600080fd5b806375e3661e146104d5578063837e7628146104e857806384b0196e146105095780638bad0c0a146105245780638bd317eb1461052c5780638f770ad01461053f57600080fd5b806336568abe116102265780635d00bb12116101df5780635d00bb12146104635780635eda9cbc1461047657806369cd5d3b146104895780636d70f7ae1461049c57806370480275146104af57806370a08231146104c257600080fd5b806336568abe146103ed5780633b89bb86146104005780633da1f79a1461041357806342966c6814610426578063435d660d1461043957806354fd4d501461044457600080fd5b8063248a9ca311610278578063248a9ca31461038257806324d7806c14610395578063277a4373146103a85780632ab6f8db146103bb5780632f2ff15d146103c5578063313ce567146103d857600080fd5b806301ffc9a7146102c057806306fdde03146102e8578063095ea7b3146103185780630982d5b01461032b57806318160ddd1461033e57806323b872dd1461036f575b600080fd5b6102d36102ce3660046127a9565b61071c565b60405190151581526020015b60405180910390f35b60408051808201909152600b81526a577261707065642043544360a81b60208201525b6040516102df9190612819565b6102d3610326366004612843565b610747565b6102d36103393660046128b5565b61075f565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016102df565b6102d361037d366004612936565b61080d565b610361610390366004612972565b610831565b6102d36103a336600461298b565b610853565b6102d36103b63660046129a6565b61085f565b6103c36108e7565b005b6103c36103d33660046129df565b610901565b60125b60405160ff90911681526020016102df565b6103c36103fb3660046129df565b610923565b6102d361040e366004612843565b61095b565b6102d3610421366004612972565b610993565b6102d3610434366004612972565b6109cb565b60fc5460ff166103db565b604080518082019091526003815262302e3160e81b602082015261030b565b6102d3610471366004612972565b6109d7565b610361610484366004612a0b565b6109fb565b6102d3610497366004612a2d565b610a22565b6102d36104aa36600461298b565b610acf565b6103c36104bd36600461298b565b610ae9565b6103616104d036600461298b565b610b1d565b6102d36104e336600461298b565b610b28565b6104f161384081565b6040516001600160401b0390911681526020016102df565b610511610b97565b6040516102df9796959493929190612a9d565b6103c3610bdd565b6102d361053a366004612843565b610c04565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0354610361565b610579610574366004612a0b565b610e46565b6040516001600160a01b0390911681526020016102df565b6102d361059f3660046129df565b610e75565b6040805180820190915260048152635743544360e01b602082015261030b565b6103c36105d236600461298b565b610ead565b46610361565b6103616105eb36600461298b565b6001600160a01b03166000908152610130602052604090205490565b610361600081565b61062261061d366004612843565b610eea565b6040516102df9190612b49565b6102d361063d366004612843565b610fd9565b6103c361065036600461298b565b610fe6565b6103c3610663366004612be2565b611023565b6103c3610676366004612972565b611145565b6103c3610689366004612c1e565b611173565b61036161069c366004612972565b61120e565b6103c36106af3660046129df565b61123b565b6103616106c2366004612c39565b611257565b6102d36106d5366004612c7a565b6112a1565b6102d36106e836600461298b565b6113f7565b6102d36106fb36600461298b565b6001600160a01b031660009081526020819052604090205460ff1660011490565b60006001600160e01b03198216635a05180f60e01b1480610741575061074182611465565b92915050565b60003361075581858561149a565b5060019392505050565b600061076b88856114a7565b604051600360f81b60208201524660218201526001600160601b031930606090811b821660418401528a811b8216605584015289901b166069820152607d8101879052609d810186905260bd810185905260009060dd016040516020818303038152906040528051906020012090506107e6818a8686611532565b506107f389335b88611602565b6107fe898989611602565b50600198975050505050505050565b60003361081b858285611661565b610826858585611602565b506001949350505050565b6000908152600080516020612f22833981519152602052604090206001015490565b60006107418183610e75565b600061086a33610acf565b61088f5760405162461bcd60e51b815260040161088690612d38565b60405180910390fd5b61089a8484846116c1565b6108a48585611713565b60405184906001600160a01b0387169033907fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f890600090a4506001949350505050565b6108ff600080516020612f0283398151915233610923565b565b61090a82610831565b61091381611749565b61091d8383611753565b50505050565b6001600160a01b038116331461094c5760405163334bd91960e11b815260040160405180910390fd5b6109568282611798565b505050565b6001600160a01b038216600090815261013160209081526040808320848452909152812061098a9084906117d4565b50600192915050565b600060016065826109a43386611989565b81526020810191909152604001600020805460ff1916911515919091179055506001919050565b600061074133836119cc565b60006107416109e63384611989565b60009081526065602052604090205460ff1690565b600060fd6000610a0b8585611a17565b815260200190815260200160002054905092915050565b6000610a2e87856114a7565b604051600160f81b60208201524660218201526001600160601b031930606090811b8216604184015289901b166055820152606981018790526089810186905260a9810185905260009060c901604051602081830303815290604052805190602001209050610a9f81898686611532565b508515610ab057610ab088336107ed565b50610ac487610abf8789612d85565b6119cc565b979650505050505050565b6000610741600080516020612f0283398151915283610e75565b610af233610853565b610b0e5760405162461bcd60e51b815260040161088690612d98565b610b19600082611753565b5050565b600061074182611a33565b6000610b3333610acf565b610b4f5760405162461bcd60e51b815260040161088690612d38565b610b5a826000611a6f565b6040516001600160a01b038316907f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b90600090a25060015b919050565b600060608060008060006060610bab611a9c565b610bb3611acb565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b33610be9600082610923565b610c01600080516020612f0283398151915282610923565b50565b6001600160a01b03821660009081526101316020908152604080832084845290915281208133905060016002830154600160e01b900460ff166003811115610c4e57610c4e612b33565b14610caa5760405162461bcd60e51b815260206004820152602660248201527f52657365727661626c653a20696e76616c6964207265736572766174696f6e2060448201526573746174757360d01b6064820152608401610886565b806001600160a01b0316856001600160a01b03161480610cd9575060028201546001600160a01b038281169116145b610d415760405162461bcd60e51b815260206004820152603360248201527f52657365727661626c653a206f6e6c79207468652073656e646572206f7220746044820152721a1948195e1958dd5d1bdc881d1bc818d85b1b606a1b6064820152608401610886565b600282015443600160a01b9091046001600160401b0316111580610d74575060028201546001600160a01b038281169116145b610de65760405162461bcd60e51b815260206004820152603760248201527f52657365727661626c653a207265736572766174696f6e206e6f74206578706960448201527f726564206f7220796f75206e6f74206578656375746f720000000000000000006064820152608401610886565b6002828101805460ff60e01b1916600160e01b83021790555050546001600160a01b03841660009081526101306020526040902080546001600160601b03808416600160601b909404811693909301909216909103905550600192915050565b6000828152600080516020612ec2833981519152602081905260408220610e6d9084611aed565b949350505050565b6000918252600080516020612f22833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610eb633610853565b610ed25760405162461bcd60e51b815260040161088690612d98565b610b19600080516020612f0283398151915282611753565b610f206040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b6001600160a01b03838116600090815261013160209081526040808320868452825291829020825160c08101845281546001600160601b038082168352600160601b9091041692810192909252600181015484169282019290925260028201549283166060820152600160a01b83046001600160401b031660808201529160a0830190600160e01b900460ff166003811115610fbe57610fbe612b33565b6003811115610fcf57610fcf612b33565b9052509392505050565b600061098a338484611602565b610fef33610853565b61100b5760405162461bcd60e51b815260040161088690612d98565b610b19600080516020612f0283398151915282611798565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156110685750825b90506000826001600160401b031660011480156110845750303b155b905081158015611092575080155b156110b05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110da57845460ff60401b1916600160401b1785555b6110e388611af9565b6110ec87611b46565b6110f586611b72565b831561113b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61114e33610853565b61116a5760405162461bcd60e51b815260040161088690612d98565b610c0181611b7a565b61117c33610acf565b6111985760405162461bcd60e51b815260040161088690612d38565b60028160ff1610156111f85760405162461bcd60e51b8152602060048201526024808201527f4d696e7461626c653a206e6577207468726573686f6c6420697320746f6f20736044820152631b585b1b60e21b6064820152608401610886565b60fc805460ff191660ff92909216919091179055565b6000818152600080516020612ec283398151915260208190526040822061123490611c3a565b9392505050565b61124482610831565b61124d81611749565b61091d8383611798565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b60006001600160a01b03881661130e5760405162461bcd60e51b815260206004820152602c60248201527f52657365727661626c653a2063616e6e6f7420657865637574652066726f6d2060448201526b7a65726f206164647265737360a01b6064820152608401610886565b61131a61384043612dc7565b846001600160401b031610156113825760405162461bcd60e51b815260206004820152602760248201527f52657365727661626c653a20696e76616c696420626c6f636b2065787069727960448201526610373ab6b132b960c91b6064820152608401610886565b61138c8a866114a7565b6000600446308d8d8d8d8d8d8d6040516020016113b29a99989796959493929190612dda565b6040516020818303038152906040528051906020012090506113d6818c8686611532565b506113e68b8b8b8b8b8b8b611c44565b5060019a9950505050505050505050565b600061140233610acf565b61141e5760405162461bcd60e51b815260040161088690612d38565b611429826001611a6f565b6040516001600160a01b038316907fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85590600090a2506001919050565b60006001600160e01b03198216637965db0b60e01b148061074157506301ffc9a760e01b6001600160e01b0319831614610741565b6109568383836001611e39565b60006114b38383611989565b60008181526065602052604090205490915060ff16156115155760405162461bcd60e51b815260206004820152601a60248201527f5369676e65724e6f6e63653a20496e76616c6964204e6f6e63650000000000006044820152606401610886565b6000908152606560205260409020805460ff191660011790555050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c859052603c81206001600160a01b038516906115ac9085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f2192505050565b6001600160a01b0316146108265760405162461bcd60e51b815260206004820152601b60248201527f56616c69646174653a20696e76616c6964207369676e617475726500000000006044820152606401610886565b6001600160a01b03831661162c57604051634b637e8f60e11b815260006004820152602401610886565b6001600160a01b0382166116565760405163ec442f0560e01b815260006004820152602401610886565b610956838383611f4b565b600061166d8484611257565b9050600019811461091d57818110156116b257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610886565b61091d84848484036000611e39565b60006116cd8383611a17565b600081815260fd6020526040902054909150156116fd576040516311bb1cd760e01b815260040160405180910390fd5b600090815260fd60205260409020929092555050565b6001600160a01b03821661173d5760405163ec442f0560e01b815260006004820152602401610886565b610b1960008383611f4b565b610c01813361206c565b6000600080516020612ec28339815191528161176f85856120a5565b90508015610e6d57600085815260208390526040902061178f9085612151565b50949350505050565b6000600080516020612ec2833981519152816117b48585612166565b90508015610e6d57600085815260208390526040902061178f90856121e2565b600281015433906001600160a01b03168114806118025750806001600160a01b0316836001600160a01b0316145b61185c5760405162461bcd60e51b815260206004820152602560248201527f52657365727661626c653a206e6f7420617574686f72697a656420746f206578604482015264656375746560d81b6064820152608401610886565b600282015443600160a01b9091046001600160401b031611801561189f575060016002830154600160e01b900460ff16600381111561189d5761189d612b33565b145b6119055760405162461bcd60e51b815260206004820152603160248201527f52657365727661626c653a2065787069726564206f7220696e76616c6964207260448201527065736572766174696f6e2073746174757360781b6064820152608401610886565b8154600183015460028401805460ff60e01b198116600360e01b179091556001600160a01b038681166000908152610130602052604090208054600160601b86046001600160601b039081169616868101909103909155928116911661196c878286611602565b6119808783856001600160601b0316611602565b50505050505050565b6040516001600160601b0319606084901b166020820152603481018290526000906054015b60405160208183030381529060405280519060200120905092915050565b60006119d883836121f7565b60405182906001600160a01b038516907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590600090a350600192915050565b60408051602081018490529081018290526000906060016119ae565b6001600160a01b03811660009081526101306020908152604080832054600080516020612ee28339815191529092528220546107419190612d85565b6001600160a01b03919091166000908152602081905260409020805460ff191660ff909216919091179055565b6060611ac660408051808201909152600b81526a577261707065642043544360a81b602082015290565b905090565b6060611ac6604080518082019091526003815262302e3160e81b602082015290565b6000611234838361222d565b611b01612257565b611b096122a0565b611b22600080516020612f0283398151915260006122a8565b611b2d600082611753565b50610b19600080516020612f0283398151915282611753565b611b4e612257565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0355565b6111f8612257565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02547f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03829055600080516020612ee283398151915290821015610b195760405162461bcd60e51b815260206004820152603260248201527f45524332303a20546f74616c20737570706c79632063616e2774206265206d6f60448201527107265207468616e20737570706c79206361760741b6064820152608401610886565b6000610741825490565b611c4e8385612e75565b6001600160601b0316611c6088610b1d565b1015611cc15760405162461bcd60e51b815260206004820152602a60248201527f52657365727661626c653a207265736572766520616d6f756e7420657863656560448201526964732062616c616e636560b01b6064820152608401610886565b6040518060c00160405280856001600160601b03168152602001846001600160601b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001826001600160401b0316815260200160016003811115611d2a57611d2a612b33565b90526001600160a01b0380891660009081526101316020908152604080832087845282529182902084518154928601516001600160601b03908116600160601b026001600160c01b0319909416911617919091178155908301516001820180549184166001600160a01b0319909216919091179055606083015160028201805460808601516001600160401b0316600160a01b026001600160e01b031990911692909416919091179290921780835560a084015191929060ff60e01b1916600160e01b836003811115611dff57611dff612b33565b02179055505050506001600160a01b03959095166000908152610130602052604090208054919092016001600160601b0316019055505050565b600080516020612ee28339815191526001600160a01b038516611e725760405163e602df0560e01b815260006004820152602401610886565b6001600160a01b038416611e9c57604051634a1406b160e11b815260006004820152602401610886565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611f1a57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611f1191815260200190565b60405180910390a35b5050505050565b600080600080611f31868661230b565b925092509250611f418282612358565b5090949350505050565b611f70836001600160a01b031660009081526020819052604090205460ff1660011490565b158015611f9f5750611f9d826001600160a01b031660009081526020819052604090205460ff1660011490565b155b611ff75760405162461bcd60e51b8152602060048201526024808201527f476c757761636f696e3a2046726f6d206f7220546f20697320626c61636b6c696044820152631cdd195960e21b6064820152608401610886565b8061200184610b1d565b10158061201557506001600160a01b038316155b6120615760405162461bcd60e51b815260206004820152601f60248201527f476c757761636f696e3a20496e73756666696369656e742062616c616e6365006044820152606401610886565b610956838383612411565b6120768282610e75565b610b195760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610886565b6000600080516020612f228339815191526120c08484610e75565b612140576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556120f63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610741565b6000915050610741565b5092915050565b6000611234836001600160a01b0384166125a2565b6000600080516020612f228339815191526121818484610e75565b15612140576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610741565b6000611234836001600160a01b0384166125f1565b6001600160a01b03821661222157604051634b637e8f60e11b815260006004820152602401610886565b610b1982600083611f4b565b600082600001828154811061224457612244612e95565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108ff57604051631afcd79f60e31b815260040160405180910390fd5b6108ff612257565b600080516020612f2283398151915260006122c284610831565b600085815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b600080600083516041036123455760208401516040850151606086015160001a612337888285856126da565b955095509550505050612351565b50508151600091506002905b9250925092565b600082600381111561236c5761236c612b33565b03612375575050565b600182600381111561238957612389612b33565b036123a75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156123bb576123bb612b33565b036123dc5760405163fce698f760e01b815260048101829052602401610886565b60038260038111156123f0576123f0612b33565b03610b19576040516335e2f38360e21b815260048101829052602401610886565b600080516020612ee28339815191526001600160a01b0384166124a0578060030154828260020160008282546124479190612dc7565b925050819055111561249b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20457863656564696e6720737570706c792063617000000000006044820152606401610886565b612512565b6001600160a01b038416600090815260208290526040902054828110156124f35760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610886565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661253057600281018054839003905561254f565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259491815260200190565b60405180910390a350505050565b60008181526001830160205260408120546125e957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610741565b506000610741565b60008181526001830160205260408120548015612140576000612615600183612d85565b855490915060009061262990600190612d85565b905080821461268e57600086600001828154811061264957612649612e95565b906000526020600020015490508087600001848154811061266c5761266c612e95565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061269f5761269f612eab565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610741565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612715575060009150600390508261279f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612769573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127955750600092506001915082905061279f565b9250600091508190505b9450945094915050565b6000602082840312156127bb57600080fd5b81356001600160e01b03198116811461123457600080fd5b6000815180845260005b818110156127f9576020818501810151868301820152016127dd565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061123460208301846127d3565b80356001600160a01b0381168114610b9257600080fd5b6000806040838503121561285657600080fd5b61285f8361282c565b946020939093013593505050565b60008083601f84011261287f57600080fd5b5081356001600160401b0381111561289657600080fd5b6020830191508360208285010111156128ae57600080fd5b9250929050565b600080600080600080600060c0888a0312156128d057600080fd5b6128d98861282c565b96506128e76020890161282c565b955060408801359450606088013593506080880135925060a08801356001600160401b0381111561291757600080fd5b6129238a828b0161286d565b989b979a50959850939692959293505050565b60008060006060848603121561294b57600080fd5b6129548461282c565b92506129626020850161282c565b9150604084013590509250925092565b60006020828403121561298457600080fd5b5035919050565b60006020828403121561299d57600080fd5b6112348261282c565b600080600080608085870312156129bc57600080fd5b6129c58561282c565b966020860135965060408601359560600135945092505050565b600080604083850312156129f257600080fd5b82359150612a026020840161282c565b90509250929050565b60008060408385031215612a1e57600080fd5b50508035926020909101359150565b60008060008060008060a08789031215612a4657600080fd5b612a4f8761282c565b955060208701359450604087013593506060870135925060808701356001600160401b03811115612a7f57600080fd5b612a8b89828a0161286d565b979a9699509497509295939492505050565b60ff60f81b881681526000602060e081840152612abd60e084018a6127d3565b8381036040850152612acf818a6127d3565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612b2157835183529284019291840191600101612b05565b50909c9b505050505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060c0820190506001600160601b0380845116835280602085015116602084015250604083015160018060a01b03808216604085015280606086015116606085015250506001600160401b03608084015116608083015260a083015160048110612bc457634e487b7160e01b600052602160045260246000fd5b8060a08401525092915050565b803560ff81168114610b9257600080fd5b600080600060608486031215612bf757600080fd5b612c008461282c565b925060208401359150612c1560408501612bd1565b90509250925092565b600060208284031215612c3057600080fd5b61123482612bd1565b60008060408385031215612c4c57600080fd5b612c558361282c565b9150612a026020840161282c565b80356001600160601b0381168114610b9257600080fd5b60008060008060008060008060006101008a8c031215612c9957600080fd5b612ca28a61282c565b9850612cb060208b0161282c565b9750612cbe60408b0161282c565b9650612ccc60608b01612c63565b9550612cda60808b01612c63565b945060a08a0135935060c08a01356001600160401b038082168214612cfe57600080fd5b90935060e08b01359080821115612d1457600080fd5b50612d218c828d0161286d565b915080935050809150509295985092959850929598565b60208082526018908201527f5265737472696374656420746f204f70657261746f72732e0000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561074157610741612d6f565b6020808252601590820152742932b9ba3934b1ba32b2103a379020b236b4b7399760591b604082015260600190565b8082018082111561074157610741612d6f565b6001600160f81b031960f88c901b168152600181018a90526001600160601b031960608a811b8216602184015289811b8216603584015288811b8216604984015287901b16605d8201526001600160a01b031960a086811b8216607184015285901b16607d8201526000836089830152612e6360a983018460c01b6001600160c01b0319169052565b5060b1019a9950505050505050505050565b6001600160601b0381811683821601908082111561214a5761214a612d6f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220688ca823e0e9e6db5498ef93be28d61048924287e00b56fce2645c4a47f1893b64736f6c63430008150033