UNPKG

@credenza-web3/contracts

Version:

Credenza Contracts

713 lines 52.4 kB
{ "_format": "hh-sol-artifact-1", "contractName": "DeComContract", "sourceName": "contracts/tokens/DeComContract.sol", "abi": [ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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": [ { "internalType": "address", "name": "customerAddress", "type": "address" } ], "name": "addAuthorizedReseller", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "addOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "adminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "clearOwners", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDescription", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwners", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTrustedForwarder", "outputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVersion", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "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": "customerAddress", "type": "address" } ], "name": "isAuthorizedReseller", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "ownerRenderData", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "readOwnerRenderData", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "readRenderData", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "customerAddress", "type": "address" } ], "name": "removeAuthorizedReseller", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "removeOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renderData", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "description", "type": "string" } ], "name": "setDescription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_forwarder", "type": "address" } ], "name": "setTrustedForwarder", "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": [ { "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": "string", "name": "HTMLstring", "type": "string" } ], "name": "writeOwnerRenderData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "HTMLstring", "type": "string" } ], "name": "writeRenderData", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x608060405234801562000010575f80fd5b50604051620026f2380380620026f2833981016040819052620000339162000293565b81815f62000042838262000385565b50600162000051828262000385565b5050506200006e620000686200007660201b60201c565b62000086565b50506200044d565b5f62000081620001a0565b905090565b6008541580620000bc5750620000bc6200009f62000076565b6001600160a01b03165f9081526007602052604090205460ff1690565b620001185760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604482015261371760f11b606482015260840160405180910390fd5b6001600160a01b0381165f9081526007602052604090205460ff166200019d576001600160a01b0381165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b50565b5f60143610801590620001bd5750600a546001600160a01b031633145b15620001d0575060131936013560601c90565b503390565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001f9575f80fd5b81516001600160401b0380821115620002165762000216620001d5565b604051601f8301601f19908116603f01168101908282118183101715620002415762000241620001d5565b816040528381526020925086838588010111156200025d575f80fd5b5f91505b8382101562000280578582018301518183018401529082019062000261565b5f93810190920192909252949350505050565b5f8060408385031215620002a5575f80fd5b82516001600160401b0380821115620002bc575f80fd5b620002ca86838701620001e9565b93506020850151915080821115620002e0575f80fd5b50620002ef85828601620001e9565b9150509250929050565b600181811c908216806200030e57607f821691505b6020821081036200032d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000380575f81815260208120601f850160051c810160208610156200035b5750805b601f850160051c820191505b818110156200037c5782815560010162000367565b5050505b505050565b81516001600160401b03811115620003a157620003a1620001d5565b620003b981620003b28454620002f9565b8462000333565b602080601f831160018114620003ef575f8415620003d75750858301515b5f19600386901b1c1916600185901b1785556200037c565b5f85815260208120601f198616915b828110156200041f57888601518255948401946001909101908401620003fe565b50858210156200043d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b612297806200045b5f395ff3fe608060405234801561000f575f80fd5b5060043610610213575f3560e01c8063572b6c051161011f578063a22cb465116100a9578063ce1b815f11610079578063ce1b815f146104b5578063d0def521146104c6578063da742228146104d9578063e985e9c5146104ec578063f17e48ec14610527575f80fd5b8063a22cb46514610474578063b88d4fde14610487578063bb4a6a5d1461049a578063c87b56dd146104a2575f80fd5b806370a08231116100ef57806370a08231146103f857806390c3f38f1461041957806395d89b411461042c5780639eda8aae14610434578063a0e67e2b1461045f575f80fd5b8063572b6c051461039d5780636352211e146103bf5780637065cb48146103d25780637075c269146103e5575f80fd5b80631df5c02c116101a0578063331e29f411610170578063331e29f4146103495780633c695e391461035c57806342842e0e1461036f57806342966c68146103825780635260f5e614610395575f80fd5b80631df5c02c146102f057806323b872dd1461030357806324c85a09146103165780632f54bf6e1461031e575f80fd5b8063081812fc116101e6578063081812fc14610264578063095ea7b31461028f5780630d8e6e2c146102a4578063173825d9146102d55780631a092541146102e8575f80fd5b806301ffc9a714610217578063055789b71461023f57806305cb3d7e1461025457806306fdde031461025c575b5f80fd5b61022a610225366004611b99565b61053a565b60405190151581526020015b60405180910390f35b610247610564565b6040516102369190611c01565b6102476105f0565b61024761069f565b610277610272366004611c13565b6106ad565b6040516001600160a01b039091168152602001610236565b6102a261029d366004611c45565b6106d2565b005b6040805180820190915260158152742232a1b7b6a1b7b73a3930b1ba103b10181718971960591b6020820152610247565b6102a26102e3366004611c6d565b6107fd565b6102476108c2565b6102a26102fe366004611c6d565b6108d1565b6102a2610311366004611c86565b610922565b61024761095a565b61022a61032c366004611c6d565b6001600160a01b03165f9081526007602052604090205460ff1690565b6102a2610357366004611d64565b610969565b6102a261036a366004611c6d565b6109aa565b6102a261037d366004611c86565b6109fe565b6102a2610390366004611c13565b610a18565b6102a2610a52565b61022a6103ab366004611c6d565b600a546001600160a01b0391821691161490565b6102776103cd366004611c13565b610af9565b6102a26103e0366004611c6d565b610b58565b6102a26103f3366004611d64565b610c0d565b61040b610406366004611c6d565b610c4a565b604051908152602001610236565b6102a2610427366004611d64565b610cce565b610247610d0b565b61022a610442366004611c6d565b6001600160a01b03165f908152600e602052604090205460ff1690565b610467610d1a565b6040516102369190611d96565b6102a2610482366004611de2565b610d79565b6102a2610495366004611e1b565b610d8b565b610247610dca565b6102476104b0366004611c13565b610dd7565b600a546001600160a01b0316610277565b61040b6104d4366004611e92565b610ee1565b6102a26104e7366004611c6d565b610f49565b61022a6104fa366004611edd565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6102a2610535366004611c45565b610f98565b5f6001600160e01b03198216632483248360e11b148061055e575061055e82610feb565b92915050565b600d805461057190611f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461059d90611f0e565b80156105e85780601f106105bf576101008083540402835291602001916105e8565b820191905f5260205f20905b8154815290600101906020018083116105cb57829003601f168201915b505050505081565b60605f6105fe61040661103a565b111561069257600d805461061190611f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461063d90611f0e565b80156106885780601f1061065f57610100808354040283529160200191610688565b820191905f5260205f20905b81548152906001019060200180831161066b57829003601f168201915b5050505050905090565b600c805461061190611f0e565b60605f805461061190611f0e565b5f6106b782611048565b505f908152600460205260409020546001600160a01b031690565b5f6106dc82610af9565b9050806001600160a01b0316836001600160a01b03160361074e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b031661076061103a565b6001600160a01b0316148061077c575061077c816104fa61103a565b6107ee5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610745565b6107f883836110a6565b505050565b6008541580610812575061081261032c61103a565b61082e5760405162461bcd60e51b815260040161074590611f46565b6001600160a01b0381165f9081526007602052604090205460ff166108955760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e657200006044820152606401610745565b6001600160a01b0381165f908152600760205260409020805460ff191690556108bf600882611113565b50565b60606009805461061190611f0e565b60085415806108e657506108e661032c61103a565b6109025760405162461bcd60e51b815260040161074590611f46565b6001600160a01b03165f908152600e60205260409020805460ff19169055565b61093361092d61103a565b82611212565b61094f5760405162461bcd60e51b815260040161074590611f88565b6107f883838361128e565b6060600d805461061190611f0e565b600854158061097e575061097e61032c61103a565b61099a5760405162461bcd60e51b815260040161074590611f46565b600d6109a68282612022565b5050565b60085415806109bf57506109bf61032c61103a565b6109db5760405162461bcd60e51b815260040161074590611f46565b6001600160a01b03165f908152600e60205260409020805460ff19166001179055565b6107f883838360405180602001604052805f815250610d8b565b6008541580610a2d5750610a2d61032c61103a565b610a495760405162461bcd60e51b815260040161074590611f46565b6108bf816113f0565b6008541580610a675750610a6761032c61103a565b610a835760405162461bcd60e51b815260040161074590611f46565b5f5b600854811015610aeb575f60075f60088481548110610aa657610aa66120de565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610ae381612106565b915050610a85565b50610af760085f611b1e565b565b5f818152600260205260408120546001600160a01b03168061055e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610745565b6008541580610b6d5750610b6d61032c61103a565b610b895760405162461bcd60e51b815260040161074590611f46565b6001600160a01b0381165f9081526007602052604090205460ff166108bf576001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6008541580610c225750610c2261032c61103a565b610c3e5760405162461bcd60e51b815260040161074590611f46565b600c6109a68282612022565b5f6001600160a01b038216610cb35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610745565b506001600160a01b03165f9081526003602052604090205490565b6008541580610ce35750610ce361032c61103a565b610cff5760405162461bcd60e51b815260040161074590611f46565b60096109a68282612022565b60606001805461061190611f0e565b6060600880548060200260200160405190810160405280929190818152602001828054801561068857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d52575050505050905090565b6109a6610d8461103a565b838361142e565b610d9c610d9661103a565b83611212565b610db85760405162461bcd60e51b815260040161074590611f88565b610dc4848484846114fb565b50505050565b600c805461057190611f0e565b6060610de282611048565b5f8281526006602052604081208054610dfa90611f0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2690611f0e565b8015610e715780601f10610e4857610100808354040283529160200191610e71565b820191905f5260205f20905b815481529060010190602001808311610e5457829003601f168201915b505050505090505f610e8d60408051602081019091525f815290565b905080515f03610e9e575092915050565b815115610ed0578082604051602001610eb892919061211e565b60405160208183030381529060405292505050919050565b610ed98461152e565b949350505050565b6008545f901580610ef85750610ef861032c61103a565b610f145760405162461bcd60e51b815260040161074590611f46565b610f22600b80546001019055565b5f610f2c600b5490565b9050610f38848261159d565b610f428184611725565b9392505050565b6008541580610f5e5750610f5e61032c61103a565b610f7a5760405162461bcd60e51b815260040161074590611f46565b600a80546001600160a01b0319166001600160a01b03831617905550565b6008541580610fad5750610fad61032c61103a565b610fc95760405162461bcd60e51b815260040161074590611f46565b6109a6610fd582610af9565b838360405180602001604052805f8152506114fb565b5f6001600160e01b031982166380ac58cd60e01b148061101b57506001600160e01b03198216635b5e139f60e01b145b8061055e57506301ffc9a760e01b6001600160e01b031983161461055e565b5f6110436117ee565b905090565b5f818152600260205260409020546001600160a01b03166108bf5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610745565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110da82610af9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5b82548110156107f857816001600160a01b031683828154811061113a5761113a6120de565b5f918252602090912001546001600160a01b03160361120057825483906111639060019061214c565b81548110611173576111736120de565b905f5260205f20015f9054906101000a90046001600160a01b03168382815481106111a0576111a06120de565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806111db576111db61215f565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b8061120a81612106565b915050611115565b5f8061121d83610af9565b9050806001600160a01b0316846001600160a01b0316148061126357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b80610ed95750836001600160a01b031661127c846106ad565b6001600160a01b031614949350505050565b826001600160a01b03166112a182610af9565b6001600160a01b0316146112c75760405162461bcd60e51b815260040161074590612173565b6001600160a01b0382166113295760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610745565b826001600160a01b031661133c82610af9565b6001600160a01b0316146113625760405162461bcd60e51b815260040161074590612173565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113f981611821565b5f818152600660205260409020805461141190611f0e565b1590506108bf575f8181526006602052604081206108bf91611b39565b816001600160a01b0316836001600160a01b03160361148f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610745565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61150684848461128e565b611512848484846118b3565b610dc45760405162461bcd60e51b8152600401610745906121b8565b606061153982611048565b5f61154e60408051602081019091525f815290565b90505f81511161156c5760405180602001604052805f815250610f42565b80611576846119b7565b60405160200161158792919061211e565b6040516020818303038152906040529392505050565b6001600160a01b0382166115f35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610745565b5f818152600260205260409020546001600160a01b0316156116575760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610745565b5f818152600260205260409020546001600160a01b0316156116bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610745565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f828152600260205260409020546001600160a01b031661179f5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610745565b5f8281526006602052604090206117b68282612022565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b5f6014361080159061180a5750600a546001600160a01b031633145b1561181c575060131936013560601c90565b503390565b5f61182b82610af9565b905061183682610af9565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f6001600160a01b0384163b156119ac57836001600160a01b031663150b7a026118db61103a565b8786866040518563ffffffff1660e01b81526004016118fd949392919061220a565b6020604051808303815f875af1925050508015611937575060408051601f3d908101601f1916820190925261193491810190612246565b60015b611992573d808015611964576040519150601f19603f3d011682016040523d82523d5f602084013e611969565b606091505b5080515f0361198a5760405162461bcd60e51b8152600401610745906121b8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610ed9565b506001949350505050565b60605f6119c383611a47565b60010190505f8167ffffffffffffffff8111156119e2576119e2611cbf565b6040519080825280601f01601f191660200182016040528015611a0c576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a1657509392505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611a855772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611ab1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611acf57662386f26fc10000830492506010015b6305f5e1008310611ae7576305f5e100830492506008015b6127108310611afb57612710830492506004015b60648310611b0d576064830492506002015b600a831061055e5760010192915050565b5080545f8255905f5260205f20908101906108bf9190611b6c565b508054611b4590611f0e565b5f825580601f10611b54575050565b601f0160209004905f5260205f20908101906108bf91905b5b80821115611b80575f8155600101611b6d565b5090565b6001600160e01b0319811681146108bf575f80fd5b5f60208284031215611ba9575f80fd5b8135610f4281611b84565b5f5b83811015611bce578181015183820152602001611bb6565b50505f910152565b5f8151808452611bed816020860160208601611bb4565b601f01601f19169290920160200192915050565b602081525f610f426020830184611bd6565b5f60208284031215611c23575f80fd5b5035919050565b80356001600160a01b0381168114611c40575f80fd5b919050565b5f8060408385031215611c56575f80fd5b611c5f83611c2a565b946020939093013593505050565b5f60208284031215611c7d575f80fd5b610f4282611c2a565b5f805f60608486031215611c98575f80fd5b611ca184611c2a565b9250611caf60208501611c2a565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611ced57611ced611cbf565b604051601f8501601f19908116603f01168101908282118183101715611d1557611d15611cbf565b81604052809350858152868686011115611d2d575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611d55575f80fd5b610f4283833560208501611cd3565b5f60208284031215611d74575f80fd5b813567ffffffffffffffff811115611d8a575f80fd5b610ed984828501611d46565b602080825282518282018190525f9190848201906040850190845b81811015611dd65783516001600160a01b031683529284019291840191600101611db1565b50909695505050505050565b5f8060408385031215611df3575f80fd5b611dfc83611c2a565b915060208301358015158114611e10575f80fd5b809150509250929050565b5f805f8060808587031215611e2e575f80fd5b611e3785611c2a565b9350611e4560208601611c2a565b925060408501359150606085013567ffffffffffffffff811115611e67575f80fd5b8501601f81018713611e77575f80fd5b611e8687823560208401611cd3565b91505092959194509250565b5f8060408385031215611ea3575f80fd5b611eac83611c2a565b9150602083013567ffffffffffffffff811115611ec7575f80fd5b611ed385828601611d46565b9150509250929050565b5f8060408385031215611eee575f80fd5b611ef783611c2a565b9150611f0560208401611c2a565b90509250929050565b600181811c90821680611f2257607f821691505b602082108103611f4057634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526022908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b601f8211156107f8575f81815260208120601f850160051c81016020861015611ffb5750805b601f850160051c820191505b8181101561201a57828155600101612007565b505050505050565b815167ffffffffffffffff81111561203c5761203c611cbf565b6120508161204a8454611f0e565b84611fd5565b602080601f831160018114612083575f841561206c5750858301515b5f19600386901b1c1916600185901b17855561201a565b5f85815260208120601f198616915b828110156120b157888601518255948401946001909101908401612092565b50858210156120ce57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201612117576121176120f2565b5060010190565b5f835161212f818460208801611bb4565b835190830190612143818360208801611bb4565b01949350505050565b8181038181111561055e5761055e6120f2565b634e487b7160e01b5f52603160045260245ffd5b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061223c90830184611bd6565b9695505050505050565b5f60208284031215612256575f80fd5b8151610f4281611b8456fea2646970667358221220bb95276ffe3839bbef4ec43f7b926bd195608768885d2d9c925b8ed6b176119a64736f6c63430008140033", "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610213575f3560e01c8063572b6c051161011f578063a22cb465116100a9578063ce1b815f11610079578063ce1b815f146104b5578063d0def521146104c6578063da742228146104d9578063e985e9c5146104ec578063f17e48ec14610527575f80fd5b8063a22cb46514610474578063b88d4fde14610487578063bb4a6a5d1461049a578063c87b56dd146104a2575f80fd5b806370a08231116100ef57806370a08231146103f857806390c3f38f1461041957806395d89b411461042c5780639eda8aae14610434578063a0e67e2b1461045f575f80fd5b8063572b6c051461039d5780636352211e146103bf5780637065cb48146103d25780637075c269146103e5575f80fd5b80631df5c02c116101a0578063331e29f411610170578063331e29f4146103495780633c695e391461035c57806342842e0e1461036f57806342966c68146103825780635260f5e614610395575f80fd5b80631df5c02c146102f057806323b872dd1461030357806324c85a09146103165780632f54bf6e1461031e575f80fd5b8063081812fc116101e6578063081812fc14610264578063095ea7b31461028f5780630d8e6e2c146102a4578063173825d9146102d55780631a092541146102e8575f80fd5b806301ffc9a714610217578063055789b71461023f57806305cb3d7e1461025457806306fdde031461025c575b5f80fd5b61022a610225366004611b99565b61053a565b60405190151581526020015b60405180910390f35b610247610564565b6040516102369190611c01565b6102476105f0565b61024761069f565b610277610272366004611c13565b6106ad565b6040516001600160a01b039091168152602001610236565b6102a261029d366004611c45565b6106d2565b005b6040805180820190915260158152742232a1b7b6a1b7b73a3930b1ba103b10181718971960591b6020820152610247565b6102a26102e3366004611c6d565b6107fd565b6102476108c2565b6102a26102fe366004611c6d565b6108d1565b6102a2610311366004611c86565b610922565b61024761095a565b61022a61032c366004611c6d565b6001600160a01b03165f9081526007602052604090205460ff1690565b6102a2610357366004611d64565b610969565b6102a261036a366004611c6d565b6109aa565b6102a261037d366004611c86565b6109fe565b6102a2610390366004611c13565b610a18565b6102a2610a52565b61022a6103ab366004611c6d565b600a546001600160a01b0391821691161490565b6102776103cd366004611c13565b610af9565b6102a26103e0366004611c6d565b610b58565b6102a26103f3366004611d64565b610c0d565b61040b610406366004611c6d565b610c4a565b604051908152602001610236565b6102a2610427366004611d64565b610cce565b610247610d0b565b61022a610442366004611c6d565b6001600160a01b03165f908152600e602052604090205460ff1690565b610467610d1a565b6040516102369190611d96565b6102a2610482366004611de2565b610d79565b6102a2610495366004611e1b565b610d8b565b610247610dca565b6102476104b0366004611c13565b610dd7565b600a546001600160a01b0316610277565b61040b6104d4366004611e92565b610ee1565b6102a26104e7366004611c6d565b610f49565b61022a6104fa366004611edd565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6102a2610535366004611c45565b610f98565b5f6001600160e01b03198216632483248360e11b148061055e575061055e82610feb565b92915050565b600d805461057190611f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461059d90611f0e565b80156105e85780601f106105bf576101008083540402835291602001916105e8565b820191905f5260205f20905b8154815290600101906020018083116105cb57829003601f168201915b505050505081565b60605f6105fe61040661103a565b111561069257600d805461061190611f0e565b80601f016020809104026020016040519081016040528092919081815260200182805461063d90611f0e565b80156106885780601f1061065f57610100808354040283529160200191610688565b820191905f5260205f20905b81548152906001019060200180831161066b57829003601f168201915b5050505050905090565b600c805461061190611f0e565b60605f805461061190611f0e565b5f6106b782611048565b505f908152600460205260409020546001600160a01b031690565b5f6106dc82610af9565b9050806001600160a01b0316836001600160a01b03160361074e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b031661076061103a565b6001600160a01b0316148061077c575061077c816104fa61103a565b6107ee5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610745565b6107f883836110a6565b505050565b6008541580610812575061081261032c61103a565b61082e5760405162461bcd60e51b815260040161074590611f46565b6001600160a01b0381165f9081526007602052604090205460ff166108955760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e657200006044820152606401610745565b6001600160a01b0381165f908152600760205260409020805460ff191690556108bf600882611113565b50565b60606009805461061190611f0e565b60085415806108e657506108e661032c61103a565b6109025760405162461bcd60e51b815260040161074590611f46565b6001600160a01b03165f908152600e60205260409020805460ff19169055565b61093361092d61103a565b82611212565b61094f5760405162461bcd60e51b815260040161074590611f88565b6107f883838361128e565b6060600d805461061190611f0e565b600854158061097e575061097e61032c61103a565b61099a5760405162461bcd60e51b815260040161074590611f46565b600d6109a68282612022565b5050565b60085415806109bf57506109bf61032c61103a565b6109db5760405162461bcd60e51b815260040161074590611f46565b6001600160a01b03165f908152600e60205260409020805460ff19166001179055565b6107f883838360405180602001604052805f815250610d8b565b6008541580610a2d5750610a2d61032c61103a565b610a495760405162461bcd60e51b815260040161074590611f46565b6108bf816113f0565b6008541580610a675750610a6761032c61103a565b610a835760405162461bcd60e51b815260040161074590611f46565b5f5b600854811015610aeb575f60075f60088481548110610aa657610aa66120de565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610ae381612106565b915050610a85565b50610af760085f611b1e565b565b5f818152600260205260408120546001600160a01b03168061055e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610745565b6008541580610b6d5750610b6d61032c61103a565b610b895760405162461bcd60e51b815260040161074590611f46565b6001600160a01b0381165f9081526007602052604090205460ff166108bf576001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6008541580610c225750610c2261032c61103a565b610c3e5760405162461bcd60e51b815260040161074590611f46565b600c6109a68282612022565b5f6001600160a01b038216610cb35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610745565b506001600160a01b03165f9081526003602052604090205490565b6008541580610ce35750610ce361032c61103a565b610cff5760405162461bcd60e51b815260040161074590611f46565b60096109a68282612022565b60606001805461061190611f0e565b6060600880548060200260200160405190810160405280929190818152602001828054801561068857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d52575050505050905090565b6109a6610d8461103a565b838361142e565b610d9c610d9661103a565b83611212565b610db85760405162461bcd60e51b815260040161074590611f88565b610dc4848484846114fb565b50505050565b600c805461057190611f0e565b6060610de282611048565b5f8281526006602052604081208054610dfa90611f0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2690611f0e565b8015610e715780601f10610e4857610100808354040283529160200191610e71565b820191905f5260205f20905b815481529060010190602001808311610e5457829003601f168201915b505050505090505f610e8d60408051602081019091525f815290565b905080515f03610e9e575092915050565b815115610ed0578082604051602001610eb892919061211e565b60405160208183030381529060405292505050919050565b610ed98461152e565b949350505050565b6008545f901580610ef85750610ef861032c61103a565b610f145760405162461bcd60e51b815260040161074590611f46565b610f22600b80546001019055565b5f610f2c600b5490565b9050610f38848261159d565b610f428184611725565b9392505050565b6008541580610f5e5750610f5e61032c61103a565b610f7a5760405162461bcd60e51b815260040161074590611f46565b600a80546001600160a01b0319166001600160a01b03831617905550565b6008541580610fad5750610fad61032c61103a565b610fc95760405162461bcd60e51b815260040161074590611f46565b6109a6610fd582610af9565b838360405180602001604052805f8152506114fb565b5f6001600160e01b031982166380ac58cd60e01b148061101b57506001600160e01b03198216635b5e139f60e01b145b8061055e57506301ffc9a760e01b6001600160e01b031983161461055e565b5f6110436117ee565b905090565b5f818152600260205260409020546001600160a01b03166108bf5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610745565b5f81815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110da82610af9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5b82548110156107f857816001600160a01b031683828154811061113a5761113a6120de565b5f918252602090912001546001600160a01b03160361120057825483906111639060019061214c565b81548110611173576111736120de565b905f5260205f20015f9054906101000a90046001600160a01b03168382815481106111a0576111a06120de565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806111db576111db61215f565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b8061120a81612106565b915050611115565b5f8061121d83610af9565b9050806001600160a01b0316846001600160a01b0316148061126357506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b80610ed95750836001600160a01b031661127c846106ad565b6001600160a01b031614949350505050565b826001600160a01b03166112a182610af9565b6001600160a01b0316146112c75760405162461bcd60e51b815260040161074590612173565b6001600160a01b0382166113295760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610745565b826001600160a01b031661133c82610af9565b6001600160a01b0316146113625760405162461bcd60e51b815260040161074590612173565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113f981611821565b5f818152600660205260409020805461141190611f0e565b1590506108bf575f8181526006602052604081206108bf91611b39565b816001600160a01b0316836001600160a01b03160361148f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610745565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61150684848461128e565b611512848484846118b3565b610dc45760405162461bcd60e51b8152600401610745906121b8565b606061153982611048565b5f61154e60408051602081019091525f815290565b90505f81511161156c5760405180602001604052805f815250610f42565b80611576846119b7565b60405160200161158792919061211e565b6040516020818303038152906040529392505050565b6001600160a01b0382166115f35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610745565b5f818152600260205260409020546001600160a01b0316156116575760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610745565b5f818152600260205260409020546001600160a01b0316156116bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610745565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f828152600260205260409020546001600160a01b031661179f5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610745565b5f8281526006602052604090206117b68282612022565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b5f6014361080159061180a5750600a546001600160a01b031633145b1561181c575060131936013560601c90565b503390565b5f61182b82610af9565b905061183682610af9565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f6001600160a01b0384163b156119ac57836001600160a01b031663150b7a026118db61103a565b8786866040518563ffffffff1660e01b81526004016118fd949392919061220a565b6020604051808303815f875af1925050508015611937575060408051601f3d908101601f1916820190925261193491810190612246565b60015b611992573d808015611964576040519150601f19603f3d011682016040523d82523d5f602084013e611969565b606091505b5080515f0361198a5760405162461bcd60e51b8152600401610745906121b8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610ed9565b506001949350505050565b60605f6119c383611a47565b60010190505f8167ffffffffffffffff8111156119e2576119e2611cbf565b6040519080825280601f01601f191660200182016040528015611a0c576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a1657509392505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611a855772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611ab1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611acf57662386f26fc10000830492506010015b6305f5e1008310611ae7576305f5e100830492506008015b6127108310611afb57612710830492506004015b60648310611b0d576064830492506002015b600a831061055e5760010192915050565b5080545f8255905f5260205f20908101906108bf9190611b6c565b508054611b4590611f0e565b5f825580601f10611b54575050565b601f0160209004905f5260205f20908101906108bf91905b5b80821115611b80575f8155600101611b6d565b5090565b6001600160e01b0319811681146108bf575f80fd5b5f60208284031215611ba9575f80fd5b8135610f4281611b84565b5f5b83811015611bce578181015183820152602001611bb6565b50505f910152565b5f8151808452611bed816020860160208601611bb4565b601f01601f19169290920160200192915050565b602081525f610f426020830184611bd6565b5f60208284031215611c23575f80fd5b5035919050565b80356001600160a01b0381168114611c40575f80fd5b919050565b5f8060408385031215611c56575f80fd5b611c5f83611c2a565b946020939093013593505050565b5f60208284031215611c7d575f80fd5b610f4282611c2a565b5f805f60608486031215611c98575f80fd5b611ca184611c2a565b9250611caf60208501611c2a565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611ced57611ced611cbf565b604051601f8501601f19908116603f01168101908282118183101715611d1557611d15611cbf565b81604052809350858152868686011115611d2d575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611d55575f80fd5b610f4283833560208501611cd3565b5f60208284031215611d74575f80fd5b813567ffffffffffffffff811115611d8a575f80fd5b610ed984828501611d46565b602080825282518282018190525f9190848201906040850190845b81811015611dd65783516001600160a01b031683529284019291840191600101611db1565b50909695505050505050565b5f8060408385031215611df3575f80fd5b611dfc83611c2a565b9150602083013580151581