[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "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": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "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": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "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": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "name": "setUp", "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" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612fdf62000104600039600081816113ec0152818161141501526115560152612fdf6000f3fe6080604052600436106102045760003560e01c806370a08231116101185780639ab24eb0116100a0578063c3cda5201161006f578063c3cda5201461060b578063d505accf1461062b578063dd62ed3e1461064b578063f1127ed81461066b578063f2fde38b146106b757600080fd5b80639ab24eb01461057a5780639dc29fac1461059a578063a9059cbb146105ba578063ad3cb1cc146105da57600080fd5b806384b0196e116100e757806384b0196e146104e55780638da5cb5b1461050d5780638e539e8c1461052257806391ddadf41461054257806395d89b411461056557600080fd5b806370a082311461047b578063715018a61461049b5780637ecebe00146104b05780638456cb59146104d057600080fd5b806340c10f191161019b578063562d190d1161016a578063562d190d146103a9578063587cde1e146103c95780635c19a95c146104015780635c975abb146104215780636fcfff451461044657600080fd5b806340c10f191461032a5780634bf5d7e91461034a5780634f1ef2861461038157806352d1902d1461039457600080fd5b8063313ce567116101d7578063313ce567146102c25780633644e515146102de5780633a46b1a8146102f35780633f4ba83a1461031357600080fd5b806306fdde0314610209578063095ea7b31461023457806318160ddd1461026457806323b872dd146102a2575b600080fd5b34801561021557600080fd5b5061021e6106d7565b60405161022b91906128c1565b60405180910390f35b34801561024057600080fd5b5061025461024f3660046128f0565b610780565b604051901515815260200161022b565b34801561027057600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b60405190815260200161022b565b3480156102ae57600080fd5b506102546102bd36600461291a565b61079a565b3480156102ce57600080fd5b506040516012815260200161022b565b3480156102ea57600080fd5b506102946107c0565b3480156102ff57600080fd5b5061029461030e3660046128f0565b6107cf565b34801561031f57600080fd5b5061032861085d565b005b34801561033657600080fd5b506103286103453660046128f0565b61086f565b34801561035657600080fd5b5060408051808201909152600e81526d06d6f64653d74696d657374616d760941b602082015261021e565b61032861038f3660046129e2565b610937565b3480156103a057600080fd5b50610294610952565b3480156103b557600080fd5b506103286103c4366004612a64565b61096f565b3480156103d557600080fd5b506103e96103e4366004612abe565b610b3b565b6040516001600160a01b03909116815260200161022b565b34801561040d57600080fd5b5061032861041c366004612abe565b610b66565b34801561042d57600080fd5b50600080516020612fb38339815191525460ff16610254565b34801561045257600080fd5b50610466610461366004612abe565b610b71565b60405163ffffffff909116815260200161022b565b34801561048757600080fd5b50610294610496366004612abe565b610b7c565b3480156104a757600080fd5b50610328610baf565b3480156104bc57600080fd5b506102946104cb366004612abe565b610bc1565b3480156104dc57600080fd5b50610328610bcc565b3480156104f157600080fd5b506104fa610bdc565b60405161022b9796959493929190612ad9565b34801561051957600080fd5b506103e9610c88565b34801561052e57600080fd5b5061029461053d366004612b6f565b610cb6565b34801561054e57600080fd5b5060405165ffffffffffff4216815260200161022b565b34801561057157600080fd5b5061021e610d28565b34801561058657600080fd5b50610294610595366004612abe565b610d67565b3480156105a657600080fd5b506103286105b53660046128f0565b610dc7565b3480156105c657600080fd5b506102546105d53660046128f0565b610e05565b3480156105e657600080fd5b5061021e604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561061757600080fd5b50610328610626366004612b99565b610e13565b34801561063757600080fd5b50610328610646366004612bf1565b610ec7565b34801561065757600080fd5b50610294610666366004612c5b565b610fe3565b34801561067757600080fd5b5061068b610686366004612c8e565b61102d565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161022b565b3480156106c357600080fd5b506103286106d2366004612abe565b61104b565b60606000600080516020612f538339815191525b90508060030180546106fc90612cce565b80601f016020809104026020016040519081016040528092919081815260200182805461072890612cce565b80156107755780601f1061074a57610100808354040283529160200191610775565b820191906000526020600020905b81548152906001019060200180831161075857829003601f168201915b505050505091505090565b60003361078e818585611089565b60019150505b92915050565b6000336107a885828561109b565b6107b3858585611101565b60019150505b9392505050565b60006107ca611160565b905090565b6000600080516020612f338339815191524265ffffffffffff8116841061081f57604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044015b60405180910390fd5b61084b61082b8561116a565b6001600160a01b03871660009081526001850160205260409020906111a1565b6001600160d01b031695945050505050565b610865611257565b61086d611289565b565b610877611257565b6108846002600019612d34565b816108ad7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6108b79190612d56565b11156108fd5760405162461bcd60e51b8152602060048201526015602482015274111a151bdad95b8e8818d85c08195e18d959591959605a1b6044820152606401610816565b6001600160a01b0382166109275760405163ec442f0560e01b815260006004820152602401610816565b610933600083836112e9565b5050565b61093f6113e1565b61094882611486565b610933828261148e565b600061095c61154b565b50600080516020612f9383398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109b55750825b905060008267ffffffffffffffff1660011480156109d25750303b155b9050811580156109e0575080155b156109fe5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2857845460ff60401b1916600160401b1785555b8651600003610a6f5760405162461bcd60e51b81526020600482015260136024820152724468546f6b656e3a206e616d6520656d70747960681b6044820152606401610816565b8551600003610ab85760405162461bcd60e51b81526020600482015260156024820152744468546f6b656e3a2073796d626f6c20656d70747960581b6044820152606401610816565b610ac28787611594565b610aca6115a6565b610ad3336115b6565b610adc876115c7565b610ae46115f2565b610aec6115f2565b8315610b3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6001600160a01b039081166000908152600080516020612f3383398151915260205260409020541690565b3361093381836115fa565b600061079482611684565b600080600080516020612f538339815191525b6001600160a01b0390931660009081526020939093525050604090205490565b610bb7611257565b61086d60006116d5565b600061079482611746565b610bd4611257565b61086d611751565b60006060808280808381600080516020612f738339815191528054909150158015610c0957506001810154155b610c4d5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610816565b610c5561179a565b610c5d6117d9565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6000600080516020612f338339815191524265ffffffffffff81168410610d0157604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610816565b610d17610d0d8561116a565b60028401906111a1565b6001600160d01b0316949350505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020612f53833981519152916106fc90612cce565b6001600160a01b03811660009081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120600080516020612f3383398151915290610db7906117f1565b6001600160d01b03169392505050565b610dcf611257565b6001600160a01b038216610df957604051634b637e8f60e11b815260006004820152602401610816565b610933826000836112e9565b60003361078e818585611101565b83421115610e3757604051632341d78760e11b815260048101859052602401610816565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610eb190610ea99060a0016040516020818303038152906040528051906020012061182a565b858585611857565b9050610ebd8187611885565b610b3281886115fa565b83421115610eeb5760405163313c898160e11b815260048101859052602401610816565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f1a8c6118c4565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610f758261182a565b90506000610f8582878787611857565b9050896001600160a01b0316816001600160a01b031614610fcc576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610816565b610fd78a8a8a611089565b50505050505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526107b98383611906565b611053611257565b6001600160a01b03811661107d57604051631e4fbdf760e01b815260006004820152602401610816565b611086816116d5565b50565b6110968383836001611971565b505050565b60006110a78484610fe3565b905060001981146110fb57818110156110ec57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610816565b6110fb84848484036000611971565b50505050565b6001600160a01b03831661112b57604051634b637e8f60e11b815260006004820152602401610816565b6001600160a01b0382166111555760405163ec442f0560e01b815260006004820152602401610816565b6110968383836112e9565b60006107ca611a59565b600065ffffffffffff82111561119d576040516306dfcc6560e41b81526030600482015260248101839052604401610816565b5090565b8154600090818160058111156112005760006111bc84611acd565b6111c69085612d69565b60008881526020902090915081015465ffffffffffff90811690871610156111f0578091506111fe565b6111fb816001612d56565b92505b505b600061120e87878585611bb5565b905080156112495761123387611225600184612d69565b600091825260209091200190565b54600160301b90046001600160d01b031661124c565b60005b979650505050505050565b33611260610c88565b6001600160a01b03161461086d5760405163118cdaa760e01b8152336004820152602401610816565b611291611c17565b600080516020612fb3833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b03831615806113295750611302610c88565b6001600160a01b0316336001600160a01b031614801561132957506001600160a01b038216155b806113445750600080516020612fb38339815191525460ff16155b6113895760405162461bcd60e51b81526020600482015260166024820152754468546f6b656e3a20217472616e7366657261626c6560501b6044820152606401610816565b600061139483610b7c565b90506113a1848484611c47565b6113ac848484611d85565b801580156113c657506113be83610b71565b63ffffffff16155b80156113d25750600082115b156110fb576110fb83846115fa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061146857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661145c600080516020612f93833981519152546001600160a01b031690565b6001600160a01b031614155b1561086d5760405163703e46dd60e11b815260040160405180910390fd5b611086611257565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114e8575060408051601f3d908101601f191682019092526114e591810190612d7c565b60015b61151057604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610816565b600080516020612f93833981519152811461154157604051632a87526960e21b815260048101829052602401610816565b6110968383611dfc565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461086d5760405163703e46dd60e11b815260040160405180910390fd5b61159c611e52565b6109338282611e9b565b6115ae611e52565b61086d611eec565b6115be611e52565b61108681611f0d565b6115cf611e52565b61108681604051806040016040528060018152602001603160f81b815250611f15565b61086d611e52565b600080516020612f33833981519152600061161484610b3b565b6001600160a01b0385811660008181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46110fb818461167f87611f76565b611f81565b6001600160a01b03811660009081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d016020526040812054600080516020612f33833981519152906107b9906120f6565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600061079482612127565b611759612150565b600080516020612fb3833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336112cb565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020612f73833981519152916106fc90612cce565b60606000600080516020612f738339815191526106eb565b805460009080156118215761180b83611225600184612d69565b54600160301b90046001600160d01b03166107b9565b60009392505050565b6000610794611837611160565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061186988888888612181565b9250925092506118798282612250565b50909695505050505050565b6000611890836118c4565b9050808214611096576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610816565b6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b604080518082018252600080825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01905291909120600080516020612f33833981519152906119699084612309565b949350505050565b600080516020612f538339815191526001600160a01b0385166119aa5760405163e602df0560e01b815260006004820152602401610816565b6001600160a01b0384166119d457604051634a1406b160e11b815260006004820152602401610816565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611a5257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611a4991815260200190565b60405180910390a35b5050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611a84612379565b611a8c6123e3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600081600003611adf57506000919050565b60006001611aec84612427565b901c6001901b90506001818481611b0557611b05612d08565b048201901c90506001818481611b1d57611b1d612d08565b048201901c90506001818481611b3557611b35612d08565b048201901c90506001818481611b4d57611b4d612d08565b048201901c90506001818481611b6557611b65612d08565b048201901c90506001818481611b7d57611b7d612d08565b048201901c90506001818481611b9557611b95612d08565b048201901c90506107b981828581611baf57611baf612d08565b046124bb565b60005b81831015611c0f576000611bcc84846124d1565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff161115611bfb57809250611c09565b611c06816001612d56565b93505b50611bb8565b509392505050565b600080516020612fb38339815191525460ff1661086d57604051638dfc202b60e01b815260040160405180910390fd5b600080516020612f538339815191526001600160a01b038416611c835781816002016000828254611c789190612d56565b90915550611cf59050565b6001600160a01b03841660009081526020829052604090205482811015611cd65760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610816565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611d13576002810180548390039055611d32565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d7791815260200190565b60405180910390a350505050565b600080516020612f338339815191526001600160a01b038416611dbd57611dba816002016124ec611db5856124f8565b61252c565b50505b6001600160a01b038316611de157611dde8160020161255e611db5856124f8565b50505b6110fb611ded85610b3b565b611df685610b3b565b84611f81565b611e058261256a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611e4a5761109682826125cf565b610933612645565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086d57604051631afcd79f60e31b815260040160405180910390fd5b611ea3611e52565b600080516020612f538339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611edd8482612de3565b50600481016110fb8382612de3565b611ef4611e52565b600080516020612fb3833981519152805460ff19169055565b611053611e52565b611f1d611e52565b600080516020612f738339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102611f578482612de3565b5060038101611f668382612de3565b5060008082556001909101555050565b600061079482610b7c565b600080516020612f338339815191526001600160a01b0384811690841614801590611fac5750600082115b156110fb576001600160a01b03841615612051576001600160a01b038416600090815260018201602052604081208190611fec9061255e611db5876124f8565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612046929190918252602082015260400190565b60405180910390a250505b6001600160a01b038316156110fb576001600160a01b03831660009081526001820160205260408120819061208c906124ec611db5876124f8565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516120e6929190918252602082015260400190565b60405180910390a2505050505050565b600063ffffffff82111561119d576040516306dfcc6560e41b81526020600482015260248101839052604401610816565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610b8f565b600080516020612fb38339815191525460ff161561086d5760405163d93c066560e01b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156121bc5750600091506003905082612246565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612210573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661223c57506000925060019150829050612246565b9250600091508190505b9450945094915050565b600082600381111561226457612264612ea3565b0361226d575050565b600182600381111561228157612281612ea3565b0361229f5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156122b3576122b3612ea3565b036122d45760405163fce698f760e01b815260048101829052602401610816565b60038260038111156122e8576122e8612ea3565b03610933576040516335e2f38360e21b815260048101829052602401610816565b6040805180820190915260008082526020820152826000018263ffffffff168154811061233857612338612eb9565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b6000600080516020612f738339815191528161239361179a565b8051909150156123ab57805160209091012092915050565b815480156123ba579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020612f73833981519152816123fd6117d9565b80519091501561241557805160209091012092915050565b600182015480156123ba579392505050565b600080608083901c1561243c57608092831c92015b604083901c1561244e57604092831c92015b602083901c1561246057602092831c92015b601083901c1561247257601092831c92015b600883901c1561248457600892831c92015b600483901c1561249657600492831c92015b600283901c156124a857600292831c92015b600183901c156107945760010192915050565b60008183106124ca57816107b9565b5090919050565b60006124e06002848418612d34565b6107b990848416612d56565b60006107b98284612ecf565b60006001600160d01b0382111561119d576040516306dfcc6560e41b815260d0600482015260248101839052604401610816565b6000806125514261254961253f886117f1565b868863ffffffff16565b879190612664565b915091505b935093915050565b60006107b98284612ef6565b806001600160a01b03163b6000036125a057604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610816565b600080516020612f9383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125ec9190612f16565b600060405180830381855af49150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509150915061263c858383612672565b95945050505050565b341561086d5760405163b398979f60e01b815260040160405180910390fd5b6000806125518585856126ce565b6060826126875761268282612848565b6107b9565b815115801561269e57506001600160a01b0384163b155b156126c757604051639996b31560e01b81526001600160a01b0385166004820152602401610816565b50806107b9565b8254600090819080156127ed5760006126ec87611225600185612d69565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561274057604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff80881691160361278c578461276388611225600186612d69565b80546001600160d01b0392909216600160301b0265ffffffffffff9092169190911790556127dd565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506125569050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612556565b8051156128585780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b8381101561288c578181015183820152602001612874565b50506000910152565b600081518084526128ad816020860160208601612871565b601f01601f19169290920160200192915050565b6020815260006107b96020830184612895565b80356001600160a01b03811681146128eb57600080fd5b919050565b6000806040838503121561290357600080fd5b61290c836128d4565b946020939093013593505050565b60008060006060848603121561292f57600080fd5b612938846128d4565b9250612946602085016128d4565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561298757612987612956565b604051601f8501601f19908116603f011681019082821181831017156129af576129af612956565b816040528093508581528686860111156129c857600080fd5b858560208301376000602087830101525050509392505050565b600080604083850312156129f557600080fd5b6129fe836128d4565b9150602083013567ffffffffffffffff811115612a1a57600080fd5b8301601f81018513612a2b57600080fd5b612a3a8582356020840161296c565b9150509250929050565b600082601f830112612a5557600080fd5b6107b98383356020850161296c565b60008060408385031215612a7757600080fd5b823567ffffffffffffffff80821115612a8f57600080fd5b612a9b86838701612a44565b93506020850135915080821115612ab157600080fd5b50612a3a85828601612a44565b600060208284031215612ad057600080fd5b6107b9826128d4565b60ff60f81b881681526000602060e081840152612af960e084018a612895565b8381036040850152612b0b818a612895565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612b5d57835183529284019291840191600101612b41565b50909c9b505050505050505050505050565b600060208284031215612b8157600080fd5b5035919050565b803560ff811681146128eb57600080fd5b60008060008060008060c08789031215612bb257600080fd5b612bbb876128d4565b95506020870135945060408701359350612bd760608801612b88565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612c0c57600080fd5b612c15886128d4565b9650612c23602089016128d4565b95506040880135945060608801359350612c3f60808901612b88565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612c6e57600080fd5b612c77836128d4565b9150612c85602084016128d4565b90509250929050565b60008060408385031215612ca157600080fd5b612caa836128d4565b9150602083013563ffffffff81168114612cc357600080fd5b809150509250929050565b600181811c90821680612ce257607f821691505b602082108103612d0257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082612d5157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561079457610794612d1e565b8181038181111561079457610794612d1e565b600060208284031215612d8e57600080fd5b5051919050565b601f82111561109657600081815260208120601f850160051c81016020861015612dbc5750805b601f850160051c820191505b81811015612ddb57828155600101612dc8565b505050505050565b815167ffffffffffffffff811115612dfd57612dfd612956565b612e1181612e0b8454612cce565b84612d95565b602080601f831160018114612e465760008415612e2e5750858301515b600019600386901b1c1916600185901b178555612ddb565b600085815260208120601f198616915b82811015612e7557888601518255948401946001909101908401612e56565b5085821015612e935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160d01b03818116838216019080821115612eef57612eef612d1e565b5092915050565b6001600160d01b03828116828216039080821115612eef57612eef612d1e565b60008251612f28818460208701612871565b919091019291505056fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c6343000814000a