Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "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": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "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": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "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": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "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" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "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": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "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": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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" } ]
61016060405234801562000011575f80fd5b506040518060400160405280600781526020016666726f6b2e616960c81b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600781526020016666726f6b2e616960c81b8152506040518060400160405280600481526020016346524f4b60e01b81525081600390816200009b919062000961565b506004620000aa828262000961565b50620000bc9150839050600562000193565b61012052620000cd81600662000193565b61014052815160208084019190912060e052815190820120610100524660a0526200015a60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200018d33620001776012600a62000b3a565b6200018790631913385062000b4a565b620001cb565b62000c4f565b5f602083511015620001b257620001aa836200020b565b9050620001c5565b81620001bf848262000961565b5060ff90505b92915050565b6001600160a01b038216620001fa5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620002075f83836200024d565b5050565b5f80829050601f8151111562000238578260405163305a27a960e01b8152600401620001f1919062000b64565b8051620002458262000bb2565b179392505050565b6200025a8383836200025f565b505050565b6200026c838383620002cd565b6001600160a01b038316620002c0575f6200028660025490565b90506001600160d01b0380821115620002bd57604051630e58ae9360e11b81526004810183905260248101829052604401620001f1565b50505b6200025a838383620003fc565b6001600160a01b038316620002fb578060025f828254620002ef919062000bd6565b909155506200036d9050565b6001600160a01b0383165f90815260208190526040902054818110156200034f5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620001f1565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200038b57600280548290039055620003a9565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003ef91815260200190565b60405180910390a3505050565b6001600160a01b03831662000431576200042e600a620008c56200049360201b176200042884620004a7565b620004e0565b50505b6001600160a01b03821662000460576200045d600a620008d06200051c60201b176200042884620004a7565b50505b6001600160a01b038381165f908152600860205260408082205485841683529120546200025a9291821691168362000529565b5f620004a0828462000bec565b9392505050565b5f6001600160d01b03821115620004dc576040516306dfcc6560e41b815260d0600482015260248101839052604401620001f1565b5090565b5f806200050f620004f06200068b565b62000506620004ff886200069b565b868860201c565b879190620006e7565b915091505b935093915050565b5f620004a0828462000c16565b816001600160a01b0316836001600160a01b0316141580156200054b57505f81115b156200025a576001600160a01b03831615620005ec576001600160a01b0383165f908152600960209081526040822082916200059891906200051c901b620008d0176200042886620004a7565b6001600160d01b031691506001600160d01b03169150846001600160a01b03165f8051602062002a378339815191528383604051620005e1929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200025a576001600160a01b0382165f9081526009602090815260408220829162000633919062000493901b620008c5176200042886620004a7565b6001600160d01b031691506001600160d01b03169150836001600160a01b03165f8051602062002a3783398151915283836040516200067c929190918252602082015260400190565b60405180910390a25050505050565b5f62000696620006f6565b905090565b80545f908015620006df57620006c583620006b860018462000c39565b5f91825260209091200190565b54660100000000000090046001600160d01b0316620004a0565b5f9392505050565b5f806200050f85858562000702565b5f620006964362000890565b82545f908190801562000832575f6200072287620006b860018562000c39565b60408051808201909152905465ffffffffffff80821680845266010000000000009092046001600160d01b0316602084015291925090871610156200077a57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603620007ce5784620007a188620006b860018662000c39565b80546001600160d01b039290921666010000000000000265ffffffffffff90921691909117905562000821565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d815291909120945191519092166601000000000000029216919091179101555b602001519250839150620005149050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316660100000000000002919093161792019190915590508162000514565b5f65ffffffffffff821115620004dc576040516306dfcc6560e41b81526030600482015260248101839052604401620001f1565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620008ed57607f821691505b6020821081036200090c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200025a57805f5260205f20601f840160051c81016020851015620009395750805b601f840160051c820191505b818110156200095a575f815560010162000945565b5050505050565b81516001600160401b038111156200097d576200097d620008c4565b62000995816200098e8454620008d8565b8462000912565b602080601f831160018114620009cb575f8415620009b35750858301515b5f19600386901b1c1916600185901b17855562000a25565b5f85815260208120601f198616915b82811015620009fb57888601518255948401946001909101908401620009da565b508582101562000a1957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000a8157815f190482111562000a655762000a6562000a2d565b8085161562000a7357918102915b93841c939080029062000a46565b509250929050565b5f8262000a9957506001620001c5565b8162000aa757505f620001c5565b816001811462000ac0576002811462000acb5762000aeb565b6001915050620001c5565b60ff84111562000adf5762000adf62000a2d565b50506001821b620001c5565b5060208310610133831016604e8410600b841016171562000b10575081810a620001c5565b62000b1c838362000a41565b805f190482111562000b325762000b3262000a2d565b029392505050565b5f620004a060ff84168362000a89565b8082028115828204841417620001c557620001c562000a2d565b5f602080835283518060208501525f5b8181101562000b925785810183015185820160400152820162000b74565b505f604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200090c575f1960209190910360031b1b16919050565b80820180821115620001c557620001c562000a2d565b6001600160d01b0381811683821601908082111562000c0f5762000c0f62000a2d565b5092915050565b6001600160d01b0382811682821603908082111562000c0f5762000c0f62000a2d565b81810381811115620001c557620001c562000a2d565b60805160a05160c05160e051610100516101205161014051611d9662000ca15f395f610cc101525f610c9401525f610a9e01525f610a7601525f6109d101525f6109fb01525f610a250152611d965ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c806370a08231116100bf5780639ab24eb0116100795780639ab24eb0146102f4578063a9059cbb14610307578063c3cda5201461031a578063d505accf1461032d578063dd62ed3e14610340578063f1127ed814610378575f80fd5b806370a08231146102645780637ecebe001461028c57806384b0196e1461029f5780638e539e8c146102ba57806391ddadf4146102cd57806395d89b41146102ec575f80fd5b80633644e515116101105780633644e515146101c15780633a46b1a8146101c95780634bf5d7e9146101dc578063587cde1e146101e45780635c19a95c146102275780636fcfff451461023c575f80fd5b806306fdde031461014c578063095ea7b31461016a57806318160ddd1461018d57806323b872dd1461019f578063313ce567146101b2575b5f80fd5b6101546103b7565b60405161016191906119c0565b60405180910390f35b61017d6101783660046119ed565b610447565b6040519015158152602001610161565b6002545b604051908152602001610161565b61017d6101ad366004611a15565b610460565b60405160128152602001610161565b610191610483565b6101916101d73660046119ed565b610491565b610154610515565b61020f6101f2366004611a4e565b6001600160a01b039081165f908152600860205260409020541690565b6040516001600160a01b039091168152602001610161565b61023a610235366004611a4e565b61058d565b005b61024f61024a366004611a4e565b61059c565b60405163ffffffff9091168152602001610161565b610191610272366004611a4e565b6001600160a01b03165f9081526020819052604090205490565b61019161029a366004611a4e565b6105a6565b6102a76105b0565b6040516101619796959493929190611a67565b6101916102c8366004611afe565b6105f2565b6102d561065b565b60405165ffffffffffff9091168152602001610161565b610154610664565b610191610302366004611a4e565b610673565b61017d6103153660046119ed565b6106a2565b61023a610328366004611b25565b6106af565b61023a61033b366004611b79565b61076b565b61019161034e366004611bde565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61038b610386366004611c0f565b6108a1565b60408051825165ffffffffffff1681526020928301516001600160d01b03169281019290925201610161565b6060600380546103c690611c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546103f290611c4c565b801561043d5780601f106104145761010080835404028352916020019161043d565b820191905f5260205f20905b81548152906001019060200180831161042057829003601f168201915b5050505050905090565b5f336104548185856108db565b60019150505b92915050565b5f3361046d8582856108ed565b610478858585610968565b506001949350505050565b5f61048c6109c5565b905090565b5f8061049b61065b565b90508065ffffffffffff1683106104db57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b6105046104e784610aee565b6001600160a01b0386165f90815260096020526040902090610b24565b6001600160d01b0316949350505050565b606061051f610bd4565b65ffffffffffff1661052f61065b565b65ffffffffffff1614610555576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336105988183610bde565b5050565b5f61045a82610c4f565b5f61045a82610c70565b5f6060805f805f60606105c1610c8d565b6105c9610cba565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f806105fc61065b565b90508065ffffffffffff16831061063757604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016104d2565b61064b61064384610aee565b600a90610b24565b6001600160d01b03169392505050565b5f61048c610bd4565b6060600480546103c690611c4c565b6001600160a01b0381165f90815260096020526040812061069390610ce7565b6001600160d01b031692915050565b5f33610454818585610968565b834211156106d357604051632341d78760e11b8152600481018590526024016104d2565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f9061074c906107449060a00160405160208183030381529060405280519060200120610d1e565b858585610d4a565b90506107588187610d76565b6107628188610bde565b50505050505050565b8342111561078f5760405163313c898160e11b8152600481018590526024016104d2565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107da8c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61083482610d1e565b90505f61084382878787610d4a565b9050896001600160a01b0316816001600160a01b03161461088a576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016104d2565b6108958a8a8a6108db565b50505050505050505050565b604080518082019091525f80825260208201526108be8383610dc8565b9392505050565b5f6108be8284611c98565b5f6108be8284611cbf565b6108e88383836001610dfc565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610962578181101561095457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104d2565b61096284848484035f610dfc565b50505050565b6001600160a01b03831661099157604051634b637e8f60e11b81525f60048201526024016104d2565b6001600160a01b0382166109ba5760405163ec442f0560e01b81525f60048201526024016104d2565b6108e8838383610ece565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610a1d57507f000000000000000000000000000000000000000000000000000000000000000046145b15610a4757507f000000000000000000000000000000000000000000000000000000000000000090565b61048c604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f65ffffffffffff821115610b20576040516306dfcc6560e41b815260306004820152602481018390526044016104d2565b5090565b81545f9081816005811115610b80575f610b3d84610ed9565b610b479085611cdf565b5f8881526020902090915081015465ffffffffffff9081169087161015610b7057809150610b7e565b610b7b816001611cf2565b92505b505b5f610b8d87878585610fbd565b90508015610bc757610bb187610ba4600184611cdf565b5f91825260209091200190565b54600160301b90046001600160d01b0316610bc9565b5f5b979650505050505050565b5f61048c43610aee565b6001600160a01b038281165f8181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46108e88183610c4a8661101c565b611039565b6001600160a01b0381165f9081526009602052604081205461045a906111a2565b6001600160a01b0381165f9081526007602052604081205461045a565b606061048c7f000000000000000000000000000000000000000000000000000000000000000060056111d2565b606061048c7f000000000000000000000000000000000000000000000000000000000000000060066111d2565b80545f908015610d1657610d0083610ba4600184611cdf565b54600160301b90046001600160d01b03166108be565b5f9392505050565b5f61045a610d2a6109c5565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610d5a8888888861127b565b925092509250610d6a8282611343565b50909695505050505050565b6001600160a01b0382165f9081526007602052604090208054600181019091558181146108e8576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016104d2565b604080518082019091525f80825260208201526001600160a01b0383165f9081526009602052604090206108be90836113fb565b6001600160a01b038416610e255760405163e602df0560e01b81525f60048201526024016104d2565b6001600160a01b038316610e4e57604051634a1406b160e11b81525f60048201526024016104d2565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561096257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ec091815260200190565b60405180910390a350505050565b6108e8838383611468565b5f815f03610ee857505f919050565b5f6001610ef4846114ce565b901c6001901b90506001818481610f0d57610f0d611d05565b048201901c90506001818481610f2557610f25611d05565b048201901c90506001818481610f3d57610f3d611d05565b048201901c90506001818481610f5557610f55611d05565b048201901c90506001818481610f6d57610f6d611d05565b048201901c90506001818481610f8557610f85611d05565b048201901c90506001818481610f9d57610f9d611d05565b048201901c90506108be81828581610fb757610fb7611d05565b04611561565b5f5b81831015611014575f610fd28484611576565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff1611156110005780925061100e565b61100b816001611cf2565b93505b50610fbf565b509392505050565b6001600160a01b0381165f9081526020819052604081205461045a565b816001600160a01b0316836001600160a01b03161415801561105a57505f81115b156108e8576001600160a01b03831615611101576001600160a01b0383165f908152600960205260408120819061109c906108d061109786611590565b6115c3565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516110f6929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156108e8576001600160a01b0382165f9081526009602052604081208190611139906108c561109786611590565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611193929190918252602082015260400190565b60405180910390a25050505050565b5f63ffffffff821115610b20576040516306dfcc6560e41b815260206004820152602481018390526044016104d2565b606060ff83146111ec576111e5836115fb565b905061045a565b8180546111f890611c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461122490611c4c565b801561126f5780601f106112465761010080835404028352916020019161126f565b820191905f5260205f20905b81548152906001019060200180831161125257829003601f168201915b5050505050905061045a565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112b457505f91506003905082611339565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611305573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661133057505f925060019150829050611339565b92505f91508190505b9450945094915050565b5f82600381111561135657611356611d19565b0361135f575050565b600182600381111561137357611373611d19565b036113915760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156113a5576113a5611d19565b036113c65760405163fce698f760e01b8152600481018290526024016104d2565b60038260038111156113da576113da611d19565b03610598576040516335e2f38360e21b8152600481018290526024016104d2565b604080518082019091525f8082526020820152825f018263ffffffff168154811061142857611428611d2d565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b611473838383611638565b6001600160a01b0383166114c3575f61148b60025490565b90506001600160d01b03808211156114c057604051630e58ae9360e11b815260048101839052602481018290526044016104d2565b50505b6108e883838361175e565b5f80608083901c156114e257608092831c92015b604083901c156114f457604092831c92015b602083901c1561150657602092831c92015b601083901c1561151857601092831c92015b600883901c1561152a57600892831c92015b600483901c1561153c57600492831c92015b600283901c1561154e57600292831c92015b600183901c1561045a5760010192915050565b5f81831061156f57816108be565b5090919050565b5f6115846002848418611d41565b6108be90848416611cf2565b5f6001600160d01b03821115610b20576040516306dfcc6560e41b815260d06004820152602481018390526044016104d2565b5f806115ee6115d061065b565b6115e66115dc88610ce7565b868863ffffffff16565b8791906117d3565b915091505b935093915050565b60605f611607836117e0565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b038316611662578060025f8282546116579190611cf2565b909155506116d29050565b6001600160a01b0383165f90815260208190526040902054818110156116b45760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104d2565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166116ee5760028054829003905561170c565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161175191815260200190565b60405180910390a3505050565b6001600160a01b0383166117805761177d600a6108c561109784611590565b50505b6001600160a01b0382166117a25761179f600a6108d061109784611590565b50505b6001600160a01b038381165f908152600860205260408082205485841683529120546108e892918216911683611039565b5f806115ee858585611807565b5f60ff8216601f81111561045a57604051632cd44ac360e21b815260040160405180910390fd5b82545f9081908015611923575f61182387610ba4600185611cdf565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561187757604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff8088169116036118c3578461189a88610ba4600186611cdf565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611913565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d81529190912094519151909216600160301b029216919091179101555b6020015192508391506115f39050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316600160301b0291909316179201919091559050816115f3565b5f81518084525f5b818110156119a157602081850181015186830182015201611985565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6108be602083018461197d565b80356001600160a01b03811681146119e8575f80fd5b919050565b5f80604083850312156119fe575f80fd5b611a07836119d2565b946020939093013593505050565b5f805f60608486031215611a27575f80fd5b611a30846119d2565b9250611a3e602085016119d2565b9150604084013590509250925092565b5f60208284031215611a5e575f80fd5b6108be826119d2565b60ff60f81b881681525f602060e06020840152611a8760e084018a61197d565b8381036040850152611a99818a61197d565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015611aec57835183529284019291840191600101611ad0565b50909c9b505050505050505050505050565b5f60208284031215611b0e575f80fd5b5035919050565b803560ff811681146119e8575f80fd5b5f805f805f8060c08789031215611b3a575f80fd5b611b43876119d2565b95506020870135945060408701359350611b5f60608801611b15565b92506080870135915060a087013590509295509295509295565b5f805f805f805f60e0888a031215611b8f575f80fd5b611b98886119d2565b9650611ba6602089016119d2565b95506040880135945060608801359350611bc260808901611b15565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611bef575f80fd5b611bf8836119d2565b9150611c06602084016119d2565b90509250929050565b5f8060408385031215611c20575f80fd5b611c29836119d2565b9150602083013563ffffffff81168114611c41575f80fd5b809150509250929050565b600181811c90821680611c6057607f821691505b602082108103611c7e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160d01b03818116838216019080821115611cb857611cb8611c84565b5092915050565b6001600160d01b03828116828216039080821115611cb857611cb8611c84565b8181038181111561045a5761045a611c84565b8082018082111561045a5761045a611c84565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f82611d5b57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220c7082b8fbc572b579329306376787db1d23f0103b55b8614624c9dacbdbe444c64736f6c63430008180033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724