[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApprovalToCurrentOwner", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "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": false, "internalType": "string", "name": "prevURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "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": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "expires", "type": "uint64" } ], "name": "UpdateUser", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "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": "_to", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "string", "name": "_baseURI", "type": "string" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "batchMintTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "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": [], "name": "getBaseURICount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "getBatchIdAtIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "address", "name": "_operator", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isApprovedOrOwner", "outputs": [ { "internalType": "bool", "name": "isApprovedOrOwnerOf", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "mintTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "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": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "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": "nonpayable", "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": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint64", "name": "expires", "type": "uint64" } ], "name": "setUser", "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "userExpires", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "userOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162002b1038038062002b1083398101604081905262000034916200030d565b8383838383838160029080519060200190620000529291906200019a565b508051620000689060039060208401906200019a565b505060008055506200007a336200009d565b6200008f826001600160801b038316620000ef565b5050505050505050620003f6565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b612710811115620001385760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b604482015260640160405180910390fd5b600a80546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b828054620001a890620003b9565b90600052602060002090601f016020900481019282620001cc576000855562000217565b82601f10620001e757805160ff191683800117855562000217565b8280016001018555821562000217579182015b8281111562000217578251825591602001919060010190620001fa565b506200022592915062000229565b5090565b5b808211156200022557600081556001016200022a565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026857600080fd5b81516001600160401b038082111562000285576200028562000240565b604051601f8301601f19908116603f01168101908282118183101715620002b057620002b062000240565b81604052838152602092508683858801011115620002cd57600080fd5b600091505b83821015620002f15785820183015181830184015290820190620002d2565b83821115620003035760008385830101525b9695505050505050565b600080600080608085870312156200032457600080fd5b84516001600160401b03808211156200033c57600080fd5b6200034a8883890162000256565b955060208701519150808211156200036157600080fd5b50620003708782880162000256565b604087015190945090506001600160a01b03811681146200039057600080fd5b60608601519092506001600160801b0381168114620003ae57600080fd5b939692955090935050565b600181811c90821680620003ce57607f821691505b60208210811415620003f057634e487b7160e01b600052602260045260246000fd5b50919050565b61270a80620004066000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c806363b45e2d1161011a578063a22cb465116100ad578063c2f1f14a1161007c578063c2f1f14a146104b8578063c87b56dd146104cb578063e030565e146104de578063e8a3d485146104f1578063e985e9c5146104f957600080fd5b8063a22cb46514610454578063ac9650d814610467578063b24f2d3914610487578063b88d4fde146104a557600080fd5b80638fc88c48116100e95780638fc88c48146103f6578063938e3d7b1461042657806395d89b41146104395780639bcf7a151461044157600080fd5b806363b45e2d146103b757806370a08231146103bf578063754a81d9146103d25780638da5cb5b146103e557600080fd5b80632419f51b1161019d57806342966c681161016c57806342966c6814610336578063430c2081146103495780634cc157df1461035c578063600dd5ea146103915780636352211e146103a457600080fd5b80632419f51b146102d65780632a55205a146102e95780633b1475a71461031b57806342842e0e1461032357600080fd5b8063095ea7b3116101d9578063095ea7b31461028757806313af40351461029a57806318160ddd146102ad57806323b872dd146102c357600080fd5b806275a3171461020a57806301ffc9a71461021f57806306fdde0314610247578063081812fc1461025c575b600080fd5b61021d610218366004611fd8565b610535565b005b61023261022d36600461203b565b6105d7565b60405190151581526020015b60405180910390f35b61024f610602565b60405161023e91906120b0565b61026f61026a3660046120c3565b610694565b6040516001600160a01b03909116815260200161023e565b61021d6102953660046120dc565b6106d8565b61021d6102a8366004612106565b61075f565b600154600054035b60405190815260200161023e565b61021d6102d1366004612121565b61078f565b6102b56102e43660046120c3565b61079a565b6102fc6102f736600461215d565b610808565b604080516001600160a01b03909316835260208301919091520161023e565b6000546102b5565b61021d610331366004612121565b610845565b61021d6103443660046120c3565b610860565b6102326103573660046120dc565b61086b565b61036f61036a3660046120c3565b6108ea565b604080516001600160a01b03909316835261ffff90911660208301520161023e565b61021d61039f3660046120dc565b610955565b61026f6103b23660046120c3565b610983565b600c546102b5565b6102b56103cd366004612106565b610995565b61021d6103e036600461217f565b6109e3565b6009546001600160a01b031661026f565b6102b56104043660046120c3565b6000908152600f6020526040902054600160a01b90046001600160401b031690565b61021d6104343660046121fc565b610a57565b61024f610a84565b61021d61044f366004612230565b610a93565b61021d610462366004612255565b610ac2565b61047a610475366004612291565b610b58565b60405161023e9190612305565b600a546001600160a01b03811690600160a01b900461ffff1661036f565b61021d6104b3366004612367565b610c4c565b61026f6104c63660046120c3565b610c90565b61024f6104d93660046120c3565b610cdf565b61021d6104ec3660046123c2565b610dcd565b61024f610ebd565b61023261050736600461240e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61053d610f4b565b6105885760405162461bcd60e51b81526020600482015260176024820152762737ba1030baba3437b934bd32b2103a379036b4b73a1760491b60448201526064015b60405180910390fd5b80600e600061059660005490565b815260200190815260200160002090805190602001906105b7929190611e86565b506105d382600160405180602001604052806000815250610f78565b5050565b60006001600160e01b03198216632b424ad760e21b14806105fc57506105fc82611118565b92915050565b60606002805461061190612441565b80601f016020809104026020016040519081016040528092919081815260200182805461063d90612441565b801561068a5780601f1061065f5761010080835404028352916020019161068a565b820191906000526020600020905b81548152906001019060200180831161066d57829003601f168201915b5050505050905090565b600061069f82611184565b6106bc576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006106e382610983565b9050806001600160a01b0316836001600160a01b031614156107185760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161461074f576107328133610507565b61074f576040516367d9dca160e11b815260040160405180910390fd5b61075a8383836111af565b505050565b610767610f4b565b6107835760405162461bcd60e51b815260040161057f9061247c565b61078c8161120b565b50565b61075a83838361125d565b60006107a5600c5490565b82106107e35760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015260640161057f565b600c82815481106107f6576107f66124a4565b90600052602060002001549050919050565b600080600080610817866108ea565b90945084925061ffff16905061271061083082876124d0565b61083a9190612505565b925050509250929050565b61075a83838360405180602001604052806000815250610c4c565b61078c816001611438565b60008061087783610983565b9050806001600160a01b0316846001600160a01b031614806108be57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b806108e25750836001600160a01b03166108d784610694565b6001600160a01b0316145b949350505050565b6000818152600b60209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115610931578051602082015161094b565b600a546001600160a01b03811690600160a01b900461ffff165b9250925050915091565b61095d610f4b565b6109795760405162461bcd60e51b815260040161057f9061247c565b6105d382826115eb565b600061098e82611691565b5192915050565b60006001600160a01b0382166109be576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6109eb610f4b565b610a315760405162461bcd60e51b81526020600482015260176024820152762737ba1030baba3437b934bd32b2103a379036b4b73a1760491b604482015260640161057f565b610a44610a3d60005490565b84846117ab565b5050610a51848483610f78565b50505050565b610a5f610f4b565b610a7b5760405162461bcd60e51b815260040161057f9061247c565b61078c81611818565b60606003805461061190612441565b610a9b610f4b565b610ab75760405162461bcd60e51b815260040161057f9061247c565b61075a8383836118fa565b6001600160a01b038216331415610aec5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6060816001600160401b03811115610b7257610b72611f36565b604051908082528060200260200182016040528015610ba557816020015b6060815260200190600190039081610b905790505b50905060005b82811015610c4557610c1530858584818110610bc957610bc96124a4565b9050602002810190610bdb9190612519565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119c392505050565b828281518110610c2757610c276124a4565b60200260200101819052508080610c3d90612566565b915050610bab565b5092915050565b610c5784848461125d565b6001600160a01b0383163b15610a5157610c73848484846119ef565b610a51576040516368d2bf6b60e11b815260040160405180910390fd5b6000818152600f602052604081205442600160a01b9091046001600160401b031610610cd257506000908152600f60205260409020546001600160a01b031690565b506000919050565b919050565b6000818152600e6020526040812080546060929190610cfd90612441565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2990612441565b8015610d765780601f10610d4b57610100808354040283529160200191610d76565b820191906000526020600020905b815481529060010190602001808311610d5957829003601f168201915b50505050509050600081511115610d8d5792915050565b6000610d9884611ad7565b905080610da485611c73565b604051602001610db5929190612581565b60405160208183030381529060405292505050919050565b610dd7338461086b565b610e3d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161057f565b6000838152600f602090815260409182902080546001600160a01b0386166001600160e01b03199091168117600160a01b6001600160401b03871690810291909117835593519384529092909186917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe910160405180910390a350505050565b60088054610eca90612441565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690612441565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b6000610f5f6009546001600160a01b031690565b6001600160a01b0316336001600160a01b031614905090565b6000546001600160a01b038416610fa157604051622e076360e81b815260040160405180910390fd5b82610fbf5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b156110d5575b60405182906001600160a01b038816906000906000805160206126b5833981519152908290a461109e60008784806001019550876119ef565b6110bb576040516368d2bf6b60e11b815260040160405180910390fd5b8082106110655782600054146110d057600080fd5b611108565b5b6040516001830192906001600160a01b038816906000906000805160206126b5833981519152908290a48082106110d6575b506000908155610a519085838684565b60006301ffc9a760e01b6001600160e01b03198316148061114957506380ac58cd60e01b6001600160e01b03198316145b806111645750635b5e139f60e01b6001600160e01b03198316145b806105fc57506001600160e01b0319821663152a902d60e11b1492915050565b60008054821080156105fc575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b600061126882611691565b9050836001600160a01b031681600001516001600160a01b03161461129f5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806112bd57506112bd8533610507565b806112d85750336112cd84610694565b6001600160a01b0316145b9050806112f857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661131f57604051633a954ecd60e21b815260040160405180910390fd5b61132b600084876111af565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166113ff5760005482146113ff57805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03166000805160206126b583398151915260405160405180910390a45050505050565b600061144383611691565b805190915082156114a9576000336001600160a01b038316148061146c575061146c8233610507565b8061148757503361147c86610694565b6001600160a01b0316145b9050806114a757604051632ce44b5f60e11b815260040160405180910390fd5b505b6114b5600085836111af565b6001600160a01b0380821660008181526005602090815260408083208054600160801b6000196001600160401b0380841691909101811667ffffffffffffffff198416811783900482166001908101831690930277ffffffffffffffff0000000000000000ffffffffffffffff19909416179290921783558b86526004909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b1785559189018084529220805491949091166115b35760005482146115b357805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b038416906000805160206126b5833981519152908390a4505060018054810190555050565b61271081111561162f5760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b604482015260640161057f565b600a80546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b60408051606081018252600080825260208201819052918101919091528160005481101561179257600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906117905780516001600160a01b031615611727579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff161515928101929092521561178b579392505050565b611727565b505b604051636f96cda160e11b815260040160405180910390fd5b6000806117b884866125b0565b600c8054600181019091557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018190556000818152600d60209081526040909120855192945084935061180f929091860190611e86565b50935093915050565b60006008805461182790612441565b80601f016020809104026020016040519081016040528092919081815260200182805461185390612441565b80156118a05780601f10611875576101008083540402835291602001916118a0565b820191906000526020600020905b81548152906001019060200180831161188357829003601f168201915b505085519394506118bc93600893506020870192509050611e86565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516118ee9291906125c8565b60405180910390a15050565b61271081111561193e5760405162461bcd60e51b815260206004820152600f60248201526e45786365656473206d61782062707360881b604482015260640161057f565b6040805180820182526001600160a01b0384811680835260208084018681526000898152600b8352869020945185546001600160a01b031916941693909317845591516001909301929092559151838152909185917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a3505050565b60606119e8838360405180606001604052806027815260200161268e60279139611d70565b9392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a249033908990889088906004016125f6565b6020604051808303816000875af1925050508015611a5f575060408051601f3d908101601f19168201909252611a5c91810190612629565b60015b611aba573d808015611a8d576040519150601f19603f3d011682016040523d82523d6000602084013e611a92565b606091505b508051611ab2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60606000611ae4600c5490565b90506000600c805480602002602001604051908101604052809291908181526020018280548015611b3457602002820191906000526020600020905b815481526020019060010190808311611b20575b5050505050905060005b82811015611c3857818181518110611b5857611b586124a4565b6020026020010151851015611c2657600d6000838381518110611b7d57611b7d6124a4565b602002602001015181526020019081526020016000208054611b9e90612441565b80601f0160208091040260200160405190810160405280929190818152602001828054611bca90612441565b8015611c175780601f10611bec57610100808354040283529160200191611c17565b820191906000526020600020905b815481529060010190602001808311611bfa57829003601f168201915b50505050509350505050919050565b611c316001826125b0565b9050611b3e565b5060405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9259608a1b604482015260640161057f565b606081611c975750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cc15780611cab81612566565b9150611cba9050600a83612505565b9150611c9b565b6000816001600160401b03811115611cdb57611cdb611f36565b6040519080825280601f01601f191660200182016040528015611d05576020820181803683370190505b5090505b84156108e257611d1a600183612646565b9150611d27600a8661265d565b611d329060306125b0565b60f81b818381518110611d4757611d476124a4565b60200101906001600160f81b031916908160001a905350611d69600a86612505565b9450611d09565b60606001600160a01b0384163b611dd85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161057f565b600080856001600160a01b031685604051611df39190612671565b600060405180830381855af49150503d8060008114611e2e576040519150601f19603f3d011682016040523d82523d6000602084013e611e33565b606091505b5091509150611e43828286611e4d565b9695505050505050565b60608315611e5c5750816119e8565b825115611e6c5782518084602001fd5b8160405162461bcd60e51b815260040161057f91906120b0565b828054611e9290612441565b90600052602060002090601f016020900481019282611eb45760008555611efa565b82601f10611ecd57805160ff1916838001178555611efa565b82800160010185558215611efa579182015b82811115611efa578251825591602001919060010190611edf565b50611f06929150611f0a565b5090565b5b80821115611f065760008155600101611f0b565b80356001600160a01b0381168114610cda57600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f5d57600080fd5b81356001600160401b0380821115611f7757611f77611f36565b604051601f8301601f19908116603f01168101908282118183101715611f9f57611f9f611f36565b81604052838152866020858801011115611fb857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611feb57600080fd5b611ff483611f1f565b915060208301356001600160401b0381111561200f57600080fd5b61201b85828601611f4c565b9150509250929050565b6001600160e01b03198116811461078c57600080fd5b60006020828403121561204d57600080fd5b81356119e881612025565b60005b8381101561207357818101518382015260200161205b565b83811115610a515750506000910152565b6000815180845261209c816020860160208601612058565b601f01601f19169290920160200192915050565b6020815260006119e86020830184612084565b6000602082840312156120d557600080fd5b5035919050565b600080604083850312156120ef57600080fd5b6120f883611f1f565b946020939093013593505050565b60006020828403121561211857600080fd5b6119e882611f1f565b60008060006060848603121561213657600080fd5b61213f84611f1f565b925061214d60208501611f1f565b9150604084013590509250925092565b6000806040838503121561217057600080fd5b50508035926020909101359150565b6000806000806080858703121561219557600080fd5b61219e85611f1f565b93506020850135925060408501356001600160401b03808211156121c157600080fd5b6121cd88838901611f4c565b935060608701359150808211156121e357600080fd5b506121f087828801611f4c565b91505092959194509250565b60006020828403121561220e57600080fd5b81356001600160401b0381111561222457600080fd5b6108e284828501611f4c565b60008060006060848603121561224557600080fd5b8335925061214d60208501611f1f565b6000806040838503121561226857600080fd5b61227183611f1f565b91506020830135801515811461228657600080fd5b809150509250929050565b600080602083850312156122a457600080fd5b82356001600160401b03808211156122bb57600080fd5b818501915085601f8301126122cf57600080fd5b8135818111156122de57600080fd5b8660208260051b85010111156122f357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561235a57603f19888603018452612348858351612084565b9450928501929085019060010161232c565b5092979650505050505050565b6000806000806080858703121561237d57600080fd5b61238685611f1f565b935061239460208601611f1f565b92506040850135915060608501356001600160401b038111156123b657600080fd5b6121f087828801611f4c565b6000806000606084860312156123d757600080fd5b833592506123e760208501611f1f565b915060408401356001600160401b038116811461240357600080fd5b809150509250925092565b6000806040838503121561242157600080fd5b61242a83611f1f565b915061243860208401611f1f565b90509250929050565b600181811c9082168061245557607f821691505b6020821081141561247657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156124ea576124ea6124ba565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612514576125146124ef565b500490565b6000808335601e1984360301811261253057600080fd5b8301803591506001600160401b0382111561254a57600080fd5b60200191503681900382131561255f57600080fd5b9250929050565b600060001982141561257a5761257a6124ba565b5060010190565b60008351612593818460208801612058565b8351908301906125a7818360208801612058565b01949350505050565b600082198211156125c3576125c36124ba565b500190565b6040815260006125db6040830185612084565b82810360208401526125ed8185612084565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e4390830184612084565b60006020828403121561263b57600080fd5b81516119e881612025565b600082821015612658576126586124ba565b500390565b60008261266c5761266c6124ef565b500690565b60008251612683818460208701612058565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220129c3a913bba4d82e68c9d00d95402ec6986357858830806af72302244f7133764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004c34204c3e6fe3809a0614894d481cfe7ef33f6800000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000000009446f75626c6532333400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006446f75626c650000000000000000000000000000000000000000000000000000