[ { "inputs": [], "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": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "string", "name": "tagId", "type": "string" } ], "name": "RequestSoul", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": true, "internalType": "string", "name": "tagId", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "SoulCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "string", "name": "tagId", "type": "string" } ], "name": "SoulRejected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": true, "internalType": "string", "name": "tagId", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "SoulTransferred", "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": "_tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tf", "type": "address" } ], "name": "addTrustedForwarder", "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": [], "name": "bound", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "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": [ { "internalType": "string", "name": "_uri", "type": "string" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bool", "name": "_bound", "type": "bool" }, { "internalType": "address", "name": "tfGelato", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "limits", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "string[]", "name": "productIds", "type": "string[]" }, { "internalType": "uint256[]", "name": "limit", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "counts", "type": "uint256[]" } ], "name": "patchCounts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tfGelato", "type": "address" } ], "name": "patchERC2771", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "tags", "type": "string[]" }, { "internalType": "address[]", "name": "holders", "type": "address[]" } ], "name": "patchTagHolders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "product", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "productCounts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "productEdition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "productId", "type": "string" }, { "internalType": "uint32", "name": "limit", "type": "uint32" } ], "name": "registerProductLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" }, { "internalType": "string", "name": "tagId", "type": "string" } ], "name": "rejectSoul", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tf", "type": "address" } ], "name": "removeTrustedForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" }, { "internalType": "string", "name": "tagId", "type": "string" } ], "name": "requestSoul", "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": "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": "bool", "name": "_bound", "type": "bool" } ], "name": "setBound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setCustomURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setURI", "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": "string", "name": "", "type": "string" } ], "name": "tagHolders", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "tagIdToToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tagIds", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "account", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "tagId", "type": "string" }, { "internalType": "string", "name": "productId", "type": "string" } ], "name": "transferSoul", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "trustedForwarders", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "unlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "unlocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60808060405234620000c6576000549060ff8260081c1662000074575060ff8082161062000038575b60405161367a9081620000cc8239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000028565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630186726b1461240d57806301ffc9a71461238557806302fe53051461229d57806306fdde0314612209578063081812fc146121eb578063095ea7b3146120795780631785f53c1461202557806318160ddd1461200757806323b872dd14611fe657806324d7806c14611fa75780632624153d14611f7f57806326cf93af14611f5757806326d0066814610d1f5780632f745c5914611f305780633751d89c14611eed5780633adf80b414611dd257806342842e0e14611d9d57806342966c6814611a7f5780634f6ccce7146119ee57806354776bb9146119ae578063572b6c05146119ae5780635cd28c9f146119735780636198e339146119345780636352211e146119045780636ee90ed91461189d578063704802751461184357806370a0823114611818578063715018a6146117bb578063780bd3f11461178e5780638462151c146116ad5780638b1cf21c1461167b5780638da5cb5b14611652578063926ab37d14610fe857806395d89b4114610f2c578063a16d396414610e42578063a22cb46514610d68578063a4b4d57d14610d1f578063a73c980514610751578063ae16eae51461070a578063b4ce37d214610648578063b88d4fde146105bc578063be4df7d614610598578063c5ea284c146104d5578063c87b56dd146104b6578063cc27031014610469578063e985e9c514610433578063ee801fba14610406578063f059f0e8146103c1578063f2fde38b146103325763ff0730b31461024257600080fd5b3461032d57610250366124c1565b916040518383823760208185810161013381520301902054806102a5575b506102a07f27d5a4e95432e54f49341c152c4a3e7f5fff53324f10912cb7c1a061e7fc3b889360405193849384613231565b0390a1005b60005261013060205260ff60406000205416156102c2573861026e565b60405162461bcd60e51b815260206004820152603d60248201527f50726f64756374536f756c5477696e3a20546f6b656e206d757374206265207560448201527f6e6c6f636b656420746f2062652061626c6520746f20726571756573740000006064820152608490fd5b600080fd5b3461032d57602036600319011261032d5761034b612468565b61035361275d565b6001600160a01b0381161561036d5761036b906127c0565b005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b3461032d57602036600319011261032d576004356000526101326020526104026103ee6040600020612687565b604051918291602083526020830190612527565b0390f35b3461032d57602036600319011261032d5760043560005261013a6020526020604060002054604051908152f35b3461032d57604036600319011261032d57602061045f610451612468565b61045961247e565b90613539565b6040519015158152f35b3461032d57602036600319011261032d5760043580151580910361032d573360005260016020526104a160ff60406000205416613067565b6101349060ff80198354169116179055600080f35b3461032d57602036600319011261032d576104026103ee600435613267565b3461032d57604036600319011261032d576001600160401b0360043581811161032d5761050690369060040161272d565b9160243590811161032d5761051f90369060040161272d565b61052a92919261275d565b60005b84811061053657005b6105418183866131e0565b356001600160a01b038116919082900361032d576105939160206105668389886131f0565b91908260405193849283378101610135815203019020906001600160601b0360a01b8254161790556131d1565b61052d565b3461032d57600036600319011261032d57602060ff61013454166040519015158152f35b3461032d57608036600319011261032d576105d5612468565b6105dd61247e565b90606435906044356001600160401b03831161032d573660238401121561032d5761036b936106196106439436906024816004013591016125d8565b9261063361062e8461062961359a565b612a06565b61292d565b61063e838383612abb565b612f0f565b6129e2565b3461032d57600036600319011261032d57604051600061012f805461066c8161264d565b808552916001918083169081156106e05750600114610696575b610402856103ee8187038261259c565b600090815292506000805160206136058339815191525b8284106106c85750505081016020016103ee82610402610686565b805460208587018101919091529093019281016106ad565b869550610402969350602092506103ee94915060ff191682840152151560051b8201019293610686565b3461032d57602061071a3661260f565b8161072e6040519283815193849201612504565b61013590820190815281900382019020546040516001600160a01b039091168152f35b3461032d5760a036600319011261032d576004356001600160401b03811161032d57610781903690600401612494565b6024356001600160401b03811161032d576107a0903690600401612494565b90926044356001600160401b03811161032d576107c1903690600401612494565b60649491943593841515850361032d57608435956001600160a01b038716870361032d5760005460ff8160081c16159889809a610d12575b8015610cfb575b15610c9f5760ff19821660011760005561082e93610826928b610c8d575b5036916125d8565b9236916125d8565b9061084960ff60005460081c1661084481613171565b613171565b8051906001600160401b038211610a8957819061086760665461264d565b601f8111610c19575b50602090601f8311600114610ba157600092610b96575b50508160011b916000199060031b1c1916176066555b8051906001600160401b038211610a895781906108bb60675461264d565b601f8111610b22575b50602090601f8311600114610aaa57600092610a9f575b50508160011b916000199060031b1c1916176067555b61090f60ff60005460081c1661090681613171565b61084481613171565b3360005260016020526040600020600160ff1982541617905561093d60ff60005460081c1661084481613171565b61094d61094861359a565b6127c0565b6001600160401b038111610a89578061012f926109738261096e865461264d565b6130bd565b600090601f8311600114610a1a57600092610a0f575b50508160011b916000199060031b1c19161790555b6101349060ff80198354169115151617905560018060a01b03166000526101376020526040600020600160ff198254161790556109d757005b61ff0019600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b013590508680610989565b600080516020613605833981519152925090601f19841660005b818110610a715750908460019594939210610a57575b505050811b01905561099e565b0135600019600384901b60f8161c19169055868080610a4a565b91936020600181928787013581550195019201610a34565b634e487b7160e01b600052604160045260246000fd5b0151905087806108db565b925060676000526000805160206135e5833981519152906000935b601f1984168510610b07576001945083601f19811610610aee575b505050811b016067556108f1565b015160001960f88460031b161c19169055878080610ae0565b81810151835560209485019460019093019290910190610ac5565b9091506067600052601f830160051c6000805160206135e58339815191520160208410610b81575b908392915b601f820160051c6000805160206135e5833981519152018110610b7257506108c4565b60008155849350600101610b4f565b506000805160206135e5833981519152610b4a565b015190508880610887565b925060666000526000805160206135c5833981519152906000935b601f1984168510610bfe576001945083601f19811610610be5575b505050811b0160665561089d565b015160001960f88460031b161c19169055888080610bd7565b81810151835560209485019460019093019290910190610bbc565b9091506066600052601f830160051c6000805160206135c58339815191520160208410610c78575b908392915b601f820160051c6000805160206135c5833981519152018110610c695750610870565b60008155849350600101610c46565b506000805160206135c5833981519152610c41565b61ffff1916610101176000558b61081e565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156108005750600160ff831614610800565b50600160ff8316106107f9565b3461032d57602036600319011261032d5761036b610d3b612468565b610d4361275d565b6001600160a01b0316600090815261013760205260409020805460ff19166001179055565b3461032d57604036600319011261032d57610d81612468565b60243580151580910361032d57610d9661359a565b6001600160a01b03928316921690818314610dfd5760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319183600052606b82526040600020856000528252604060002060ff1981541660ff8316179055604051908152a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b3461032d57606036600319011261032d576001600160401b0360043581811161032d57610e7390369060040161272d565b9060243583811161032d57610e8c90369060040161272d565b9360443590811161032d57610ea590369060040161272d565b610eb092919261275d565b60005b858110610ebc57005b80610ecb610f279289866131e0565b35610ed78289896131f0565b91908260405193849283378101610136815260209384910301902055610efe8285886131e0565b3590610f0b838a8a6131f0565b91908260405193849283378101610138815203019020556131d1565b610eb3565b3461032d57600036600319011261032d576040516000606754610f4e8161264d565b80845290600190818116908115610fc15750600114610f78575b610402846103ee8186038261259c565b6067600090815292506000805160206135e58339815191525b828410610fa95750505081016020016103ee82610f68565b80546020858701810191909152909301928101610f91565b60ff191660208087019190915292151560051b850190920192506103ee9150839050610f68565b3461032d57606036600319011261032d57611001612468565b6024356001600160401b03811161032d57611020903690600401612494565b6044356001600160401b03811161032d5761103f903690600401612494565b92909233600052600160205261105c60ff60406000205416613067565b60405183838237602081858101610133815203019020549360405184848237610135858201908152819003602001902080546001600160a01b0319166001600160a01b038816179055841561110d5750507f304b5c044f2f778655fc6164409ba2ae7be81493dee0a1080634b8babf48a419916020916110e585876110e0826128cc565b612abb565b8160405192839283376000908201908152039020604051938452936001600160a01b031692a3005b909350604051848282376020818681016101368152030190205493604051818382376020818381016101388152030190205494806115e2575b5061012e9461115586546131d1565b80965560405161116481612581565b600081526001600160a01b0388161561159e5760008781526068602052604090205461119c906001600160a01b031615155b156134ed565b60ff6101345416611532575b86600052610130602052604060002060ff198154169055609a54609b60205280604060002055600160401b811015610a89576112b99161120e896111f58460016106439601609a55613030565b90919082549060031b91821b91600019901b1916179055565b6112178a612809565b6001600160a01b038b8116600090815260986020908152604080832085845282528083208e90558d8352609982528083209490945560689052919091205461126191161515611196565b6001600160a01b038a166000818152606960209081526040808320805460010190558c83526068909152812080546001600160a01b031916831790558a91906000805160206136258339815191528180a4888a612de8565b8560005261013260205260406000206001600160401b038611610a89576112ea866112e4835461264d565b8361311d565b856000601f82116001146114cd576000916114c2575b508660011b906000198860031b1c19161790555b8560405186868237602081888101610133815203019020556040518284823760208184810161013881520301902061134c81546131d1565b9055600181018091116114ac578560005261013a6020526040600020556101396020526040600020916001600160401b038211610a895761139782611391855461264d565b8561311d565b600090601f831160011461141e5791807f0d17ba1f55752cf194d32b7d835f68df91e80a8927561b46966877a9085d44cc96949260209694600092611413575b50508160011b916000199060031b1c19161790558160405192839283376000908201908152039020604051938452936001600160a01b031692a3005b0135905089806113d7565b601f198316918460005260206000209260005b8181106114945750926001928592602098967f0d17ba1f55752cf194d32b7d835f68df91e80a8927561b46966877a9085d44cc9a98961061147a575b505050811b0190556110e5565b0135600019600384901b60f8161c1916905589808061146d565b91936020600181928787013581550195019201611431565b634e487b7160e01b600052601160045260246000fd5b905085013589611300565b60008381526020812092505b601f198916811061151a575087601f19811610611500575b5050600186811b019055611314565b860135600019600389901b60f8161c1916905588806114f1565b9091602060018192858b0135815501930191016114d9565b33600052600160205260ff604060002054166111a8575b60405162461bcd60e51b815260206004820152602760248201527f50726f64756374536f756c5477696e3a2043616c6c6572206973206e6f742061604482015266371030b236b4b760c91b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b600186018087116114ac5710156115f95786611146565b60405162461bcd60e51b815260206004820152602b60248201527f50726f64756374536f756c5477696e3a2050726f64756374206d696e74206c6960448201526a1b5a5d081c995858da195960aa1b6064820152608490fd5b3461032d57600036600319011261032d5760fc546040516001600160a01b039091168152602090f35b3461032d57602036600319011261032d57600435600052610130602052602060ff604060002054166040519015158152f35b3461032d5760208060031936011261032d576116c7612468565b6116d081612809565b6116d981613583565b906116e7604051928361259c565b8082526116f381613583565b8285019390601f190136853760005b82811061174d5750505090604051928392818401908285525180915260408401929160005b82811061173657505050500390f35b835185528695509381019392810192600101611727565b6117578183612fa2565b9084518110156117785761177391878260051b870101526131d1565b611702565b634e487b7160e01b600052603260045260246000fd5b3461032d57602036600319011261032d576004356000526101396020526104026103ee6040600020612687565b3461032d57600036600319011261032d576117d461275d565b60fc80546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461032d57602036600319011261032d57602061183b611836612468565b612809565b604051908152f35b3461032d57602036600319011261032d5761185c612468565b33600052600160205261187660ff60406000205416613067565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055005b3461032d57604036600319011261032d576004356001600160401b03811161032d576118cd903690600401612494565b6024359163ffffffff831680930361032d576020906118ea61275d565b826040519384928337810161013681520301902055600080f35b3461032d57602036600319011261032d5760206119226004356128cc565b6040516001600160a01b039091168152f35b3461032d57602036600319011261032d5760043561195761062e8261062961359a565b600090815261013060205260409020805460ff19166001179055005b3461032d57602061199a816119873661260f565b8160405193828580945193849201612504565b810161013381520301902054604051908152f35b3461032d57602036600319011261032d576001600160a01b036119cf612468565b16600052610137602052602060ff604060002054166040519015158152f35b3461032d57602036600319011261032d57600435609a54811015611a2557611a17602091613030565b90546040519160031b1c8152f35b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b3461032d5760208060031936011261032d5760043590611aa461062e8361062961359a565b611aad826128cc565b60ff6101345416611ca2575b6000838152610130835260409020805460ff191690556001600160a01b03908082169081611c06575050609a5483600052609b835280604060002055600160401b811015610a8957836111f5826001611b159401609a55613030565b609a5460001991908281019081116114ac5784600052609b8452611b3e60406000205491613030565b90549060031b1c611b52816111f584613030565b600052609b84526040600020558360005260006040812055609a548015611bf0576000938360689201611b8481613030565b8682549160031b1b19169055609a55611b9c866128cc565b92868652606a825260408620936001600160601b0360a01b948581541690551693848652606982526040862090815401905585855252604083209081541690556000805160206136258339815191528280a4005b634e487b7160e01b600052603160045260246000fd5b611c0f90612809565b6000198101919082116114ac578460005260998452604060002054828103611c5c575b50846000526000604081205560005260988352604060002090600052825260006040812055611b15565b8160005260988552604060002083600052855260406000205482600052609886526040600020826000528652806040600020556000526099855260406000205585611c32565b336000526001825260ff6040600020541615611d48576001600160a01b03811615611ab95782600052610130825260ff60406000205416611ab95760405162461bcd60e51b815260048101839052603b60248201527f50726f64756374536f756c5477696e3a20546f6b656e206d757374206265207560448201527f6e6c6f636b656420746f2062652061626c6520746f2073656e642e00000000006064820152608490fd5b60405162461bcd60e51b815260048101839052602760248201527f50726f64756374536f756c5477696e3a2043616c6c6572206973206e6f742061604482015266371030b236b4b760c91b6064820152608490fd5b3461032d5761036b610643611db13661254c565b9060405192611dbf84612581565b6000845261063361062e8461062961359a565b3461032d57604036600319011261032d576001600160401b0360243581811161032d57611e03903690600401612494565b33600052600191602090838252611e2160ff60406000205416613067565b60043560005261013182526040600020948311610a8957611e4c83611e46875461264d565b8761311d565b600091601f8411600114611e8a5750928293918392600094611e7f575b50501b916000199060031b1c1916179055600080f35b013592508580611e69565b9183601f1981168760005284600020946000905b88838310611ed35750505010611eb9575b505050811b019055005b0135600019600384901b60f8161c19169055838080611eaf565b868601358855909601959384019387935090810190611e9e565b3461032d57602036600319011261032d57611f06612468565b611f0e61275d565b6001600160a01b0316600090815261013760205260409020805460ff19169055005b3461032d57604036600319011261032d57602061183b611f4e612468565b60243590612fa2565b3461032d576020611f6b816119873661260f565b810161013881520301902054604051908152f35b3461032d576020611f93816119873661260f565b810161013681520301902054604051908152f35b3461032d57602036600319011261032d576001600160a01b03611fc8612468565b166000526001602052602060ff604060002054166040519015158152f35b3461032d5761036b611ff73661254c565b916110e061062e8461062961359a565b3461032d57600036600319011261032d576020609a54604051908152f35b3461032d57602036600319011261032d5761203e612468565b33600052600160205261205860ff60406000205416613067565b6001600160a01b03166000908152600160205260409020805460ff19169055005b3461032d57604036600319011261032d57612092612468565b6024359061209f826128cc565b6001600160a01b03918216919080821683811461219c57826120bf61359a565b1614908115612189575b501561211e576000838152606a6020526040902080546001600160a01b031916831790556120f6836128cc565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b612196915061045961359a565b846120c9565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b3461032d57602036600319011261032d5760206119226004356128ef565b3461032d57600036600319011261032d57604051600060665461222b8161264d565b80845290600190818116908115610fc1575060011461225457610402846103ee8186038261259c565b6066600090815292506000805160206135c58339815191525b8284106122855750505081016020016103ee82610f68565b8054602085870181019190915290930192810161226d565b3461032d5760208060031936011261032d576001600160401b0360043581811161032d576122cf903690600401612494565b9092336000526001928382526122ec60ff60406000205416613067565b8211610a895761012f936123048361096e875461264d565b600091601f84116001146123365750928293918392600094611e7f5750501b916000199060031b1c1916179055600080f35b9183601f198116600080516020613605833981519152946000905b8883831061236b5750505010611eb957505050811b019055005b868601358855909601959384019387935090810190612351565b3461032d57602036600319011261032d5760043563ffffffff60e01b811680910361032d5760209063780e9d6360e01b81149081156123ca575b506040519015158152f35b6380ac58cd60e01b8114915081156123fc575b81156123eb575b50826123bf565b6301ffc9a760e01b149050826123e4565b635b5e139f60e01b811491506123dd565b3461032d577fe1b6b010774aeb58d0df8cf65dd17508493d3956828a5cb080b54d2d165be5196102a061243f366124c1565b92909233600052600160205261245c60ff60406000205416613067565b60405193849384613231565b600435906001600160a01b038216820361032d57565b602435906001600160a01b038216820361032d57565b9181601f8401121561032d578235916001600160401b03831161032d576020838186019501011161032d57565b90604060031983011261032d576004356001600160a01b038116810361032d5791602435906001600160401b03821161032d5761250091600401612494565b9091565b60005b8381106125175750506000910152565b8181015183820152602001612507565b9060209161254081518092818552858086019101612504565b601f01601f1916010190565b606090600319011261032d576001600160a01b0390600435828116810361032d5791602435908116810361032d579060443590565b602081019081106001600160401b03821117610a8957604052565b90601f801991011681019081106001600160401b03821117610a8957604052565b6001600160401b038111610a8957601f01601f191660200190565b9291926125e4826125bd565b916125f2604051938461259c565b82948184528183011161032d578281602093846000960137010152565b602060031982011261032d57600435906001600160401b03821161032d578060238301121561032d5781602461264a936004013591016125d8565b90565b90600182811c9216801561267d575b602083101461266757565b634e487b7160e01b600052602260045260246000fd5b91607f169161265c565b906040519182600082549261269b8461264d565b90818452600194858116908160001461270a57506001146126c7575b50506126c59250038361259c565b565b9093915060005260209081600020936000915b8183106126f25750506126c5935082010138806126b7565b855488840185015294850194879450918301916126da565b9150506126c594506020925060ff191682840152151560051b82010138806126b7565b9181601f8401121561032d578235916001600160401b03831161032d576020808501948460051b01011161032d57565b60fc546001600160a01b039081169061277461359a565b160361277c57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b60fc80546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b6001600160a01b0316801561282957600052606960205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561288757565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152606860205260409020546001600160a01b031661264a811515612880565b600081815260686020526040902054612912906001600160a01b03161515612880565b6000908152606a60205260409020546001600160a01b031690565b1561293457565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b156129e957565b60405162461bcd60e51b815280612a026004820161298f565b0390fd5b612a0f826128cc565b9160018060a01b0390818316928285168414948515612a4e575b50508315612a38575b50505090565b612a44919293506128ef565b1614388080612a32565b612a59929550613539565b923880612a29565b15612a6857565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b90612ae190612ac9846128cc565b6001600160a01b038481169390929183168414612a61565b818116938415612d975760ff6101345416612cf8575b6000928684526020926101308452858760409485882060ff1981541690558215600014612c1357505050609a54888652609b85528084872055600160401b811015612bff5786889360008051602061362583398151915297969593612b698c6111f5866001612b829801609a55613030565b828603612bd1575b50612b7b8b6128cc565b1614612a61565b878452606a83526068818520936001600160601b0360a01b94858154169055878652606981528286206000198154019055838652828620600181540190558986525283209182541617905580a4565b612bda90612809565b8588526098875284882081895287528b858920558b8852609987528488205538612b71565b634e487b7160e01b86526041600452602486fd5b81839897969492959303612c3d575b5095612b829160008051602061362583398151915297612b69565b909294959650612c4e919350612809565b6000198101908111612ce45786889387969593612b82938c6000805160206136258339815191529a526099885285892054818103612cad575b508c89528886812055838952609888528589209089528752878581205591975091612c22565b848a5260988952868a20828b528952868a2054858b5260988a52878b20828c528a5280888c20558a5260998952868a205538612c87565b634e487b7160e01b86526011600452602486fd5b33600052600160205260ff6040600020541615611549578315612af7578560005261013060205260ff60406000205416612af75760405162461bcd60e51b815260206004820152603b60248201527f50726f64756374536f756c5477696e3a20546f6b656e206d757374206265207560448201527f6e6c6f636b656420746f2062652061626c6520746f2073656e642e00000000006064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9290833b15612f0657612e4693612dfd61359a565b93604051809281630a85bd0160e11b9586825260018060a01b03809916600483015260009889918260248501526044840152608060648401528260209b8c976084830190612527565b0393165af1849181612ec2575b50612eb1575050503d600014612ea9573d612e6d816125bd565b90612e7b604051928361259c565b81528091833d92013e5b80519182612ea65760405162461bcd60e51b815280612a026004820161298f565b01fd5b506060612e85565b6001600160e01b0319161492509050565b9091508581813d8311612eff575b612eda818361259c565b81010312612efb57516001600160e01b031981168103612efb579038612e53565b8480fd5b503d612ed0565b50915050600190565b92939190803b15612f9857612f6d94612f2661359a565b92604051928391630a85bd0160e11b9586845260018060a01b039889809216600486015216602484015260448301526080606483015281806020998a956084830190612527565b03916000988991165af1849181612ec25750612eb1575050503d600014612ea9573d612e6d816125bd565b5050915050600190565b612fab81612809565b821015612fd75760018060a01b0316600052609860205260406000209060005260205260406000205490565b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b609a5481101561177857609a6000527f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be40190600090565b1561306e57565b60405162461bcd60e51b815260206004820152602160248201527f48617341646d696e733a2043616c6c6572206973206e6f7420616e2061646d696044820152603760f91b6064820152608490fd5b601f81116130c9575050565b60009061012f8252600080516020613605833981519152906020601f850160051c83019410613113575b601f0160051c01915b82811061310857505050565b8181556001016130fc565b90925082906130f3565b90601f811161312b57505050565b600091825260208220906020601f850160051c83019410613167575b601f0160051c01915b82811061315c57505050565b818155600101613150565b9092508290613147565b1561317857565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b60001981146114ac5760010190565b91908110156117785760051b0190565b91908110156117785760051b81013590601e198136030182121561032d5701908135916001600160401b03831161032d57602001823603811361032d579190565b9192606093819260018060a01b0316845260406020850152816040850152848401376000828201840152601f01601f1916010190565b60008181526068602052604090205461328a906001600160a01b03161515612880565b600090808252610131916020928084526132a7604083205461264d565b6134dd57509081817a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081818110156134cf575b5050846d04ee2d6d415b85acef8100000000808510156134c1575b5050662386f26fc10000808410156134b2575b506305f5e100808410156134a3575b5061271080841015613494575b506064831015613484575b600a8093101561347a575b6001928385019184602161336161334b866125bd565b95613359604051978861259c565b8087526125bd565b858a019890601f1901368a37850101905b61344b575b5050506040519485938361012f918254926133918461264d565b9382811690811561342757506001146133db575b505050505090806133c061264a956005959451938491612504565b0164173539b7b760d91b815203601a1981018452018261259c565b9091809394959650526000805160206136058339815191525b8383106134115750505083010190806133c0600561264a386133a5565b80548984018601528896509184019181016133f4565b60ff1916868a015250505050801515028401019150806133c0600561264a386133a5565b600019019082906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049085826133725750613377565b9260010192613335565b929160646002910492019261332a565b6004919493049201923861331f565b60089194930492019238613312565b60109194930492019238613303565b9401939092049184386132f0565b6040955004925038806132d5565b61264a9360409383525220612687565b156134f457565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b6001600160a01b0391821660008181526001602052604081205490919060ff1661357a5760ff93604093168252606b60205282822090825260205220541690565b50505050600190565b6001600160401b038111610a895760051b60200190565b3360005261013760205260ff604060002054166000146135c05736601319013560601c90565b339056fe46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943549787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae232da9e50dad2971456a78fb5cd6ff6b75019984d6e918139ce990999420f979ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122056a0eba566aefd1be6f3625b51237d4edf333ad708ce246cb4d168fbf404d74364736f6c63430008140033