UNPKG

@settlemint/solidity-token-erc721a

Version:
795 lines 52.1 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ExampleERC721a", "sourceName": "contracts/ExampleERC721a.sol", "abi": [ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "string", "name": "baseTokenURI_", "type": "string" }, { "internalType": "address payable", "name": "wallet_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NotCompatibleWithSpotMints", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SequentialMintExceedsLimit", "type": "error" }, { "inputs": [], "name": "SequentialUpToTooSmall", "type": "error" }, { "inputs": [], "name": "SpotMintTokenIdTooSmall", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "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": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "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" }, { "inputs": [], "name": "MAX_PER_TX", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRICE_IN_WEI_PUBLIC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRICE_IN_WEI_WHITELIST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVES", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_whiteListMerkleRoot", "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": [], "name": "collectReserves", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableWhitelistMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "allowance", "type": "string" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "getAllowance", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "address[]", "name": "recipients_", "type": "address[]" } ], "name": "gift", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "publicMint", "outputs": [], "stateMutability": "payable", "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": "string", "name": "baseTokenURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "whitelistMerkleRoot_", "type": "bytes32" } ], "name": "setWhitelistMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "startPublicSale", "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": "result", "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": "wallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "whitelistMint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a0604052346100cd5761258880380380610019816100e5565b92833981016080828203126100cd5781516001600160401b0381116100cd578161004491840161010f565b60208301519092906001600160401b0381116100cd578261006691830161010f565b60408201519092906001600160401b0381116100cd5760609161008a91840161010f565b910151916001600160a01b03831683036100cd576100a7936103f5565b60405161201690816105728239608051818181610333015281816109840152610a020152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b0381118382101761010a57604052565b6100d1565b81601f820112156100cd578051906001600160401b03821161010a5761013e601f8301601f19166020016100e5565b92828452602083830101116100cd57815f9260208093018386015e8301015290565b90600182811c9216801561018e575b602083101461017a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161016f565b601f81116101a4575050565b60025f5260205f20906020601f840160051c830193106101de575b601f0160051c01905b8181106101d3575050565b5f81556001016101c8565b90915081906101bf565b601f82116101f557505050565b5f5260205f20906020601f840160051c8301931061022d575b601f0160051c01905b818110610222575050565b5f8155600101610217565b909150819061020e565b80519091906001600160401b03811161010a5761026081610259600354610160565b60036101e8565b602092601f82116001146102a057610290929382915f92610295575b50508160011b915f199060031b1c19161790565b600355565b015190505f8061027c565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b86811061030457508360019596106102ec575b505050811b01600355565b01515f1960f88460031b161c191690555f80806102e1565b919260206001819286850151815501940192016102ce565b80519091906001600160401b03811161010a576103458161033e600c54610160565b600c6101e8565b602092601f821160011461037957610374929382915f926102955750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106103dd57508360019596106103c5575b505050811b01600c55565b01515f1960f88460031b161c191690555f80806103ba565b919260206001819286850151815501940192016103a7565b8051906001600160401b03821161010a5761041a82610415600254610160565b610198565b602090601f83116001146104a257918061044d9261045595945f926102955750508160011b915f199060031b1c19161790565b600255610237565b5f8055331561048e576104899061046b33610529565b6104756001600b55565b61048460ff19600e5416600e55565b61031c565b608052565b631e4fbdf760e01b5f90815260045260245ffd5b60025f52601f19831691907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace925f5b8181106105115750916001939185610455979694106104f9575b505050811b01600255610237565b01515f1960f88460031b161c191690555f80806104eb565b929360206001819287860151815501950193016104d1565b600a80546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461022f578063029877b61461022a578063041fa44e1461022557806306fdde0314610220578063081812fc1461021b5780630922f9c514610194578063095ea7b3146102165780630c1c972a14610211578063163e1e611461020c57806318160ddd1461020757806323b872dd146102025780632db11544146101fd57806332cb6b0c146101f85780633ccfd60b146101f357806342842e0e146101ee578063521eb273146101e957806355f804b3146101e45780636352211e146101df57806366fddfa9146101da57806370a08231146101d5578063715018a6146101d05780637ad7614d146101cb5780638da5cb5b146101c657806395d89b41146101c1578063a22cb465146101bc578063b4402979146101b7578063b88d4fde146101b2578063bd32fb66146101ad578063c4be5b59146101a8578063c87b56dd146101a3578063e985e9c51461019e578063f2fde38b14610199578063f43a22dc146101945763fbd9b92d1461018f575f80fd5b6114b6565b610607565b61142c565b6113c8565b61124f565b61101c565b610ffb565b610f98565b610f7a565b610ee9565b610e44565b610e1c565b610dfb565b610da0565b610d45565b610c1f565b610bf0565b610ad9565b6109ed565b6109c9565b61095d565b610942565b610877565b610863565b610816565b610750565b6106f4565b610633565b6105b8565b6104e2565b61048d565b610310565b61024a565b6001600160e01b031981160361024657565b5f80fd5b34610246576020366003190112610246576102b860043561026a81610234565b6001600160e01b03198116630704183b60e11b8114919082156102ff575b82156102ee575b82156102dd575b82156102cc575b5081156102bc575b5060405190151581529081906020820190565b0390f35b6102c691506119ed565b5f6102a5565b632baae9fd60e01b1491505f61029d565b91506102e8816119ed565b91610296565b6362e27be760e01b8114925061028f565b63184371e560e31b81149250610288565b34610246575f36600319011261024657610328611a31565b5f54610448576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690610367602082610a45565b5f808252546001600160a01b0383164260a01b1761038d825f52600460205260405f2090565b556001600160a01b0383165f8181526005602052604090208054680500000000000000050190559182156104435760058201919360015b156103e4575b5f85855f5f516020611fc15f395f51905f528180a46103c4565b93600101938285036103ca57825f55803b6103fb57005b5f546004198101919060015b1561042f575b5f61042461042086600187019686611e31565b1590565b15610407575b611929565b80831061040d57925050505f540361024657005b611cdc565b60405162461bcd60e51b815260206004820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152606490fd5b34610246575f366003190112610246576020600954604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206104df9281815201906104aa565b90565b34610246575f366003190112610246576040515f600254610502816114d7565b80845290600181169081156105945750600114610536575b6102b88361052a81850382610a45565b604051918291826104ce565b91905060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace915f905b80821061057a5750909150810160200161052a61051a565b919260018160209254838588010152019101909291610562565b60ff191660208086019190915291151560051b8401909101915061052a905061051a565b34610246576020366003190112610246576004356105d581611c53565b156105f8575f526006602052602060018060a01b0360405f205416604051908152f35b6333d1c03960e21b5f5260045ffd5b34610246575f36600319011261024657602060405160058152f35b6001600160a01b0381160361024657565b60403660031901126102465760043561064b81610622565b602435906001600160a01b0361066083611cf9565b16908133036106cf575b61069f81610680855f52600660205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b5f82815260076020908152604080832033845290915290205460ff1661066a57611c92565b34610246575f3660031901126102465761070c611a31565b5f600955600e805460ff19166001179055005b9181601f840112156102465782359167ffffffffffffffff8311610246576020808501948460051b01011161024657565b346102465760203660031901126102465760043567ffffffffffffffff81116102465761078190369060040161071f565b610789611a31565b6107955f54151561150f565b5f5481810180911161081157606f106107d7575f5b8181106107b357005b806107d16107cc6107c76001948688611575565b611599565b611a58565b016107aa565b60405162461bcd60e51b815260206004820152601260248201527145786365646573206d617820737570706c7960701b6044820152606490fd5b611554565b34610246575f3660031901126102465760205f546001549003604051908152f35b60609060031901126102465760043561084f81610622565b9060243561085c81610622565b9060443590565b61087561086f36610837565b916115a3565b005b60203660031901126102465760043561088e611d69565b61089a6009541561172e565b6108a860ff600e541661172e565b6108b45f54151561150f565b5f5481810180911161081157606f6108cd911115611773565b60058110156108fd57806108ed6108e66108f3936117b4565b34146117f8565b33611b4d565b6108756001600b55565b60405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152606490fd5b34610246575f366003190112610246576020604051606f8152f35b34610246575f36600319011261024657610975611a31565b5f808080478181156109c0575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690f1156109b557005b6040513d5f823e3d90fd5b506108fc610982565b6108756109d536610837565b90604051926109e5602085610a45565b5f84526118f7565b34610246575f366003190112610246576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610a6757604052565b610a31565b67ffffffffffffffff8111610a6757601f01601f191660200190565b929192610a9482610a6c565b91610aa26040519384610a45565b829481845281830111610246578281602093845f960137010152565b9080601f83011215610246578160206104df93359101610a88565b346102465760203660031901126102465760043567ffffffffffffffff811161024657610b0a903690600401610abe565b610b12611a31565b805167ffffffffffffffff8111610a6757610b3781610b32600c546114d7565b611851565b602091601f8211600114610b7557610b65925f9183610b6a575b50508160011b915f199060031b1c19161790565b600c55005b015190505f80610b51565b600c5f52601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610bd857508360019510610bc0575b505050811b01600c55005b01515f1960f88460031b161c191690555f8080610bb5565b91926020600181928685015181550194019201610ba3565b346102465760203660031901126102465760206001600160a01b03610c16600435611cf9565b16604051908152f35b346102465760403660031901126102465760043567ffffffffffffffff811161024657610c50903690600401610abe565b60243567ffffffffffffffff811161024657610c73610c8791369060040161071f565b9190610c7f8433611d89565b9236916118a1565b906009548015610d0057610c9a92611ef8565b15610caf576102b890604051918291826104ce565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201526232b21760e91b6064820152608490fd5b60405162461bcd60e51b815260206004820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152606490fd5b3461024657602036600319011261024657600435610d6281610622565b6001600160a01b03168015610d91575f526005602052602067ffffffffffffffff60405f205416604051908152f35b6323d3ad8160e21b5f5260045ffd5b34610246575f36600319011261024657610db8611a31565b600a80546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610246575f3660031901126102465760206040516618838370f340008152f35b34610246575f36600319011261024657600a546040516001600160a01b039091168152602090f35b34610246575f366003190112610246576040515f600354610e64816114d7565b80845290600181169081156105945750600114610e8b576102b88361052a81850382610a45565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210610ecf5750909150810160200161052a61051a565b919260018160209254838588010152019101909291610eb7565b3461024657604036600319011261024657600435610f0681610622565b6024359081151580920361024657335f9081526007602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b34610246575f36600319011261024657610f92611a31565b5f600955005b608036600319011261024657600435610fb081610622565b60243590610fbd82610622565b6044356064359267ffffffffffffffff8411610246573660238501121561024657610ff5610875943690602481600401359101610a88565b926118f7565b3461024657602036600319011261024657600435611017611a31565b600955005b60603660031901126102465760243560043560443567ffffffffffffffff81116102465761104e90369060040161071f565b92611057611d69565b6110635f54151561150f565b5f5483810180911161081157606f61107c911115611773565b5f93818072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b81101561122c575b806d04ee2d6d415b85acef8100000000600a921015611210575b662386f26fc100008110156111fb575b6305f5e1008110156111e9575b6127108110156111d9575b60648110156111ca575b10156111bf575b61112e602161110360018901611f49565b978801015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b600a82061a8353600a900490565b90811561113e5761112e90611108565b505061116c611192936111719261116761115b6108f39933611d89565b926009549236916118a1565b611ef8565b611938565b335f908152600d6020526040902061118b90849054611568565b111561198f565b61119e6108e6826117d6565b335f908152600d602052604090206111b7828254611568565b905533611b4d565b6001909501946110f2565b600290606490049701966110eb565b60049061271090049701966110e1565b6008906305f5e10090049701966110d6565b601090662386f26fc1000090049701966110c9565b6020906d04ee2d6d415b85acef810000000090049701966110b9565b506040955072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830461109f565b346102465760203660031901126102465760043561126c81611c53565b156113b957604051905f82600c5491611284836114d7565b808352926001811690811561139a575060011461133b575b6112a892500383610a45565b81511561132c576112d2916112d86112c26112e693611f7b565b60405194859360208501906119db565b906119db565b03601f198101835282610a45565b80511561131b5761130a61052a6102b8926112d860405193849260208401906119db565b64173539b7b760d91b815260050190565b506102b861132761183d565b61052a565b505061133661183d565b6112e6565b5090600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7905f915b81831061137e5750509060206112a89282010161129c565b6020919350806001915483858901015201910190918492611366565b602092506112a894915060ff191682840152151560051b82010161129c565b630a14c4b560e41b5f5260045ffd5b3461024657604036600319011261024657602060ff6114206004356113ec81610622565b602435906113f982610622565b60018060a01b03165f526007845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b346102465760203660031901126102465760043561144981610622565b611451611a31565b6001600160a01b031680156114a357600a80546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b631e4fbdf760e01b5f525f60045260245ffd5b34610246575f366003190112610246576020604051669536c7089100008152f35b90600182811c92168015611505575b60208310146114f157565b634e487b7160e01b5f52602260045260245ffd5b91607f16916114e6565b1561151657565b60405162461bcd60e51b815260206004820152601660248201527514995cd95c9d995cc81b9bdd081d185ad95b881e595d60521b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b9190820180921161081157565b91908110156115855760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356104df81610622565b91906115ae82611cf9565b6001600160a01b03938416938116849003611729575f83815260066020526040902080546115eb6001600160a01b03871633908114908314171590565b6116df575b6116d6575b506001600160a01b0384165f90815260056020526040902080545f190190556001600160a01b0382165f908152600560205260409020805460010190556001600160a01b0382164260a01b17600160e11b17611659845f52600460205260405f2090565b55600160e11b811615611691575b506001600160a01b03169182905f516020611fc15f395f51905f525f80a41561168c57565b611cbe565b600183016116a7815f52600460205260405f2090565b54156116b4575b50611667565b5f5481146116ae576116ce905f52600460205260405f2090565b555f806116ae565b5f90555f6115f5565b61171f610420611718336117038a60018060a01b03165f52600760205260405f2090565b9060018060a01b03165f5260205260405f2090565b5460ff1690565b156115f057611caf565b611ca1565b1561173557565b60405162461bcd60e51b81526020600482015260166024820152755075626c69632073616c65206e6f742061637469766560501b6044820152606490fd5b1561177a57565b60405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606490fd5b90669536c708910000820291808304669536c708910000149015171561081157565b906618838370f340008202918083046618838370f34000149015171561081157565b156117ff57565b60405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b6044820152606490fd5b6040519061184c602083610a45565b5f8252565b601f811161185d575050565b600c5f5260205f20906020601f840160051c83019310611897575b601f0160051c01905b81811061188c575050565b5f8155600101611881565b9091508190611878565b9291909267ffffffffffffffff8411610a67578360051b9060206040516118ca82850182610a45565b809681520191810192831161024657905b8282106118e757505050565b81358152602091820191016118db565b9291906119058282866115a3565b803b611912575b50505050565b61191b93611ed0565b15611929575f80808061190c565b6368d2bf6b60e11b5f5260045ffd5b1561193f57565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c69604482015261195960f21b6064820152608490fd5b1561199657565b60405162461bcd60e51b815260206004820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152606490fd5b805191908290602001825e015f815290565b63ffffffff60e01b166301ffc9a760e01b8114908115611a20575b8115611a12575090565b635b5e139f60e01b14919050565b6380ac58cd60e01b81149150611a08565b600a546001600160a01b03163303611a4557565b63118cdaa760e01b5f523360045260245ffd5b90604051611a67602082610a45565b5f80825254906001600160a01b0384164260a01b17600160e11b17611a94835f52600460205260405f2090565b556001600160a01b0384165f8181526005602052604090208054680100000000000000010190559283156104435760018301929460015b15611aeb575b5f86865f5f516020611fc15f395f51905f528180a4611acb565b9460010194838603611ad1579291945092505f55803b611b0a57509050565b5f545f198101929060015b15611b38575b5f611b2e61042087600188019787611e31565b15611b1557611929565b808410611b1b5792509250505f540361024657565b9160405190611b5d602083610a45565b5f82525f54918315611c4e576001600160a01b0385164260a01b6001861460e11b1717611b92845f52600460205260405f2090565b556001600160a01b0385165f818152600560205260409020805468010000000000000001870201905593841561044357808401939560015b15611bea575b5f87875f5f516020611fc15f395f51905f528180a4611bca565b9560010195848703611bd057929550929093505f55803b611c0a57505050565b9091925f549283039260015b15611c39575b5f611c2f61042087600188019787611e31565b15611c1657611929565b808410611c1c5792509250505f540361024657565b611ccd565b905f915f548110611c615750565b9091505b805f52600460205260405f205480611c8657508015610811575f1901611c65565b600160e01b1615919050565b6367d9dca160e11b5f5260045ffd5b62a1148160e81b5f5260045ffd5b632ce44b5f60e11b5f5260045ffd5b633a954ecd60e21b5f5260045ffd5b63b562e8dd60e01b5f5260045ffd5b622e076360e81b5f5260045ffd5b636f96cda160e11b5f5260045ffd5b611d0b815f52600460205260405f2090565b54908115611d225750600160e01b8116611cea5790565b90505f54811015611cea575b5f19015f81815260046020526040902054908115611d625750600160e01b8116156104df57636f96cda160e11b5f5260045ffd5b9050611d2e565b6002600b5414611d7a576002600b55565b633ee5aeb560e01b5f5260045ffd5b90611db66112d891604051928391602083019560018060a01b0316865260408084015260608301906104aa565b51902090565b9081602091031261024657516104df81610234565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526104df929101906104aa565b3d15611e2c573d90611e1382610a6c565b91611e216040519384610a45565b82523d5f602084013e565b606090565b91611e58926020925f604051809681958294630a85bd0160e11b8452843360048601611dd1565b03926001600160a01b03165af15f9181611e9f575b50611e8957611e7a611e02565b80511561042a57805190602001fd5b6001600160e01b031916630a85bd0160e11b1490565b611ec291925060203d602011611ec9575b611eba8183610a45565b810190611dbc565b905f611e6d565b503d611eb0565b906020925f611e58959360405196879586948593630a85bd0160e11b85523360048601611dd1565b929091905f915b8451831015611f415760208360051b86010151908181105f14611f30575f52602052600160405f205b920191611eff565b905f52602052600160405f20611f28565b915092501490565b90611f5382610a6c565b611f606040519182610a45565b8281528092611f71601f1991610a6c565b0190602036910137565b9060405160a08101604052600a60808201935f8552935b5f190193603082820601855304928315611fae57600a90611f92565b809350608091030191601f190191825256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206283e7d571598b6dfa9daa03d46da9a60ef5404ca232b55df2c45c388aab0ccc64736f6c634300081e0033", "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461022f578063029877b61461022a578063041fa44e1461022557806306fdde0314610220578063081812fc1461021b5780630922f9c514610194578063095ea7b3146102165780630c1c972a14610211578063163e1e611461020c57806318160ddd1461020757806323b872dd146102025780632db11544146101fd57806332cb6b0c146101f85780633ccfd60b146101f357806342842e0e146101ee578063521eb273146101e957806355f804b3146101e45780636352211e146101df57806366fddfa9146101da57806370a08231146101d5578063715018a6146101d05780637ad7614d146101cb5780638da5cb5b146101c657806395d89b41146101c1578063a22cb465146101bc578063b4402979146101b7578063b88d4fde146101b2578063bd32fb66146101ad578063c4be5b59146101a8578063c87b56dd146101a3578063e985e9c51461019e578063f2fde38b14610199578063f43a22dc146101945763fbd9b92d1461018f575f80fd5b6114b6565b610607565b61142c565b6113c8565b61124f565b61101c565b610ffb565b610f98565b610f7a565b610ee9565b610e44565b610e1c565b610dfb565b610da0565b610d45565b610c1f565b610bf0565b610ad9565b6109ed565b6109c9565b61095d565b610942565b610877565b610863565b610816565b610750565b6106f4565b610633565b6105b8565b6104e2565b61048d565b610310565b61024a565b6001600160e01b031981160361024657565b5f80fd5b34610246576020366003190112610246576102b860043561026a81610234565b6001600160e01b03198116630704183b60e11b8114919082156102ff575b82156102ee575b82156102dd575b82156102cc575b5081156102bc575b5060405190151581529081906020820190565b0390f35b6102c691506119ed565b5f6102a5565b632baae9fd60e01b1491505f61029d565b91506102e8816119ed565b91610296565b6362e27be760e01b8114925061028f565b63184371e560e31b81149250610288565b34610246575f36600319011261024657610328611a31565b5f54610448576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690610367602082610a45565b5f808252546001600160a01b0383164260a01b1761038d825f52600460205260405f2090565b556001600160a01b0383165f8181526005602052604090208054680500000000000000050190559182156104435760058201919360015b156103e4575b5f85855f5f516020611fc15f395f51905f528180a46103c4565b93600101938285036103ca57825f55803b6103fb57005b5f546004198101919060015b1561042f575b5f61042461042086600187019686611e31565b1590565b15610407575b611929565b80831061040d57925050505f540361024657005b611cdc565b60405162461bcd60e51b815260206004820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152606490fd5b34610246575f366003190112610246576020600954604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206104df9281815201906104aa565b90565b34610246575f366003190112610246576040515f600254610502816114d7565b80845290600181169081156105945750600114610536575b6102b88361052a81850382610a45565b604051918291826104ce565b91905060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace915f905b80821061057a5750909150810160200161052a61051a565b919260018160209254838588010152019101909291610562565b60ff191660208086019190915291151560051b8401909101915061052a905061051a565b34610246576020366003190112610246576004356105d581611c53565b156105f8575f526006602052602060018060a01b0360405f205416604051908152f35b6333d1c03960e21b5f5260045ffd5b34610246575f36600319011261024657602060405160058152f35b6001600160a01b0381160361024657565b60403660031901126102465760043561064b81610622565b602435906001600160a01b0361066083611cf9565b16908133036106cf575b61069f81610680855f52600660205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b5f82815260076020908152604080832033845290915290205460ff1661066a57611c92565b34610246575f3660031901126102465761070c611a31565b5f600955600e805460ff19166001179055005b9181601f840112156102465782359167ffffffffffffffff8311610246576020808501948460051b01011161024657565b346102465760203660031901126102465760043567ffffffffffffffff81116102465761078190369060040161071f565b610789611a31565b6107955f54151561150f565b5f5481810180911161081157606f106107d7575f5b8181106107b357005b806107d16107cc6107c76001948688611575565b611599565b611a58565b016107aa565b60405162461bcd60e51b815260206004820152601260248201527145786365646573206d617820737570706c7960701b6044820152606490fd5b611554565b34610246575f3660031901126102465760205f546001549003604051908152f35b60609060031901126102465760043561084f81610622565b9060243561085c81610622565b9060443590565b61087561086f36610837565b916115a3565b005b60203660031901126102465760043561088e611d69565b61089a6009541561172e565b6108a860ff600e541661172e565b6108b45f54151561150f565b5f5481810180911161081157606f6108cd911115611773565b60058110156108fd57806108ed6108e66108f3936117b4565b34146117f8565b33611b4d565b6108756001600b55565b60405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152606490fd5b34610246575f366003190112610246576020604051606f8152f35b34610246575f36600319011261024657610975611a31565b5f808080478181156109c0575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690f1156109b557005b6040513d5f823e3d90fd5b506108fc610982565b6108756109d536610837565b90604051926109e5602085610a45565b5f84526118f7565b34610246575f366003190112610246576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610a6757604052565b610a31565b67ffffffffffffffff8111610a6757601f01601f191660200190565b929192610a9482610a6c565b91610aa26040519384610a45565b829481845281830111610246578281602093845f960137010152565b9080601f83011215610246578160206104df93359101610a88565b346102465760203660031901126102465760043567ffffffffffffffff811161024657610b0a903690600401610abe565b610b12611a31565b805167ffffffffffffffff8111610a6757610b3781610b32600c546114d7565b611851565b602091601f8211600114610b7557610b65925f9183610b6a575b50508160011b915f199060031b1c19161790565b600c55005b015190505f80610b51565b600c5f52601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610bd857508360019510610bc0575b505050811b01600c55005b01515f1960f88460031b161c191690555f8080610bb5565b91926020600181928685015181550194019201610ba3565b346102465760203660031901126102465760206001600160a01b03610c16600435611cf9565b16604051908152f35b346102465760403660031901126102465760043567ffffffffffffffff811161024657610c50903690600401610abe565b60243567ffffffffffffffff811161024657610c73610c8791369060040161071f565b9190610c7f8433611d89565b9236916118a1565b906009548015610d0057610c9a92611ef8565b15610caf576102b890604051918291826104ce565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201526232b21760e91b6064820152608490fd5b60405162461bcd60e51b815260206004820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152606490fd5b3461024657602036600319011261024657600435610d6281610622565b6001600160a01b03168015610d91575f526005602052602067ffffffffffffffff60405f205416604051908152f35b6323d3ad8160e21b5f5260045ffd5b34610246575f36600319011261024657610db8611a31565b600a80546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610246575f3660031901126102465760206040516618838370f340008152f35b34610246575f36600319011261024657600a546040516001600160a01b039091168152602090f35b34610246575f366003190112610246576040515f600354610e64816114d7565b80845290600181169081156105945750600114610e8b576102b88361052a81850382610a45565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210610ecf5750909150810160200161052a61051a565b919260018160209254838588010152019101909291610eb7565b3461024657604036600319011261024657600435610f0681610622565b6024359081151580920361024657335f9081526007602090815260408083206001600160a01b0385168452909152902060ff1981541660ff841617905560405191825260018060a01b0316907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b34610246575f36600319011261024657610f92611a31565b5f600955005b608036600319011261024657600435610fb081610622565b60243590610fbd82610622565b6044356064359267ffffffffffffffff8411610246573660238501121561024657610ff5610875943690602481600401359101610a88565b926118f7565b3461024657602036600319011261024657600435611017611a31565b600955005b60603660031901126102465760243560043560443567ffffffffffffffff81116102465761104e90369060040161071f565b92611057611d69565b6110635f54151561150f565b5f5483810180911161081157606f61107c911115611773565b5f93818072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b81101561122c575b806d04ee2d6d415b85acef8100000000600a921015611210575b662386f26fc100008110156111fb575b6305f5e1008110156111e9575b6127108110156111d9575b60648110156111ca575b10156111bf575b61112e602161110360018901611f49565b978801015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b600a82061a8353600a900490565b90811561113e5761112e90611108565b505061116c611192936111719261116761115b6108f39933611d89565b926009549236916118a1565b611ef8565b611938565b335f908152600d6020526040902061118b90849054611568565b111561198f565b61119e6108e6826117d6565b335f908152600d602052604090206111b7828254611568565b905533611b4d565b6001909501946110f2565b600290606490049701966110eb565b60049061271090049701966110e1565b6008906305f5e10090049701966110d6565b601090662386f26fc1000090049701966110c9565b6020906d04ee2d6d415b85acef810000000090049701966110b9565b506040955072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830461109f565b346102465760203660031901126102465760043561126c81611c53565b156113b957604051905f82600c5491611284836114d7565b808352926001811690811561139a575060011461133b575b6112a892500383610a45565b81511561132c576112d2916112d86112c26112e693611f7b565b60405194859360208501906119db565b906119db565b03601f198101835282610a45565b80511561131b5761130a61052a6102b8926112d860405193849260208401906119db565b64173539b7b760d91b815260050190565b506102b861132761183d565b61052a565b505061133661183d565b6112e6565b5090600c5f527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7905f915b81831061137e5750509060206112a89282010161129c565b6020919350806001915483858901015201910190918492611366565b602092506112a894915060ff191682840152151560051b82010161129c565b630a14c4b560e41b5f5260045ffd5b3461024657604036600319011261024657602060ff6114206004356113ec81610622565b602435906113f982610622565b60018060a01b03165f526007845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b346102465760203660031901126102465760043561144981610622565b611451611a31565b6001600160a01b031680156114a357600a80546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b631e4fbdf760e01b5f525f60045260245ffd5b34610246575f366003190112610246576020604051669536c7089100008152f35b90600182811c92168015611505575b60208310146114f157565b634e487b7160e01b5f52602260045260245ffd5b91607f16916114e6565b1561151657565b60405162461bcd60e51b815260206004820152601660248201527514995cd95c9d995cc81b9bdd081d185ad95b881e595d60521b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b9190820180921161081157565b91908110156115855760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356104df81610622565b91906115ae82611cf9565b6001600160a01b03938416938116849003611729575f83815260066020526040902080546115eb6001600160a01b03871633908114908314171590565b6116df575b6116d6575b506001600160a01b0384165f90815260056020526040902080545f190190556001600160a01b0382165f908152600560205260409020805460010190556001600160a01b0382164260a01b17600160e11b17611659845f52600460205260405f2090565b55600160e11b811615611691575b506001600160a01b03169182905f516020611fc15f395f51905f525f80a41561168c57565b611cbe565b600183016116a7815f52600460205260405f2090565b54156116b4575b50611667565b5f5481146116ae576116ce905f52600460205260405f2090565b555f806116ae565b5f90555f6115f5565b61171f610420611718336117038a60018060a01b03165f52600760205260405f2090565b9060018060a01b03165f5260205260405f2090565b5460ff1690565b156115f057611caf565b611ca1565b1561173557565b60405162461bcd60e51b81526020600482015260166024820152755075626c69632073616c65206e6f742061637469766560501b6044820152606490fd5b1561177a57565b60405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606490fd5b90669536c708910000820291808304669536c708910000149015171561081157565b906618838370f340008202918083046618838370f34000149015171561081157565b156117ff57565b60405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b6044820152606490fd5b6040519061184c602083610a45565b5f8252565b601f811161185d575050565b600c5f5260205f20906020601f840160051c83019310611897575b601f0160051c01905b81811061188c575050565b5f8155600101611881565b9091508190611878565b9291909267ffffffffffffffff8411610a67578360051b9060206040516118ca82850182610a45565b809681520191810192831161024657905b8282106118e757505050565b81358152602091820191016118db565b9291906119058282866115a3565b803b611912575b50505050565b61191b93611ed0565b15611929575f80808061190c565b6368d2bf6b60e11b5f5260045ffd5b1561193f57565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c69604482015261195960f21b6064820152608490fd5b1561199657565b60405162461bcd60e51b815260206004820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152606490fd5b805191908290602001825e015f815290565b63ffffffff60e01b166301ffc9a760e01b8114908115611a20575b8115611a12575090565b635b5e139f60e01b14919050565b6380ac58cd60e01b81149150611a08565b600a546001600160a01b03163303611a4557565b63118cdaa760e01b5f523360045260245ffd5b90604051611a67602082610a45565b5f80825254906001600160a01b0384164260a01b17600160e11b17611a94835f52600460205260405f2090565b556001600160a01b0384165f8181526005602052604090208054680100000000000000010190559283156104435760018301929460015b15611aeb575b5f86865f5f516020611fc15f395f51905f528180a4611acb565b9460010194838603611ad1579291945092505f55803b611b0a57509050565b5f545f198101929060015b15611b38575b5f611b2e61042087600188019787611e31565b15611b1557611929565b808410611b1b5792509250505f540361024657565b9160405190611b5d602083610a45565b5f82525f54918315611c4e576001600160a01b0385164260a01b6001861460e11b1717611b92845f52600460205260405f2090565b556001600160a01b0385165f818152600560205260409020805468010000000000000001870201905593841561044357808401939560015b15611bea575b5f87875f5f516020611fc15f395f51905f528180a4611bca565b9560010195848703611bd057929550929093505f55803b611c0a57505050565b9091925f54