[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "InvalidQueryRange", "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": false, "internalType": "uint256", "name": "maxMintBatchSize", "type": "uint256" } ], "name": "MaxMintBatchSizeChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum IEFPListRegistry.MintState", "name": "mintState", "type": "uint8" } ], "name": "MintStateChange", "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": false, "internalType": "address", "name": "priceOracle", "type": "address" } ], "name": "PriceOracleChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "tokenURIProvider", "type": "address" } ], "name": "TokenURIProviderChange", "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": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "listStorageLocation", "type": "bytes" } ], "name": "UpdateListStorageLocation", "type": "event" }, { "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": "contract ENS", "name": "ens", "type": "address" }, { "internalType": "address", "name": "claimant", "type": "address" } ], "name": "claimReverseENS", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "explicitOwnershipOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "explicitOwnershipsOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership[]", "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getListStorageLocation", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxMintBatchSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMintState", "outputs": [ { "internalType": "enum IEFPListRegistry.MintState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPriceOracle", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "bytes", "name": "listStorageLocation", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mintBatch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mintBatchTo", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "bytes", "name": "listStorageLocation", "type": "bytes" } ], "name": "mintTo", "outputs": [], "stateMutability": "payable", "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "listStorageLocation", "type": "bytes" } ], "name": "setListStorageLocation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxMintBatchSize", "type": "uint256" } ], "name": "setMaxMintBatchSize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum IEFPListRegistry.MintState", "name": "_mintState", "type": "uint8" } ], "name": "setMintState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "priceOracle_", "type": "address" } ], "name": "setPriceOracle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ENS", "name": "ens", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" } ], "name": "setReverseENS", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenURIProvider_", "type": "address" } ], "name": "setTokenURIProvider", "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": "tokenURIProvider", "outputs": [ { "internalType": "contract ITokenURIProvider", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "stop", "type": "uint256" } ], "name": "tokensOfOwnerIn", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "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" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040526008805460ff60a81b191690556127106009553480156200002457600080fd5b5060408051808201825260038082526204546560ec1b60208084018290528451808601909552918452908301529060026200006083826200018d565b5060036200006f82826200018d565b50506000805550620000813362000094565b6008805460ff60a01b1916905562000259565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011157607f821691505b6020821081036200013257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000188576000816000526020600020601f850160051c81016020861015620001635750805b601f850160051c820191505b8181101562000184578281556001016200016f565b5050505b505050565b81516001600160401b03811115620001a957620001a9620000e6565b620001c181620001ba8454620000fc565b8462000138565b602080601f831160018114620001f95760008415620001e05750858301515b600019600386901b1c1916600185901b17855562000184565b600085815260208120601f198616915b828110156200022a5788860151825594840194600190910190840162000209565b5085821015620002495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612bbd80620002696000396000f3fe6080604052600436106102465760003560e01c80637a58aa7211610139578063a22cb465116100b6578063dd58deba1161007a578063dd58deba1461066b578063e985e9c51461068b578063f11cb0af146106d4578063f2fde38b146106f4578063f3fef3a314610714578063fca513a81461073457600080fd5b8063a22cb465146105d8578063b88d4fde146105f8578063c23dc68f1461060b578063c87b56dd14610638578063d52da3ae1461065857600080fd5b80638456cb59116100fd5780638456cb59146105435780638462151c146105585780638da5cb5b1461058557806395d89b41146105a357806399a2557a146105b857600080fd5b80637a58aa72146104b05780637ba0e2e7146104d05780637cebccab146104e35780637f39930f146105035780638007c9401461052357600080fd5b806342842e0e116101c75780636352211e1161018b5780636352211e14610414578063666456981461043457806370a0823114610454578063715018a614610474578063774a88351461048957600080fd5b806342842e0e146103805780635023cb1914610393578063530e784f146103a85780635bbb2177146103c85780635c975abb146103f557600080fd5b806318160ddd1161020e57806318160ddd1461030f57806320e409b41461033257806323b872dd146103455780633d3503d9146103585780633f4ba83a1461036b57600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806310623945146102ef575b600080fd5b34801561025757600080fd5b5061026b610266366004612264565b610752565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102956107a4565b60405161027791906122d1565b3480156102ae57600080fd5b506102c26102bd3660046122e4565b610836565b6040516001600160a01b039091168152602001610277565b6102ed6102e8366004612312565b61087a565b005b3480156102fb57600080fd5b5061029561030a3660046122e4565b61091a565b34801561031b57600080fd5b50600154600054035b604051908152602001610277565b6102ed6103403660046122e4565b6109bc565b6102ed61035336600461233e565b610b32565b6102ed6103663660046123c7565b610ccb565b34801561037757600080fd5b506102ed610dbf565b6102ed61038e36600461233e565b610dd1565b34801561039f57600080fd5b50600954610324565b3480156103b457600080fd5b506102ed6103c336600461241b565b610df1565b3480156103d457600080fd5b506103e86103e3366004612438565b610e56565b60405161027791906124e8565b34801561040157600080fd5b50600854600160a01b900460ff1661026b565b34801561042057600080fd5b506102c261042f3660046122e4565b610f21565b34801561044057600080fd5b506102ed61044f36600461241b565b610f2c565b34801561046057600080fd5b5061032461046f36600461241b565b610f82565b34801561048057600080fd5b506102ed610fd0565b34801561049557600080fd5b50600854600160a81b900460ff166040516102779190612540565b3480156104bc57600080fd5b506103246104cb3660046123c7565b610fe2565b6102ed6104de366004612568565b6110ee565b3480156104ef57600080fd5b506102ed6104fe3660046125a9565b6111e1565b34801561050f57600080fd5b506102ed61051e3660046122e4565b611255565b34801561052f57600080fd5b5061032461053e3660046125db565b61129a565b34801561054f57600080fd5b506102ed61139a565b34801561056457600080fd5b5061057861057336600461241b565b6113aa565b6040516102779190612614565b34801561059157600080fd5b506008546001600160a01b03166102c2565b3480156105af57600080fd5b506102956114b2565b3480156105c457600080fd5b506105786105d336600461264c565b6114c1565b3480156105e457600080fd5b506102ed6105f3366004612681565b611638565b6102ed610606366004612721565b6116a4565b34801561061757600080fd5b5061062b6106263660046122e4565b6116e8565b60405161027791906127cf565b34801561064457600080fd5b506102956106533660046122e4565b611760565b6102ed610666366004612312565b61182c565b34801561067757600080fd5b50600b546102c2906001600160a01b031681565b34801561069757600080fd5b5061026b6106a63660046125db565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156106e057600080fd5b506102ed6106ef3660046127dd565b611995565b34801561070057600080fd5b506102ed61070f36600461241b565b6119fe565b34801561072057600080fd5b5061026b61072f366004612312565b611a77565b34801561074057600080fd5b50600a546001600160a01b03166102c2565b60006301ffc9a760e01b6001600160e01b03198316148061078357506380ac58cd60e01b6001600160e01b03198316145b8061079e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546107b3906127fe565b80601f01602080910402602001604051908101604052809291908181526020018280546107df906127fe565b801561082c5780601f106108015761010080835404028352916020019161082c565b820191906000526020600020905b81548152906001019060200180831161080f57829003601f168201915b5050505050905090565b600061084182611b5a565b61085e576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061088582610f21565b9050336001600160a01b038216146108be576108a181336106a6565b6108be576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600c60205260409020805460609190610937906127fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610963906127fe565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b50505050509050919050565b6109c4611b81565b6000600854600160a81b900460ff1660038111156109e4576109e461252a565b03610a0a5760405162461bcd60e51b8152600401610a0190612838565b60405180910390fd5b6001600854600160a81b900460ff166003811115610a2a57610a2a61252a565b141580610a4157506008546001600160a01b031633145b610a5d5760405162461bcd60e51b8152600401610a019061286f565b6002600854600160a81b900460ff166003811115610a7d57610a7d61252a565b141580610a9457506008546001600160a01b031633145b610ab05760405162461bcd60e51b8152600401610a01906128b2565b600954811115610af75760405162461bcd60e51b815260206004820152601260248201527162617463682073697a6520746f6f2062696760701b6044820152606401610a01565b6000610b0282611bce565b905080341015610b245760405162461bcd60e51b8152600401610a01906128fb565b610b2e3383611cd9565b5050565b6000610b3d82611cf3565b9050836001600160a01b0316816001600160a01b031614610b705760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610bbd57610ba086336106a6565b610bbd57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610be457604051633a954ecd60e21b815260040160405180910390fd5b8015610bef57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610c8157600184016000818152600460205260408120549003610c7f576000548114610c7f5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610cd3611b81565b6000600854600160a81b900460ff166003811115610cf357610cf361252a565b03610d105760405162461bcd60e51b8152600401610a0190612838565b6001600854600160a81b900460ff166003811115610d3057610d3061252a565b141580610d4757506008546001600160a01b031633145b610d635760405162461bcd60e51b8152600401610a019061286f565b6000610d726001546000540390565b90506000610d806001611bce565b905080341015610da25760405162461bcd60e51b8152600401610a01906128fb565b610dad856001611cd9565b610db8828585611d5a565b5050505050565b610dc7611db3565b610dcf611e0d565b565b610dec838383604051806020016040528060008152506116a4565b505050565b610df9611b81565b610e01611db3565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f50f00a2e72696d981b6ba41c727758c61783b7a40317c3c8c7c0aa22156b1a13906020015b60405180910390a150565b6060816000816001600160401b03811115610e7357610e736126b4565b604051908082528060200260200182016040528015610ec557816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610e915790505b50905060005b828114610f1857610ef3868683818110610ee757610ee7612927565b905060200201356116e8565b828281518110610f0557610f05612927565b6020908102919091010152600101610ecb565b50949350505050565b600061079e82611cf3565b610f34611db3565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fe53040499957c3d9945fade96500effb92e722ef18f0ad1634a5bdd77a909dca90602001610e4b565b60006001600160a01b038216610fab576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b610fd8611db3565b610dcf6000611e62565b6000610fec611db3565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038516906302571be390602401602060405180830381865afa158015611050573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611074919061293d565b6001600160a01b031663c47f002784846040518363ffffffff1660e01b81526004016110a1929190612983565b6020604051808303816000875af11580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e49190612997565b90505b9392505050565b6110f6611b81565b6000600854600160a81b900460ff1660038111156111165761111661252a565b036111335760405162461bcd60e51b8152600401610a0190612838565b6001600854600160a81b900460ff1660038111156111535761115361252a565b14158061116a57506008546001600160a01b031633145b6111865760405162461bcd60e51b8152600401610a019061286f565b60006111956001546000540390565b905060006111a36001611bce565b9050803410156111c55760405162461bcd60e51b8152600401610a01906128fb565b6111d0336001611cd9565b6111db828585611d5a565b50505050565b6111e9611b81565b82336111f482610f21565b6001600160a01b03161461124a5760405162461bcd60e51b815260206004820152601c60248201527f4546503a2063616c6c6572206973206e6f7420746865206f776e6572000000006044820152606401610a01565b6111db848484611d5a565b61125d611b81565b611265611db3565b60098190556040518181527f3219e991fe6339da263a9300a232bd4e46d7902460a6eae556b0945b8347177690602001610e4b565b60006112a4611db3565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526001600160a01b038416906302571be390602401602060405180830381865afa158015611308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132c919061293d565b604051630f41a04d60e11b81526001600160a01b0384811660048301529190911690631e83409a906024016020604051808303816000875af1158015611376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612997565b6113a2611db3565b610dcf611eb4565b606060008060006113ba85610f82565b90506000816001600160401b038111156113d6576113d66126b4565b6040519080825280602002602001820160405280156113ff578160200160208202803683370190505b50905061142c60408051608081018252600080825260208201819052918101829052606081019190915290565b60005b8386146114a65761143f81611ef7565b9150816040015161149e5781516001600160a01b03161561145f57815194505b876001600160a01b0316856001600160a01b03160361149e578083878060010198508151811061149157611491612927565b6020026020010181815250505b60010161142f565b50909695505050505050565b6060600380546107b3906127fe565b60608183106114e357604051631960ccad60e11b815260040160405180910390fd5b6000806114ef60005490565b9050808411156114fd578093505b600061150887610f82565b9050848610156115275785850381811015611521578091505b5061152b565b5060005b6000816001600160401b03811115611545576115456126b4565b60405190808252806020026020018201604052801561156e578160200160208202803683370190505b509050816000036115845793506110e792505050565b600061158f886116e8565b9050600081604001516115a0575080515b885b8881141580156115b25750848714155b15611627576115c081611ef7565b9250826040015161161f5782516001600160a01b0316156115e057825191505b8a6001600160a01b0316826001600160a01b03160361161f578084888060010199508151811061161257611612612927565b6020026020010181815250505b6001016115a2565b505050928352509095945050505050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6116af848484610b32565b6001600160a01b0383163b156111db576116cb84848484611f33565b6111db576040516368d2bf6b60e11b815260040160405180910390fd5b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452908301829052938201819052928101839052909150600054831061173c5792915050565b61174583611ef7565b90508060400151156117575792915050565b6110e78361201e565b600b546060906001600160a01b03166117bb5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5552492070726f7669646572206973206e6f7420736574000000006044820152606401610a01565b600b5460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015611804573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079e91908101906129b0565b611834611b81565b6000600854600160a81b900460ff1660038111156118545761185461252a565b036118715760405162461bcd60e51b8152600401610a0190612838565b6001600854600160a81b900460ff1660038111156118915761189161252a565b1415806118a857506008546001600160a01b031633145b6118c45760405162461bcd60e51b8152600401610a019061286f565b6002600854600160a81b900460ff1660038111156118e4576118e461252a565b1415806118fb57506008546001600160a01b031633145b6119175760405162461bcd60e51b8152600401610a01906128b2565b60095481111561195e5760405162461bcd60e51b815260206004820152601260248201527162617463682073697a6520746f6f2062696760701b6044820152606401610a01565b600061196982611bce565b90508034101561198b5760405162461bcd60e51b8152600401610a01906128fb565b610dec8383611cd9565b61199d611b81565b6119a5611db3565b6008805482919060ff60a81b1916600160a81b8360038111156119ca576119ca61252a565b02179055507fb7b9fda281e81cfc174d175e2b3d01a519b60d7133817213012066742bf2774981604051610e4b9190612540565b611a06611db3565b6001600160a01b038116611a6b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a01565b611a7481611e62565b50565b600047821115611ac05760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a01565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114611b0d576040519150601f19603f3d011682016040523d82523d6000602084013e611b12565b606091505b50509050806110e75760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610a01565b600080548210801561079e575050600090815260046020526040902054600160e01b161590565b600854600160a01b900460ff1615610dcf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a01565b600a546000906001600160a01b0316611be857600061079e565b81600114611c6257600a54604051632bd92dd360e01b8152600481018490526001600160a01b0390911690632bd92dd390602401602060405180830381865afa158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190612997565b61079e565b600a60009054906101000a90046001600160a01b03166001600160a01b03166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190612997565b610b2e828260405180602001604052806000815250612053565b600081600054811015611d415760008181526004602052604081205490600160e01b82169003611d3f575b806000036110e7575060001901600081815260046020526040902054611d1e565b505b604051636f96cda160e11b815260040160405180910390fd5b6000838152600c60205260409020611d73828483612a6e565b50827fe6504df8b76254e8326dba1d1fd1ac4936de28caf565b9c5a1ad0f10d6c98ec28383604051611da6929190612983565b60405180910390a2505050565b6008546001600160a01b03163314610dcf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a01565b611e156120b9565b6008805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ebc611b81565b6008805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e453390565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526004602052604090205461079e90612109565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611f68903390899088908890600401612b2d565b6020604051808303816000875af1925050508015611fa3575060408051601f3d908101601f19168201909252611fa091810190612b6a565b60015b612001573d808015611fd1576040519150601f19603f3d011682016040523d82523d6000602084013e611fd6565b606091505b508051600003611ff9576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60408051608081018252600080825260208201819052918101829052606081019190915261079e61204e83611cf3565b612109565b61205d8383612150565b6001600160a01b0383163b15610dec576000548281035b6120876000868380600101945086611f33565b6120a4576040516368d2bf6b60e11b815260040160405180910390fd5b818110612074578160005414610db857600080fd5b600854600160a01b900460ff16610dcf5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a01565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b60008054908290036121755760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461222457808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016121ec565b508160000361224557604051622e076360e81b815260040160405180910390fd5b60005550505050565b6001600160e01b031981168114611a7457600080fd5b60006020828403121561227657600080fd5b81356110e78161224e565b60005b8381101561229c578181015183820152602001612284565b50506000910152565b600081518084526122bd816020860160208601612281565b601f01601f19169290920160200192915050565b6020815260006110e760208301846122a5565b6000602082840312156122f657600080fd5b5035919050565b6001600160a01b0381168114611a7457600080fd5b6000806040838503121561232557600080fd5b8235612330816122fd565b946020939093013593505050565b60008060006060848603121561235357600080fd5b833561235e816122fd565b9250602084013561236e816122fd565b929592945050506040919091013590565b60008083601f84011261239157600080fd5b5081356001600160401b038111156123a857600080fd5b6020830191508360208285010111156123c057600080fd5b9250929050565b6000806000604084860312156123dc57600080fd5b83356123e7816122fd565b925060208401356001600160401b0381111561240257600080fd5b61240e8682870161237f565b9497909650939450505050565b60006020828403121561242d57600080fd5b81356110e7816122fd565b6000806020838503121561244b57600080fd5b82356001600160401b038082111561246257600080fd5b818501915085601f83011261247657600080fd5b81358181111561248557600080fd5b8660208260051b850101111561249a57600080fd5b60209290920196919550909350505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b818110156114a6576125178385516124ac565b9284019260809290920191600101612504565b634e487b7160e01b600052602160045260246000fd5b602081016004831061256257634e487b7160e01b600052602160045260246000fd5b91905290565b6000806020838503121561257b57600080fd5b82356001600160401b0381111561259157600080fd5b61259d8582860161237f565b90969095509350505050565b6000806000604084860312156125be57600080fd5b8335925060208401356001600160401b0381111561240257600080fd5b600080604083850312156125ee57600080fd5b82356125f9816122fd565b91506020830135612609816122fd565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156114a657835183529284019291840191600101612630565b60008060006060848603121561266157600080fd5b833561266c816122fd565b95602085013595506040909401359392505050565b6000806040838503121561269457600080fd5b823561269f816122fd565b91506020830135801515811461260957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156126f2576126f26126b4565b604052919050565b60006001600160401b03821115612713576127136126b4565b50601f01601f191660200190565b6000806000806080858703121561273757600080fd5b8435612742816122fd565b93506020850135612752816122fd565b92506040850135915060608501356001600160401b0381111561277457600080fd5b8501601f8101871361278557600080fd5b8035612798612793826126fa565b6126ca565b8181528860208385010111156127ad57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6080810161079e82846124ac565b6000602082840312156127ef57600080fd5b8135600481106110e757600080fd5b600181811c9082168061281257607f821691505b60208210810361283257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526018908201527f4546503a206d696e74696e672069732064697361626c65640000000000000000604082015260600190565b60208082526023908201527f4546503a206d696e74696e67206973207265737472696374656420746f206f776040820152623732b960e91b606082015260800190565b60208082526029908201527f4546503a206261746368206d696e74696e672069732072657374726963746564604082015268103a379037bbb732b960b91b606082015260800190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294f57600080fd5b81516110e7816122fd565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006110e460208301848661295a565b6000602082840312156129a957600080fd5b5051919050565b6000602082840312156129c257600080fd5b81516001600160401b038111156129d857600080fd5b8201601f810184136129e957600080fd5b80516129f7612793826126fa565b818152856020838501011115612a0c57600080fd5b612a1d826020830160208601612281565b95945050505050565b601f821115610dec576000816000526020600020601f850160051c81016020861015612a4f5750805b601f850160051c820191505b81811015610cc357828155600101612a5b565b6001600160401b03831115612a8557612a856126b4565b612a9983612a9383546127fe565b83612a26565b6000601f841160018114612acd5760008515612ab55750838201355b600019600387901b1c1916600186901b178355610db8565b600083815260209020601f19861690835b82811015612afe5786850135825560209485019460019092019101612ade565b5086821015612b1b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b60908301846122a5565b9695505050505050565b600060208284031215612b7c57600080fd5b81516110e78161224e56fea2646970667358221220585a562412dc7daeae0a6e9b96e99ab0cee43435e81604a1c713a6e26374ccb664736f6c63430008170033