[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "DelegateLengthDiffer", "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": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "maxAllowed", "type": "uint256" } ], "name": "ExceededPointBound", "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": [], "name": "Paused", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [], "name": "UnexpectedInitializeParams", "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": "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": "DEFAULT_BASE_POINTS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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" }, { "internalType": "uint256", "name": "points", "type": "uint256" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "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" }, { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegatePoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "delegateeArray", "type": "address[]" }, { "internalType": "uint256[]", "name": "pointsArray", "type": "uint256[]" } ], "name": "delegateTuple", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegatees", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "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": [ { "components": [ { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "status", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "internalType": "struct L1Cook.Init", "name": "init", "type": "tuple" } ], "name": "initialize", "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": "status", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "points", "type": "uint256" } ], "name": "undelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a0604052606460805234801562000015575f80fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612ea7620001555f395f8181610377015281816104a1015281816104dd015281816107440152818161078001528181610869015281816108a50152818161096901528181610e2901528181610f6801528181610fb801528181611230015281816121330152818161218001526122200152612ea75ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636fcfff45116100fe5780639019bde81161009e578063a9059cbb1161006e578063a9059cbb14610427578063c3cda5201461043a578063dd62ed3e1461044d578063f1127ed814610460575f80fd5b80639019bde8146103da57806391ddadf4146103ed57806395d89b411461040c5780639ab24eb014610414575f80fd5b80637b22ffff116100d95780637b22ffff146103725780637ecebe001461039957806384b0196e146103ac5780638e539e8c146103c7575f80fd5b80636fcfff451461032457806370a082311461034c57806373455e0c1461035f575f80fd5b8063313ce567116101695780634d99dd16116101445780634d99dd16146102d857806352005465146102eb578063587cde1e146102fe5780635c19a95c14610311575f80fd5b8063313ce567146102ae5780633a46b1a8146102bd5780634bf5d7e9146102d0575f80fd5b806311ec8b2b116101a457806311ec8b2b1461022057806318160ddd14610240578063200d2ed21461027157806323b872dd1461029b575f80fd5b8063026e402b146101ca57806306fdde03146101df578063095ea7b3146101fd575b5f80fd5b6101dd6101d8366004612645565b61049f565b005b6101e761051f565b6040516101f491906126b0565b60405180910390f35b61021061020b366004612645565b6105c4565b60405190151581526020016101f4565b61023361022e3660046126c2565b6105dd565b6040516101f491906126db565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016101f4565b5f54610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b6102106102a936600461271b565b610617565b604051601281526020016101f4565b6102636102cb366004612645565b61063a565b6101e76106ca565b6101dd6102e6366004612645565b610742565b6101dd6102f936600461284d565b6107b8565b61028361030c3660046126c2565b610927565b6101dd61031f3660046126c2565b610961565b6103376103323660046126c2565b610991565b60405163ffffffff90911681526020016101f4565b61026361035a3660046126c2565b61099b565b6101dd61036d366004612973565b6109cb565b6102637f000000000000000000000000000000000000000000000000000000000000000081565b6102636103a73660046126c2565b610b3c565b6103b4610b64565b6040516101f49796959493929190612a2d565b6102636103d5366004612ac1565b610c0d565b6102636103e8366004612ad8565b610c87565b6103f5610cc2565b60405165ffffffffffff90911681526020016101f4565b6101e7610cd0565b6102636104223660046126c2565b610d0e565b610210610435366004612645565b610d6c565b6101dd610448366004612b09565b610d79565b61026361045b366004612ad8565b610e56565b61047361046e366004612b64565b610e9f565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016101f4565b7f000000000000000000000000000000000000000000000000000000000000000081111561050e57604051636c415eb360e01b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b3361051a818484610ebc565b505050565b60605f5f80516020612e328339815191525b905080600301805461054290612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90612ba1565b80156105b95780601f10610590576101008083540402835291602001916105b9565b820191905f5260205f20905b81548152906001019060200180831161059c57829003601f168201915b505050505091505090565b5f336105d181858561102f565b60019150505b92915050565b6001600160a01b0381165f9081525f80516020612e1283398151915260208190526040909120606091906106109061103c565b9392505050565b5f33610624858285611048565b61062f8585856110ab565b506001949350505050565b5f5f80516020612e1283398151915281610652610cc2565b90508065ffffffffffff16841061068d57604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610505565b6106b861069985611108565b6001600160a01b0387165f90815260018501602052604090209061113e565b6001600160d01b031695945050505050565b60606106d46111ee565b65ffffffffffff166106e4610cc2565b65ffffffffffff161461070a576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b7f00000000000000000000000000000000000000000000000000000000000000008111156107ac57604051636c415eb360e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610505565b3361051a8184846111f8565b80518251146107da57604051630768fe7960e11b815260040160405180910390fd5b335f806107e6836105dd565b90505f5b8151811015610834576108168483838151811061080957610809612bd9565b6020026020010151610c87565b6108209084612c01565b92508061082c81612c14565b9150506107ea565b505f5b855181101561091f5784818151811061085257610852612bd9565b6020026020010151836108659190612c01565b92507f00000000000000000000000000000000000000000000000000000000000000008311156108d157604051636c415eb360e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610505565b61090d8682815181106108e6576108e6612bd9565b602002602001015186838151811061090057610900612bd9565b602002602001015161049f565b8061091781612c14565b915050610837565b505050505050565b60405162461bcd60e51b815260206004820152600d60248201526c139bdd0814dd5c1c1bdc9d1959609a1b60448201525f90606401610505565b3361098d81837f0000000000000000000000000000000000000000000000000000000000000000610ebc565b5050565b5f6105d7826112ce565b5f805f80516020612e328339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a155750805467ffffffffffffffff808416911610155b15610a335760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815582516001600160a01b03161580610a77575060208301516001600160a01b0316155b15610a9557604051636e03bddf60e01b815260040160405180910390fd5b610a9d61131d565b610aa561131d565b610ab783604001518460600151611327565b610ac8835f01518460800151611339565b6020838101515f80546001600160a01b0319166001600160a01b03909216919091179055815468ff00000000000000001916825560405167ffffffffffffffff841681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2910160405180910390a1505050565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006109ac565b5f60608082808083815f80516020612e528339815191528054909150158015610b8f57506001810154155b610bd35760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610505565b610bdb61136d565b610be36113ab565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f5f80516020612e1283398151915281610c25610cc2565b90508065ffffffffffff168410610c6057604051637669fc0f60e11b81526004810185905265ffffffffffff82166024820152604401610505565b610c76610c6c85611108565b600284019061113e565b6001600160d01b0316949350505050565b6001600160a01b0382165f9081525f80516020612e128339815191526020819052604082208290610cb890856113c1565b9695505050505050565b5f610ccb6111ee565b905090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f80516020612e328339815191529161054290612ba1565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f80516020612e1283398151915290610d5c906113e7565b6001600160d01b03169392505050565b5f336105d18185856110ab565b83421115610d9d57604051632341d78760e11b815260048101859052602401610505565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90610e1690610e0e9060a0016040516020818303038152906040528051906020012061141e565b85858561144a565b9050610e228187611476565b610e4d81887f0000000000000000000000000000000000000000000000000000000000000000610ebc565b50505050505050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b604080518082019091525f808252602082015261061083836114e7565b5f80516020612e128339815191525f610ed58585610c87565b9050805f03610f19576040516001600160a01b03808616919087169081907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f905f90a45b5f80610f24876105dd565b90505f5b8151811015610f6557610f478883838151811061080957610809612bd9565b610f519084612c01565b925080610f5d81612c14565b915050610f28565b507f0000000000000000000000000000000000000000000000000000000000000000610f918684612c01565b1115610fe457610fa18583612c01565b604051636c415eb360e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610505565b61101086610ff28786612c01565b6001600160a01b038a165f9081526020889052604090209190611550565b50610e4d8787876110208b611565565b61102a9190612c2c565b61156f565b61051a83838360016116e5565b60605f610610836117c8565b5f6110538484610e56565b90505f1981146110a5578181101561109757604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610505565b6110a584848484035f6116e5565b50505050565b6001600160a01b0383166110d457604051634b637e8f60e11b81525f6004820152602401610505565b6001600160a01b0382166110fd5760405163ec442f0560e01b81525f6004820152602401610505565b61051a8383836117d3565b5f65ffffffffffff82111561113a576040516306dfcc6560e41b81526030600482015260248101839052604401610505565b5090565b81545f908181600581111561119a575f61115784611883565b6111619085612c43565b5f8881526020902090915081015465ffffffffffff908116908716101561118a57809150611198565b611195816001612c01565b92505b505b5f6111a787878585611967565b905080156111e1576111cb876111be600184612c43565b5f91825260209091200190565b54600160301b90046001600160d01b03166111e3565b5f5b979650505050505050565b5f610ccb43611108565b5f80516020612e128339815191525f6112118585610c87565b90508281101561125c57604051636c415eb360e01b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610505565b82810361128a576001600160a01b0385165f90815260208390526040902061128490856119c6565b506112b8565b6112b6846112988584612c43565b6001600160a01b0388165f9081526020869052604090209190611550565b505b6112c784868561102089611565565b5050505050565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120545f80516020612e1283398151915290610610906119da565b611325611a0a565b565b61132f611a0a565b61098d8282611a53565b6001600160a01b0382166113625760405163ec442f0560e01b81525f6004820152602401610505565b61098d5f83836117d3565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f80516020612e528339815191529161054290612ba1565b60605f5f80516020612e52833981519152610531565b5f8080806113d8866001600160a01b038716611aa3565b909450925050505b9250929050565b80545f90801561141657611400836111be600184612c43565b54600160301b90046001600160d01b0316610610565b5f9392505050565b5f6105d761142a611adb565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061145a88888888611ae4565b92509250925061146a8282611bac565b50909695505050505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915581811461051a576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610505565b6040805180820182525f80825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d019052919091205f80516020612e12833981519152906115489084611c64565b949350505050565b5f611548846001600160a01b03851684611cd1565b5f6105d78261099b565b5f80516020612e128339815191526001600160a01b038481169084161480159061159857505f82115b156110a5576001600160a01b03841615611641576001600160a01b0384165f908152600182016020526040812081906115dc90611ced6115d787611cf8565b611d2b565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611636929190918252602082015260400190565b60405180910390a250505b6001600160a01b038316156110a5576001600160a01b0383165f9081526001820160205260408120819061167b90611d636115d787611cf8565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516116d5929190918252602082015260400190565b60405180910390a2505050505050565b5f80516020612e328339815191526001600160a01b03851661171c5760405163e602df0560e01b81525f6004820152602401610505565b6001600160a01b03841661174557604051634a1406b160e11b81525f6004820152602401610505565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156112c757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516117b991815260200190565b60405180910390a35050505050565b60606105d782611d6e565b5f546001600160a01b03163b1580159061185a57505f8054906101000a90046001600160a01b03166001600160a01b031663a1a1ef436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611836573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a9190612c56565b15611878576040516313d0ff5960e31b815260040160405180910390fd5b61051a838383611d7a565b5f815f0361189257505f919050565b5f600161189e84611dff565b901c6001901b905060018184816118b7576118b7612c75565b048201901c905060018184816118cf576118cf612c75565b048201901c905060018184816118e7576118e7612c75565b048201901c905060018184816118ff576118ff612c75565b048201901c9050600181848161191757611917612c75565b048201901c9050600181848161192f5761192f612c75565b048201901c9050600181848161194757611947612c75565b048201901c90506106108182858161196157611961612c75565b04611e92565b5f5b818310156119be575f61197c8484611ea7565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff1611156119aa578092506119b8565b6119b5816001612c01565b93505b50611969565b509392505050565b5f610610836001600160a01b038416611ec1565b5f63ffffffff82111561113a576040516306dfcc6560e41b81526020600482015260248101839052604401610505565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661132557604051631afcd79f60e31b815260040160405180910390fd5b611a5b611a0a565b5f80516020612e328339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611a948482612cce565b50600481016110a58382612cce565b5f818152600283016020526040812054819080611ad057611ac48585611edd565b92505f91506113e09050565b6001925090506113e0565b5f610ccb611ee8565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611b1d57505f91506003905082611ba2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611b6e573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611b9957505f925060019150829050611ba2565b92505f91508190505b9450945094915050565b5f826003811115611bbf57611bbf612d8a565b03611bc8575050565b6001826003811115611bdc57611bdc612d8a565b03611bfa5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611c0e57611c0e612d8a565b03611c2f5760405163fce698f760e01b815260048101829052602401610505565b6003826003811115611c4357611c43612d8a565b0361098d576040516335e2f38360e21b815260048101829052602401610505565b604080518082019091525f8082526020820152825f018263ffffffff1681548110611c9157611c91612bd9565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b5f82815260028401602052604081208290556115488484611f5b565b5f6106108284612d9e565b5f6001600160d01b0382111561113a576040516306dfcc6560e41b815260d0600482015260248101839052604401610505565b5f80611d56611d38610cc2565b611d4e611d44886113e7565b868863ffffffff16565b879190611f66565b915091505b935093915050565b5f6106108284612dbe565b60605f61061083611f73565b611d85838383611fcc565b6001600160a01b038316611df4575f611dbc7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90506001600160d01b0380821115611df157604051630e58ae9360e11b81526004810183905260248101829052604401610505565b50505b61051a838383612105565b5f80608083901c15611e1357608092831c92015b604083901c15611e2557604092831c92015b602083901c15611e3757602092831c92015b601083901c15611e4957601092831c92015b600883901c15611e5b57600892831c92015b600483901c15611e6d57600492831c92015b600283901c15611e7f57600292831c92015b600183901c156105d75760010192915050565b5f818310611ea05781610610565b5090919050565b5f611eb56002848418612dde565b61061090848416612c01565b5f818152600283016020526040812081905561061083836122b2565b5f61061083836122bd565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611f126122d4565b611f1a61233c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f610610838361237e565b5f80611d568585856123ca565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611fc057602002820191905f5260205f20905b815481526020019060010190808311611fac575b50505050509050919050565b5f80516020612e328339815191526001600160a01b0384166120065781816002015f828254611ffb9190612c01565b909155506120769050565b6001600160a01b0384165f90815260208290526040902054828110156120585760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610505565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166120945760028101805483900390556120b2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120f791815260200190565b60405180910390a350505050565b5f80516020612e128339815191526001600160a01b0384166121605761215d60028201611d636115d76121587f000000000000000000000000000000000000000000000000000000000000000087612c2c565b611cf8565b50505b6001600160a01b0383166121a8576121a560028201611ced6115d76121587f000000000000000000000000000000000000000000000000000000000000000087612c2c565b50505b5f6121b2856105dd565b90505f5b8151811015612215575f6121d68784848151811061080957610809612bd9565b90506122028383815181106121ed576121ed612bd9565b602002602001015188838861102a9190612c2c565b508061220d81612c14565b9150506121b6565b50612245858561102a7f000000000000000000000000000000000000000000000000000000000000000087612c2c565b5f61224f856105dd565b90505f5b8151811015610e4d575f6122738784848151811061080957610809612bd9565b905061229f8784848151811061228b5761228b612bd9565b6020026020010151838961102a9190612c2c565b50806122aa81612c14565b915050612253565b5f6106108383612540565b5f8181526001830160205260408120541515610610565b5f5f80516020612e52833981519152816122ec61136d565b80519091501561230457805160209091012092915050565b81548015612313579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f80516020612e52833981519152816123546113ab565b80519091501561236c57805160209091012092915050565b60018201548015612313579392505050565b5f8181526001830160205260408120546123c357508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105d7565b505f6105d7565b82545f90819080156124e6575f6123e6876111be600185612c43565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561243a57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612486578461245d886111be600186612c43565b80546001600160d01b0392909216600160301b0265ffffffffffff9092169190911790556124d6565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d81529190912094519151909216600160301b029216919091179101555b602001519250839150611d5b9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316600160301b029190931617920191909155905081611d5b565b5f818152600183016020526040812054801561261a575f612562600183612c43565b85549091505f9061257590600190612c43565b90508082146125d4575f865f01828154811061259357612593612bd9565b905f5260205f200154905080875f0184815481106125b3576125b3612bd9565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125e5576125e5612dfd565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105d7565b5f9150506105d7565b5092915050565b80356001600160a01b0381168114612640575f80fd5b919050565b5f8060408385031215612656575f80fd5b61265f8361262a565b946020939093013593505050565b5f81518084525f5b8181101561269157602081850181015186830182015201612675565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610610602083018461266d565b5f602082840312156126d2575f80fd5b6106108261262a565b602080825282518282018190525f9190848201906040850190845b8181101561146a5783516001600160a01b0316835292840192918401916001016126f6565b5f805f6060848603121561272d575f80fd5b6127368461262a565b92506127446020850161262a565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff8111828210171561278b5761278b612754565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127ba576127ba612754565b604052919050565b5f67ffffffffffffffff8211156127db576127db612754565b5060051b60200190565b5f82601f8301126127f4575f80fd5b81356020612809612804836127c2565b612791565b82815260059290921b84018101918181019086841115612827575f80fd5b8286015b84811015612842578035835291830191830161282b565b509695505050505050565b5f806040838503121561285e575f80fd5b823567ffffffffffffffff80821115612875575f80fd5b818501915085601f830112612888575f80fd5b81356020612898612804836127c2565b82815260059290921b840181019181810190898411156128b6575f80fd5b948201945b838610156128db576128cc8661262a565b825294820194908201906128bb565b965050860135925050808211156128f0575f80fd5b506128fd858286016127e5565b9150509250929050565b5f82601f830112612916575f80fd5b813567ffffffffffffffff81111561293057612930612754565b612943601f8201601f1916602001612791565b818152846020838601011115612957575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612983575f80fd5b813567ffffffffffffffff8082111561299a575f80fd5b9083019060a082860312156129ad575f80fd5b6129b5612768565b6129be8361262a565b81526129cc6020840161262a565b60208201526040830135828111156129e2575f80fd5b6129ee87828601612907565b604083015250606083013582811115612a05575f80fd5b612a1187828601612907565b6060830152506080830135608082015280935050505092915050565b60ff60f81b881681525f602060e081840152612a4c60e084018a61266d565b8381036040850152612a5e818a61266d565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015612aaf57835183529284019291840191600101612a93565b50909c9b505050505050505050505050565b5f60208284031215612ad1575f80fd5b5035919050565b5f8060408385031215612ae9575f80fd5b612af28361262a565b9150612b006020840161262a565b90509250929050565b5f805f805f8060c08789031215612b1e575f80fd5b612b278761262a565b95506020870135945060408701359350606087013560ff81168114612b4a575f80fd5b9598949750929560808101359460a0909101359350915050565b5f8060408385031215612b75575f80fd5b612b7e8361262a565b9150602083013563ffffffff81168114612b96575f80fd5b809150509250929050565b600181811c90821680612bb557607f821691505b602082108103612bd357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156105d7576105d7612bed565b5f60018201612c2557612c25612bed565b5060010190565b80820281158282048414176105d7576105d7612bed565b818103818111156105d7576105d7612bed565b5f60208284031215612c66575f80fd5b81518015158114610610575f80fd5b634e487b7160e01b5f52601260045260245ffd5b601f82111561051a575f81815260208120601f850160051c81016020861015612caf5750805b601f850160051c820191505b8181101561091f57828155600101612cbb565b815167ffffffffffffffff811115612ce857612ce8612754565b612cfc81612cf68454612ba1565b84612c89565b602080601f831160018114612d2f575f8415612d185750858301515b5f19600386901b1c1916600185901b17855561091f565b5f85815260208120601f198616915b82811015612d5d57888601518255948401946001909101908401612d3e565b5085821015612d7a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffd5b6001600160d01b0382811682821603908082111561262357612623612bed565b6001600160d01b0381811683821601908082111561262357612623612bed565b5f82612df857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603160045260245ffdfee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220d827d1e731bafb317db9c332e715efef0019e86c2fd273e5a052ede437a337ec64736f6c63430008140033