[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FreeAlex__AlreadyMinted", "type": "error" }, { "inputs": [], "name": "FreeAlex__AlreadyOwned", "type": "error" }, { "inputs": [], "name": "FreeAlex__NotAdmin", "type": "error" }, { "inputs": [], "name": "FreeAlex__NotAdminOrDelegatedAdmin", "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": "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DELEGATED_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burnNFTToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "checkNotMintAndOwnNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "getFirstTokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "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": [], "name": "isPublic", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "safeMint", "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": "_isPublic", "type": "bool" } ], "name": "setPublic", "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": "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": [], "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080604052600e805460ff1916905534801561001a57600080fd5b506040518060400160405280600881526020016708ce4caca82d8caf60c31b81525060405180604001604052806002815260200161464160f01b815250816000908161006691906101e0565b50600161007382826101e0565b5050600b805460ff191690555061008b600033610091565b5061029e565b6000828152600c602090815260408083206001600160a01b038516845290915281205460ff16610137576000838152600c602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100ef3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161013b565b5060005b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016b57607f821691505b60208210810361018b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101db57806000526020600020601f840160051c810160208510156101b85750805b601f840160051c820191505b818110156101d857600081556001016101c4565b50505b505050565b81516001600160401b038111156101f9576101f9610141565b61020d816102078454610157565b84610191565b6020601f82116001811461024157600083156102295750848201515b600019600385901b1c1916600184901b1784556101d8565b600084815260208120601f198516915b828110156102715787850151825560209485019460019092019101610251565b508482101561028f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b611f03806102ad6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80635c975abb1161011a578063a22cb465116100ad578063d204c45e1161007c578063d204c45e14610420578063d547741f14610433578063d5ef660c14610446578063dc9a15351461046d578063e985e9c51461047a57600080fd5b8063a22cb465146103d4578063b1978758146103e7578063b88d4fde146103fa578063c87b56dd1461040d57600080fd5b80638456cb59116100e95780638456cb59146103a957806391d14854146103b157806395d89b41146103c4578063a217fddf146103cc57600080fd5b80635c975abb146103655780635cbcec4e146103705780636352211e1461038357806370a082311461039657600080fd5b80632f2ff15d11610192578063416c66a211610161578063416c66a21461031957806342842e0e1461032c57806342966c681461033f5780634f6ccce71461035257600080fd5b80632f2ff15d146102d85780632f745c59146102eb57806336568abe146102fe5780633f4ba83a1461031157600080fd5b8063095ea7b3116101ce578063095ea7b31461027b57806318160ddd1461029057806323b872dd146102a2578063248a9ca3146102b557600080fd5b806301ffc9a714610200578063057a26df1461022857806306fdde031461023b578063081812fc14610250575b600080fd5b61021361020e366004611946565b61048d565b60405190151581526020015b60405180910390f35b61021361023636600461197f565b61049e565b6102436104e1565b60405161021f91906119ea565b61026361025e3660046119fd565b610573565b6040516001600160a01b03909116815260200161021f565b61028e610289366004611a16565b61059c565b005b6008545b60405190815260200161021f565b61028e6102b0366004611a40565b6105ab565b6102946102c33660046119fd565b6000908152600c602052604090206001015490565b61028e6102e6366004611a7d565b61063b565b6102946102f9366004611a16565b610660565b61028e61030c366004611a7d565b6106c5565b61028e6106fd565b61028e6103273660046119fd565b61072f565b61028e61033a366004611a40565b610798565b61028e61034d3660046119fd565b6107b3565b6102946103603660046119fd565b6107bf565b600b5460ff16610213565b61028e61037e366004611ab9565b610818565b6102636103913660046119fd565b610853565b6102946103a436600461197f565b61085e565b61028e6108a6565b6102136103bf366004611a7d565b6108d6565b610243610901565b610294600081565b61028e6103e2366004611ad4565b610910565b6102436103f536600461197f565b61091b565b61028e610408366004611b8e565b610968565b61024361041b3660046119fd565b61097f565b61028e61042e366004611c0a565b61098a565b61028e610441366004611a7d565b610aa7565b6102947fb3e19034a9c0ee09851fce0f5a14e315b54252002736fa83d157ce4a91dfd40781565b600e546102139060ff1681565b610213610488366004611c6c565b610acc565b600061049882610afa565b92915050565b6001600160a01b0381166000908152600f602052604081205460ff16806104cc57506104c98261085e565b15155b156104d957506000919050565b506001919050565b6060600080546104f090611c96565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611c96565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b600061057e82610b1f565b506000828152600460205260409020546001600160a01b0316610498565b6105a7828233610b58565b5050565b6001600160a01b0382166105da57604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006105e7838333610b65565b9050836001600160a01b0316816001600160a01b031614610635576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105d1565b50505050565b6000828152600c602052604090206001015461065681610b72565b6106358383610b7c565b600061066b8361085e565b821061069c5760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016105d1565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6001600160a01b03811633146106ee5760405163334bd91960e11b815260040160405180910390fd5b6106f88282610c10565b505050565b6107086000336108d6565b61072557604051631db83f2b60e31b815260040160405180910390fd5b61072d610c7d565b565b61073a6000336108d6565b15801561076e575061076c7fb3e19034a9c0ee09851fce0f5a14e315b54252002736fa83d157ce4a91dfd407336108d6565b155b1561078c576040516367bb85ad60e11b815260040160405180910390fd5b61079581610ccf565b50565b6106f883838360405180602001604052806000815250610968565b6105a760008233610b65565b60006107ca60085490565b82106107f35760405163295f44f760e21b815260006004820152602481018390526044016105d1565b6008828154811061080657610806611cd0565b90600052602060002001549050919050565b6108236000336108d6565b61084057604051631db83f2b60e31b815260040160405180910390fd5b600e805460ff1916911515919091179055565b600061049882610b1f565b60006001600160a01b03821661088a576040516322718ad960e21b8152600060048201526024016105d1565b506001600160a01b031660009081526003602052604090205490565b6108b16000336108d6565b6108ce57604051631db83f2b60e31b815260040160405180910390fd5b61072d610d0a565b6000918252600c602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600180546104f090611c96565b6105a7338383610d47565b606060006109288361085e565b905080600003610948575050604080516020810190915260008152919050565b6000610955846000610660565b90506109608161097f565b949350505050565b6109738484846105ab565b61063584848484610de6565b606061049882610f0f565b600e5460ff166109f15761099f6000336108d6565b1580156109d357506109d17fb3e19034a9c0ee09851fce0f5a14e315b54252002736fa83d157ce4a91dfd407336108d6565b155b156109f1576040516367bb85ad60e11b815260040160405180910390fd5b6001600160a01b0382166000908152600f6020526040902054829060ff1615610a2d576040516318b500f560e01b815260040160405180910390fd5b610a368161085e565b15610a54576040516346045b2d60e01b815260040160405180910390fd5b6000600d60008154610a6590611cfc565b91829055509050610a768482611018565b610a808184611032565b5050506001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6000828152600c6020526040902060010154610ac281610b72565b6106358383610c10565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b03198216637965db0b60e01b1480610498575061049882611082565b6000818152600260205260408120546001600160a01b03168061049857604051637e27328960e01b8152600481018490526024016105d1565b6106f883838360016110a7565b60006109608484846111ad565b61079581336111c2565b6000610b8883836108d6565b610c08576000838152600c602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610bc03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610498565b506000610498565b6000610c1c83836108d6565b15610c08576000838152600c602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610498565b610c856111fb565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000610cde6000836000610b65565b90506001600160a01b0381166105a757604051637e27328960e01b8152600481018390526024016105d1565b610d1261121e565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610cb23390565b6001600160a01b038216610d7957604051630b61174360e31b81526001600160a01b03831660048201526024016105d1565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561063557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610e28903390889087908790600401611d15565b6020604051808303816000875af1925050508015610e63575060408051601f3d908101601f19168201909252610e6091810190611d52565b60015b610ecc573d808015610e91576040519150601f19603f3d011682016040523d82523d6000602084013e610e96565b606091505b508051600003610ec457604051633250574960e11b81526001600160a01b03851660048201526024016105d1565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610f0857604051633250574960e11b81526001600160a01b03851660048201526024016105d1565b5050505050565b6060610f1a82610b1f565b506000828152600a602052604081208054610f3490611c96565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6090611c96565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505090506000610fcb60408051602081019091526000815290565b90508051600003610fdd575092915050565b81511561100f578082604051602001610ff7929190611d6f565b60405160208183030381529060405292505050919050565b61096084611242565b6105a78282604051806020016040528060008152506112b7565b6000828152600a6020526040902061104a8282611de5565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160e01b03198216632483248360e11b14806104985750610498826112ce565b80806110bb57506001600160a01b03821615155b1561117d5760006110cb84610b1f565b90506001600160a01b038316158015906110f75750826001600160a01b0316816001600160a01b031614155b801561110a57506111088184610acc565b155b156111335760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105d1565b811561117b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006111b761121e565b6109608484846112f3565b6111cc82826108d6565b6105a75760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016105d1565b600b5460ff1661072d57604051638dfc202b60e01b815260040160405180910390fd5b600b5460ff161561072d5760405163d93c066560e01b815260040160405180910390fd5b606061124d82610b1f565b50600061126560408051602081019091526000815290565b9050600081511161128557604051806020016040528060008152506112b0565b8061128f846113c0565b6040516020016112a0929190611d6f565b6040516020818303038152906040525b9392505050565b6112c18383611453565b6106f86000848484610de6565b60006001600160e01b0319821663780e9d6360e01b14806104985750610498826114b8565b600080611301858585611508565b90506001600160a01b03811661135e5761135984600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611381565b846001600160a01b0316816001600160a01b031614611381576113818185611601565b6001600160a01b03851661139d5761139884611692565b610960565b846001600160a01b0316816001600160a01b031614610960576109608585611741565b606060006113cd83611791565b600101905060008167ffffffffffffffff8111156113ed576113ed611afe565b6040519080825280601f01601f191660200182016040528015611417576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461142157509392505050565b6001600160a01b03821661147d57604051633250574960e11b8152600060048201526024016105d1565b600061148b83836000610b65565b90506001600160a01b038116156106f8576040516339e3563760e11b8152600060048201526024016105d1565b60006001600160e01b031982166380ac58cd60e01b14806114e957506001600160e01b03198216635b5e139f60e01b145b8061049857506301ffc9a760e01b6001600160e01b0319831614610498565b6000828152600260205260408120546001600160a01b039081169083161561153557611535818486611869565b6001600160a01b03811615611573576115526000856000806110a7565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156115a2576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061160c8361085e565b60008381526007602052604090205490915080821461165f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906116a490600190611ea4565b600083815260096020526040812054600880549394509092849081106116cc576116cc611cd0565b9060005260206000200154905080600883815481106116ed576116ed611cd0565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061172557611725611eb7565b6001900381819060005260206000200160009055905550505050565b6000600161174e8461085e565b6117589190611ea4565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106117d05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106117fc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061181a57662386f26fc10000830492506010015b6305f5e1008310611832576305f5e100830492506008015b612710831061184657612710830492506004015b60648310611858576064830492506002015b600a83106104985760010192915050565b6118748383836118cd565b6106f8576001600160a01b0383166118a257604051637e27328960e01b8152600481018290526024016105d1565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105d1565b60006001600160a01b038316158015906109605750826001600160a01b0316846001600160a01b0316148061190757506119078484610acc565b806109605750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461079557600080fd5b60006020828403121561195857600080fd5b81356112b081611930565b80356001600160a01b038116811461197a57600080fd5b919050565b60006020828403121561199157600080fd5b6112b082611963565b60005b838110156119b557818101518382015260200161199d565b50506000910152565b600081518084526119d681602086016020860161199a565b601f01601f19169290920160200192915050565b6020815260006112b060208301846119be565b600060208284031215611a0f57600080fd5b5035919050565b60008060408385031215611a2957600080fd5b611a3283611963565b946020939093013593505050565b600080600060608486031215611a5557600080fd5b611a5e84611963565b9250611a6c60208501611963565b929592945050506040919091013590565b60008060408385031215611a9057600080fd5b82359150611aa060208401611963565b90509250929050565b8035801515811461197a57600080fd5b600060208284031215611acb57600080fd5b6112b082611aa9565b60008060408385031215611ae757600080fd5b611af083611963565b9150611aa060208401611aa9565b634e487b7160e01b600052604160045260246000fd5b60008067ffffffffffffffff841115611b2f57611b2f611afe565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715611b5e57611b5e611afe565b604052838152905080828401851015611b7657600080fd5b83836020830137600060208583010152509392505050565b60008060008060808587031215611ba457600080fd5b611bad85611963565b9350611bbb60208601611963565b925060408501359150606085013567ffffffffffffffff811115611bde57600080fd5b8501601f81018713611bef57600080fd5b611bfe87823560208401611b14565b91505092959194509250565b60008060408385031215611c1d57600080fd5b611c2683611963565b9150602083013567ffffffffffffffff811115611c4257600080fd5b8301601f81018513611c5357600080fd5b611c6285823560208401611b14565b9150509250929050565b60008060408385031215611c7f57600080fd5b611c8883611963565b9150611aa060208401611963565b600181811c90821680611caa57607f821691505b602082108103611cca57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611d0e57611d0e611ce6565b5060010190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d48908301846119be565b9695505050505050565b600060208284031215611d6457600080fd5b81516112b081611930565b60008351611d8181846020880161199a565b835190830190611d9581836020880161199a565b01949350505050565b601f8211156106f857806000526020600020601f840160051c81016020851015611dc55750805b601f840160051c820191505b81811015610f085760008155600101611dd1565b815167ffffffffffffffff811115611dff57611dff611afe565b611e1381611e0d8454611c96565b84611d9e565b6020601f821160018114611e475760008315611e2f5750848201515b600019600385901b1c1916600184901b178455610f08565b600084815260208120601f198516915b82811015611e775787850151825560209485019460019092019101611e57565b5084821015611e955786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8181038181111561049857610498611ce6565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204af0f28822fa63bbdcd1d7997c5e8a1923086177c72495408dcaf8aa730877a664736f6c634300081a0033