Loading
[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "FractionBeMoreThat10000", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "EmergencyTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "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": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValidator", "type": "address" } ], "name": "TransferValidatorUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "getAddressData", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "numberMinted", "type": "uint256" }, { "internalType": "uint256", "name": "numberBurned", "type": "uint256" } ], "internalType": "struct IDegenToonzV1.AddressData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_addresses", "type": "address[]" } ], "name": "getAddressesData", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "numberMinted", "type": "uint256" }, { "internalType": "uint256", "name": "numberBurned", "type": "uint256" } ], "internalType": "struct IDegenToonzV1.AddressData[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getTokenData", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" } ], "internalType": "struct IDegenToonzV1.TokenData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startId", "type": "uint256" }, { "internalType": "uint256", "name": "_endId", "type": "uint256" } ], "name": "getTokensData", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" } ], "internalType": "struct IDegenToonzV1.TokenData[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_startId", "type": "uint256" }, { "internalType": "uint256", "name": "_endId", "type": "uint256" }, { "internalType": "uint256", "name": "_startBalance", "type": "uint256" } ], "name": "getTokensDataOfOwner", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" } ], "internalType": "struct IDegenToonzV1.TokenData[]", "name": "tokensData", "type": "tuple[]" }, { "internalType": "bool", "name": "hasMoreResults", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTransferValidationFunction", "outputs": [ { "internalType": "bytes4", "name": "functionSignature", "type": "bytes4" }, { "internalType": "bool", "name": "isViewFunction", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getTransferValidator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" } ], "name": "safeEmergencyTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_fraction", "type": "uint256" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "validator", "type": "address" } ], "name": "setTransferValidator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uriPrefix", "type": "string" } ], "name": "setUriPrefix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uriSuffix", "type": "string" } ], "name": "setUriSuffix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b506129e6806100206000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063a9fc664e116100a0578063c87b56dd1161006f578063c87b56dd14610632578063d547741f14610652578063d6e426d614610672578063e985e9c51461069f578063f2fde38b146106bf57600080fd5b8063a9fc664e146105a4578063af172b60146105c4578063b09afec1146105f2578063b88d4fde1461061f57600080fd5b80638fd12480116100e75780638fd124801461050d57806391d148541461053a57806395d89b411461055a578063a217fddf1461056f578063a22cb4651461058457600080fd5b8063715018a61461049a5780637ec4a659146104af5780638c7ea24b146104cf5780638da5cb5b146104ef57600080fd5b806323b872dd1161019b57806336568abe1161016a57806336568abe1461040757806342842e0e146104275780636352211e1461043a5780636c5deca61461045a57806370a082311461047a57600080fd5b806323b872dd14610365578063248a9ca3146103785780632a55205a146103a85780632f2ff15d146103e757600080fd5b8063098144d4116101e2578063098144d4146102b85780630d705df6146102cd578063165abc37146102f557806316ba10e01461032257806318160ddd1461034257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046120b4565b6106df565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e61071d565b6040516102409190612129565b34801561027757600080fd5b5061028b61028636600461213c565b6107b8565b6040516001600160a01b039091168152602001610240565b6102b66102b136600461216c565b610805565b005b3480156102c457600080fd5b5061028b610815565b3480156102d957600080fd5b506040805163657711f560e11b81526001602082015201610240565b34801561030157600080fd5b50610315610310366004612196565b610843565b6040516102409190612223565b34801561032e57600080fd5b506102b661033d3660046122d3565b61090f565b34801561034e57600080fd5b50610357610923565b604051908152602001610240565b6102b661037336600461231b565b610943565b34801561038457600080fd5b5061035761039336600461213c565b60009081526097602052604090206001015490565b3480156103b457600080fd5b506103c86103c3366004612196565b610b47565b604080516001600160a01b039093168352602083019190915201610240565b3480156103f357600080fd5b506102b6610402366004612357565b610bbd565b34801561041357600080fd5b506102b6610422366004612357565b610be7565b6102b661043536600461231b565b610c66565b34801561044657600080fd5b5061028b61045536600461213c565b610c81565b34801561046657600080fd5b506102b66104753660046123a6565b610c8c565b34801561048657600080fd5b5061035761049536600461244e565b610de2565b3480156104a657600080fd5b506102b6610e4a565b3480156104bb57600080fd5b506102b66104ca3660046122d3565b610e5e565b3480156104db57600080fd5b506102b66104ea36600461216c565b610e72565b3480156104fb57600080fd5b506033546001600160a01b031661028b565b34801561051957600080fd5b5061052d61052836600461244e565b610e87565b6040516102409190612469565b34801561054657600080fd5b50610234610555366004612357565b610f02565b34801561056657600080fd5b5061025e610f2d565b34801561057b57600080fd5b50610357600081565b34801561059057600080fd5b506102b661059f36600461249d565b610f45565b3480156105b057600080fd5b506102b66105bf36600461244e565b610fc2565b3480156105d057600080fd5b506105e46105df3660046124d9565b610fd6565b604051610240929190612512565b3480156105fe57600080fd5b5061061261060d36600461213c565b611100565b6040516102409190612536565b6102b661062d366004612569565b61115f565b34801561063e57600080fd5b5061025e61064d36600461213c565b6111a9565b34801561065e57600080fd5b506102b661066d366004612357565b6111da565b34801561067e57600080fd5b5061069261068d3660046125e4565b6111ff565b604051610240919061267b565b3480156106ab57600080fd5b506102346106ba3660046126f0565b6112e1565b3480156106cb57600080fd5b506102b66106da36600461244e565b61131e565b60006106ea82611397565b806106f957506106f9826113e5565b8061070857506107088261141b565b80610717575061071782611451565b92915050565b6060610727611486565b60020180546107359061271a565b80601f01602080910402602001604051908101604052809291908181526020018280546107619061271a565b80156107ae5780601f10610783576101008083540402835291602001916107ae565b820191906000526020600020905b81548152906001019060200180831161079157829003601f168201915b5050505050905090565b60006107c3826114aa565b6107e0576040516333d1c03960e21b815260040160405180910390fd5b6107e8611486565b60009283526006016020525060409020546001600160a01b031690565b610811828260016114f3565b5050565b7fa138636e88da6c6ded6c0c14d57c44347e2798f30affaf25542a496dcff66b16546001600160a01b031690565b60606000610851848461276a565b61085c906001612781565b90506000816001600160401b0381111561087857610878612236565b6040519080825280602002602001820160405280156108c357816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816108965790505b50905060005b6108d661060d8783612781565b8282815181106108e8576108e8612799565b6020026020010181905250806108fd906127af565b90508281036108c95750949350505050565b600061091a816115a8565b610811826115b2565b6000600161092f611486565b6001015461093b611486565b540303919050565b600061094e826115e4565b9050836001600160a01b0316816001600160a01b0316146109815760405162a1148160e81b815260040160405180910390fd5b60008061098d84611691565b915091506109b2818761099d3390565b6001600160a01b039081169116811491141790565b6109dd576109c086336112e1565b6109dd57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610a0457604051633a954ecd60e21b815260040160405180910390fd5b610a1186868660016116b9565b8015610a1c57600082555b610a24611486565b6001600160a01b0387166000908152600591909101602052604090208054600019019055610a50611486565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b17610a87611486565b60008681526004919091016020526040812091909155600160e11b84169003610afd5760018401610ab6611486565b600082815260049190910160205260408120549003610afb57610ad7611486565b548114610afb5783610ae7611486565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600080806127107f317162611eb5bfbd492dc5934870b94626522f302cb20f4f0ee9d856d2ce9b4060010154610b7d90866127c8565b610b8791906127e7565b7f317162611eb5bfbd492dc5934870b94626522f302cb20f4f0ee9d856d2ce9b40546001600160a01b0316969095509350505050565b600082815260976020526040902060010154610bd8816115a8565b610be28383611780565b505050565b6001600160a01b0381163314610c5c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108118282611806565b610be28383836040518060200160405280600081525061115f565b6000610717826115e4565b60005b600060a0610cb5848481518110610ca857610ca8612799565b602002602001015161186d565b602001516001600160401b0316901b9050610cea3385858581518110610cdd57610cdd612799565b6020026020010151610c66565b8067ffffffffffffffff60a01b19610d00611486565b6004016000868681518110610d1757610d17612799565b60200260200101518152602001908152602001600020541617610d38611486565b6004016000858581518110610d4f57610d4f612799565b6020026020010151815260200190815260200160002081905550828281518110610d7b57610d7b612799565b6020026020010151846001600160a01b0316336001600160a01b03167fe73b77795c13bee9883a40de3973381a54190f3bc777dcab3a8206d302afc78460405160405180910390a4610dcc826127af565b915081835103610ddc5750505050565b50610c8f565b60006001600160a01b038216610e0b576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610e1b611486565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610e526118e4565b610e5c600061193e565b565b6000610e69816115a8565b61081182611990565b6000610e7d816115a8565b610be283836119c1565b610ebb604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060800160405280836001600160a01b03168152602001610ede84610de2565b8152602001610eec84611a48565b8152602001610efa84611a8d565b905292915050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060610f37611486565b60030180546107359061271a565b80610f4e611486565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610fcd816115a8565b61081182611aa1565b60606000610fe4858561276a565b610fef906001612781565b6001600160401b0381111561100657611006612236565b60405190808252806020026020018201604052801561105157816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816110245790505b5091508460008461106189610de2565b61106b919061276a565b905060005b600061107b84611100565b9050896001600160a01b031681602001516001600160a01b0316036110c4578086836110a6816127af565b9450815181106110b8576110b8612799565b60200260200101819052505b828214806110dc5750836110d7816127af565b945088145b156110e757506110ed565b50611070565b8085529398931415965091945050505050565b60408051606081018252600080825260208201819052918101829052906111268361186d565b6040805160608101825294855281516001600160a01b0316602080870191909152909101516001600160401b0316908401525090919050565b61116a848484610943565b6001600160a01b0383163b156111a35761118684848484611b2d565b6111a3576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111b4826114aa565b6111d157604051630a14c4b560e41b815260040160405180910390fd5b61071782611c19565b6000828152609760205260409020600101546111f5816115a8565b610be28383611806565b6060600082516001600160401b0381111561121c5761121c612236565b60405190808252806020026020018201604052801561128157816020015b61126e604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b81526020019060019003908161123a5790505b50905060005b6112a984828151811061129c5761129c612799565b6020026020010151610e87565b8282815181106112bb576112bb612799565b6020026020010181905250806112d0906127af565b905080845103611287575092915050565b60006112eb611486565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6113266118e4565b6001600160a01b03811661138b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c53565b6113948161193e565b50565b60006301ffc9a760e01b6001600160e01b0319831614806113c857506380ac58cd60e01b6001600160e01b03198316145b806107175750506001600160e01b031916635b5e139f60e01b1490565b60006001600160e01b03198216632b435fdb60e21b148061071757506001600160e01b031982166301ffc9a760e01b1492915050565b60006001600160e01b0319821663152a902d60e11b148061071757506001600160e01b031982166301ffc9a760e01b1492915050565b60006001600160e01b03198216637965db0b60e01b148061071757506301ffc9a760e01b6001600160e01b0319831614610717565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000816001111580156114c457506114c0611486565b5482105b80156107175750600160e01b6114d8611486565b60008481526004919091016020526040902054161592915050565b60006114fe83610c81565b9050811561153d57336001600160a01b0382161461153d5761152081336112e1565b61153d576040516367d9dca160e11b815260040160405180910390fd5b83611546611486565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6113948133611c8e565b8051610811907f4671642b6ab8da4ed5997daf1cfd48bf3b770981cfb9aebd996e76b59bab67c1906020840190612005565b600081600111611678576115f6611486565b600083815260049190910160205260408120549150600160e01b82169003611678578060000361167357611628611486565b54821061164857604051636f96cda160e11b815260040160405180910390fd5b611650611486565b600019909201600081815260049390930160205260409092205490508015611648575b919050565b604051636f96cda160e11b815260040160405180910390fd5b600080600061169e611486565b60009485526006016020525050604090912080549092909150565b60006116c3610815565b9050336001600160a01b03821615610b3f5760005b83811015611777576001600160a01b03831663caee23ea8389896116fc868b612781565b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810191909152608401600060405180830381600087803b15801561175457600080fd5b505af1158015611768573d6000803e3d6000fd5b505050508060010190506116d8565b50505050505050565b61178a8282610f02565b6108115760008281526097602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117c23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6118108282610f02565b156108115760008281526097602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051608081018252600080825260208201819052918101829052606081019190915261071761189d836115e4565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b6033546001600160a01b03163314610e5c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c53565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b807f4671642b6ab8da4ed5997daf1cfd48bf3b770981cfb9aebd996e76b59bab67c081516108119260200190612005565b6127108111156119e457604051632bd448e760e01b815260040160405180910390fd5b7f317162611eb5bfbd492dc5934870b94626522f302cb20f4f0ee9d856d2ce9b4080546001600160a01b0319166001600160a01b0393909316929092179091557f317162611eb5bfbd492dc5934870b94626522f302cb20f4f0ee9d856d2ce9b4155565b60006001600160401b036040611a5c611486565b6005016000856001600160a01b03166001600160a01b0316815260200190815260200160002054901c169050919050565b60006001600160401b036080611a5c611486565b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac611aca610815565b604080516001600160a01b03928316815291841660208301520160405180910390a17fa138636e88da6c6ded6c0c14d57c44347e2798f30affaf25542a496dcff66b1680546001600160a01b0319166001600160a01b0392909216919091179055565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611b62903390899088908890600401612809565b6020604051808303816000875af1925050508015611b9d575060408051601f3d908101601f19168201909252611b9a91810190612846565b60015b611bfb573d808015611bcb576040519150601f19603f3d011682016040523d82523d6000602084013e611bd0565b606091505b508051600003611bf3576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60607f4671642b6ab8da4ed5997daf1cfd48bf3b770981cfb9aebd996e76b59bab67c0611c4583611ce7565b604051611c789291907f4671642b6ab8da4ed5997daf1cfd48bf3b770981cfb9aebd996e76b59bab67c1906020016128fc565b6040516020818303038152906040529050919050565b611c988282610f02565b61081157611ca581611d79565b611cb0836020611d8b565b604051602001611cc1929190612924565b60408051601f198184030181529082905262461bcd60e51b8252610c5391600401612129565b60606000611cf483611f2d565b60010190506000816001600160401b03811115611d1357611d13612236565b6040519080825280601f01601f191660200182016040528015611d3d576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d4757509392505050565b60606107176001600160a01b03831660145b60606000611d9a8360026127c8565b611da5906002612781565b6001600160401b03811115611dbc57611dbc612236565b6040519080825280601f01601f191660200182016040528015611de6576020820181803683370190505b509050600360fc1b81600081518110611e0157611e01612799565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e3057611e30612799565b60200101906001600160f81b031916908160001a9053506000611e548460026127c8565b611e5f906001612781565b90505b6001811115611ed7576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e9357611e93612799565b1a60f81b828281518110611ea957611ea9612799565b60200101906001600160f81b031916908160001a90535060049490941c93611ed081612999565b9050611e62565b508315611f265760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c53565b9392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f6c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f98576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611fb657662386f26fc10000830492506010015b6305f5e1008310611fce576305f5e100830492506008015b6127108310611fe257612710830492506004015b60648310611ff4576064830492506002015b600a83106107175760010192915050565b8280546120119061271a565b90600052602060002090601f0160209004810192826120335760008555612079565b82601f1061204c57805160ff1916838001178555612079565b82800160010185558215612079579182015b8281111561207957825182559160200191906001019061205e565b50612085929150612089565b5090565b5b80821115612085576000815560010161208a565b6001600160e01b03198116811461139457600080fd5b6000602082840312156120c657600080fd5b8135611f268161209e565b60005b838110156120ec5781810151838201526020016120d4565b838111156111a35750506000910152565b600081518084526121158160208601602086016120d1565b601f01601f19169290920160200192915050565b602081526000611f2660208301846120fd565b60006020828403121561214e57600080fd5b5035919050565b80356001600160a01b038116811461167357600080fd5b6000806040838503121561217f57600080fd5b61218883612155565b946020939093013593505050565b600080604083850312156121a957600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561221857612205878351805182526020808201516001600160a01b0316908301526040908101516001600160401b0316910152565b60609690960195908201906001016121cc565b509495945050505050565b602081526000611f2660208301846121b8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561227457612274612236565b604052919050565b60006001600160401b0383111561229557612295612236565b6122a8601f8401601f191660200161224c565b90508281528383830111156122bc57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156122e557600080fd5b81356001600160401b038111156122fb57600080fd5b8201601f8101841361230c57600080fd5b611c118482356020840161227c565b60008060006060848603121561233057600080fd5b61233984612155565b925061234760208501612155565b9150604084013590509250925092565b6000806040838503121561236a57600080fd5b8235915061237a60208401612155565b90509250929050565b60006001600160401b0382111561239c5761239c612236565b5060051b60200190565b600080604083850312156123b957600080fd5b6123c283612155565b91506020808401356001600160401b038111156123de57600080fd5b8401601f810186136123ef57600080fd5b80356124026123fd82612383565b61224c565b81815260059190911b8201830190838101908883111561242157600080fd5b928401925b8284101561243f57833582529284019290840190612426565b80955050505050509250929050565b60006020828403121561246057600080fd5b611f2682612155565b81516001600160a01b0316815260208083015190820152604080830151908201526060808301519082015260808101610717565b600080604083850312156124b057600080fd5b6124b983612155565b9150602083013580151581146124ce57600080fd5b809150509250929050565b600080600080608085870312156124ef57600080fd5b6124f885612155565b966020860135965060408601359560600135945092505050565b60408152600061252560408301856121b8565b905082151560208301529392505050565b815181526020808301516001600160a01b0316908201526040808301516001600160401b03169082015260608101610717565b6000806000806080858703121561257f57600080fd5b61258885612155565b935061259660208601612155565b92506040850135915060608501356001600160401b038111156125b857600080fd5b8501601f810187136125c957600080fd5b6125d88782356020840161227c565b91505092959194509250565b600060208083850312156125f757600080fd5b82356001600160401b0381111561260d57600080fd5b8301601f8101851361261e57600080fd5b803561262c6123fd82612383565b81815260059190911b8201830190838101908783111561264b57600080fd5b928401925b828410156126705761266184612155565b82529284019290840190612650565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156126e4576126d183855180516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b9284019260809290920191600101612697565b50909695505050505050565b6000806040838503121561270357600080fd5b61270c83612155565b915061237a60208401612155565b600181811c9082168061272e57607f821691505b60208210810361274e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561277c5761277c612754565b500390565b6000821982111561279457612794612754565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016127c1576127c1612754565b5060010190565b60008160001904831182151516156127e2576127e2612754565b500290565b60008261280457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061283c908301846120fd565b9695505050505050565b60006020828403121561285857600080fd5b8151611f268161209e565b8054600090600181811c908083168061287d57607f831692505b6020808410820361289e57634e487b7160e01b600052602260045260246000fd5b8180156128b257600181146128c3576128f0565b60ff198616895284890196506128f0565b60008881526020902060005b868110156128e85781548b8201529085019083016128cf565b505084890196505b50505050505092915050565b60006129088286612863565b84516129188183602089016120d1565b61267081830186612863565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161295c8160178501602088016120d1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161298d8160288401602088016120d1565b01602801949350505050565b6000816129a8576129a8612754565b50600019019056fea2646970667358221220b5db216cd4cb942d4b998e4ae1dc55a1136ee9ca19b7bcbc580ca9b352dc44c064736f6c634300080d0033