0 txs
0 calls
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER_ROLE
viewfunction DEPLOYER_ROLE() view returns (bytes32)
encryptor
viewfunction encryptor() view returns (address)
explicitOwnershipOf
viewfunction explicitOwnershipOf(uint256 tokenId) view returns (tuple ownership)
explicitOwnershipsOf
viewfunction explicitOwnershipsOf(uint256[] tokenIds) view returns (tuple[])
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
name
viewfunction name() view returns (string)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
orderIds
viewfunction orderIds(bytes32) view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address, uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokensOfOwner
viewfunction tokensOfOwner(address owner) view returns (uint256[])
tokensOfOwnerIn
viewfunction tokensOfOwnerIn(address owner, uint256 start, uint256 stop) view returns (uint256[])
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
approve
payablefunction approve(address operator, uint256 tokenId) payable
deleteDefaultRoyalty
nonpayablefunction deleteDefaultRoyalty()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(string name, string symbol, address adminAddress, address operatorAddress, address encryptorAddress)
mint
nonpayablefunction mint(bytes32 orderId, uint256 expiry, uint256 quantity, bytes signature)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
resetTokenRoyalty
nonpayablefunction resetTokenRoyalty(uint256 tokenId)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
payablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data) payable
safeTransferFrom
payablefunction safeTransferFrom(address from, address to, uint256 tokenId) payable
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string uri)
setDefaultRoyalty
nonpayablefunction setDefaultRoyalty(address receiver, uint96 feeNumerator)
setTokenRoyalty
nonpayablefunction setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator)
transferFrom
payablefunction transferFrom(address from, address to, uint256 tokenId) payable
updateEncryptor
nonpayablefunction updateEncryptor(address encryptorAddress)
updateOperator
nonpayablefunction updateOperator(address operator, bool filtered)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
ConsecutiveTransfer
event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to)
Initialized
event Initialized(uint64 version)
OperatorUpdated
event OperatorUpdated(address operator, bool indexed filtered)
PieceMinted
event PieceMinted(address indexed owner, bytes32 orderId, uint256 from, uint256 to)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressAlreadyFiltered
error AddressAlreadyFiltered(address operator)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressFiltered
error AddressFiltered(address filtered)
AddressNotFiltered
error AddressNotFiltered(address operator)
ApprovalCallerNotOwnerNorApproved
error ApprovalCallerNotOwnerNorApproved()
ApprovalQueryForNonexistentToken
error ApprovalQueryForNonexistentToken()
BalanceQueryForZeroAddress
error BalanceQueryForZeroAddress()
DuplicatedOrderId
error DuplicatedOrderId()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC2981InvalidDefaultRoyalty
error ERC2981InvalidDefaultRoyalty(uint256 numerator, uint256 denominator)
ERC2981InvalidDefaultRoyaltyReceiver
error ERC2981InvalidDefaultRoyaltyReceiver(address receiver)
ERC2981InvalidTokenRoyalty
error ERC2981InvalidTokenRoyalty(uint256 tokenId, uint256 numerator, uint256 denominator)
ERC2981InvalidTokenRoyaltyReceiver
error ERC2981InvalidTokenRoyaltyReceiver(uint256 tokenId, address receiver)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
InvalidQueryRange
error InvalidQueryRange()
InvalidSignature
error InvalidSignature()
MintERC2309QuantityExceedsLimit
error MintERC2309QuantityExceedsLimit()
MintToZeroAddress
error MintToZeroAddress()
MintZeroQuantity
error MintZeroQuantity()
NotAllowed
error NotAllowed()
NotCompatibleWithSpotMints
error NotCompatibleWithSpotMints()
NotInitializing
error NotInitializing()
OwnerQueryForNonexistentToken
error OwnerQueryForNonexistentToken()
OwnershipNotInitializedForExtraData
error OwnershipNotInitializedForExtraData()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SequentialMintExceedsLimit
error SequentialMintExceedsLimit()
SequentialUpToTooSmall
error SequentialUpToTooSmall()
SpotMintTokenIdTooSmall
error SpotMintTokenIdTooSmall()
TokenAlreadyExists
error TokenAlreadyExists()
TransactionExpired
error TransactionExpired()
TransferCallerNotOwnerNorApproved
error TransferCallerNotOwnerNorApproved()
TransferFromIncorrectOwner
error TransferFromIncorrectOwner()
TransferToNonERC721ReceiverImplementer
error TransferToNonERC721ReceiverImplementer()
TransferToZeroAddress
error TransferToZeroAddress()
URIQueryForNonexistentToken
error URIQueryForNonexistentToken()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523060805234801562000014575f80fd5b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156200005f5750825b90505f826001600160401b031660011480156200007b5750303b155b9050811580156200008a575080155b15620000a95760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315620000d857845460ff60401b1916680100000000000000001785555b83156200011f57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050506080516133c76200014b5f395f81816118fc015281816119250152611aa601526133c75ff3fe60806040526004361061023e575f3560e01c80636352211e11610134578063aa1b103f116100b3578063d547741f11610078578063d547741f146106a1578063db0ed6a0146106c0578063e985e9c5146106df578063ecd00261146106fe578063f13886ec14610731578063f5b541a614610765575f80fd5b8063aa1b103f146105ff578063ad3cb1cc14610613578063b88d4fde14610643578063c23dc68f14610656578063c87b56dd14610682575f80fd5b806391d14854116100f957806391d148541461057b57806395d89b411461059a57806399a2557a146105ae578063a217fddf146105cd578063a22cb465146105e0575f80fd5b80636352211e146104d35780636d44a3b2146104f257806370a08231146105115780638462151c146105305780638a616bc01461055c575f80fd5b806336568abe116101c057806355f804b31161018557806355f804b31461042b5780635944c7531461044a5780635b5e9ae8146104695780635bbb2177146104885780635c764c04146104b4575f80fd5b806336568abe146103b357806342842e0e146103d257806342e2d4e3146103e55780634f1ef2861461040457806352d1902d14610417575f80fd5b806318160ddd1161020657806318160ddd1461030257806323b872dd14610324578063248a9ca3146103375780632a55205a146103565780632f2ff15d14610394575f80fd5b806301ffc9a71461024257806304634d8d1461027657806306fdde0314610297578063081812fc146102b8578063095ea7b3146102ef575b5f80fd5b34801561024d575f80fd5b5061026161025c3660046129c5565b610785565b60405190151581526020015b60405180910390f35b348015610281575f80fd5b50610295610290366004612a0c565b610795565b005b3480156102a2575f80fd5b506102ab6107cc565b60405161026d9190612a8a565b3480156102c3575f80fd5b506102d76102d2366004612a9c565b610865565b6040516001600160a01b03909116815260200161026d565b6102956102fd366004612ab3565b6108a7565b34801561030d575f80fd5b506103166108ea565b60405190815260200161026d565b610295610332366004612adb565b610908565b348015610342575f80fd5b50610316610351366004612a9c565b61094d565b348015610361575f80fd5b50610375610370366004612b14565b61096d565b604080516001600160a01b03909316835260208301919091520161026d565b34801561039f575f80fd5b506102956103ae366004612b34565b610a46565b3480156103be575f80fd5b506102956103cd366004612b34565b610a62565b6102956103e0366004612adb565b610a95565b3480156103f0575f80fd5b506003546102d7906001600160a01b031681565b610295610412366004612bf1565b610ad4565b348015610422575f80fd5b50610316610af3565b348015610436575f80fd5b50610295610445366004612c3b565b610b0e565b348015610455575f80fd5b50610295610464366004612c6c565b610b4f565b348015610474575f80fd5b50610295610483366004612ca5565b610b82565b348015610493575f80fd5b506104a76104a2366004612d29565b610ccf565b60405161026d9190612dd3565b3480156104bf575f80fd5b506102956104ce366004612e20565b610d1a565b3480156104de575f80fd5b506102d76104ed366004612a9c565b610dc8565b3480156104fd575f80fd5b5061029561050c366004612e39565b610dd2565b34801561051c575f80fd5b5061031661052b366004612e20565b610ec5565b34801561053b575f80fd5b5061054f61054a366004612e20565b610f21565b60405161026d9190612e72565b348015610567575f80fd5b50610295610576366004612a9c565b610f4e565b348015610586575f80fd5b50610261610595366004612b34565b610fa6565b3480156105a5575f80fd5b506102ab610fdc565b3480156105b9575f80fd5b5061054f6105c8366004612ea9565b610ff4565b3480156105d8575f80fd5b506103165f81565b3480156105eb575f80fd5b506102956105fa366004612e39565b61100b565b34801561060a575f80fd5b50610295611049565b34801561061e575f80fd5b506102ab604051806040016040528060058152602001640352e302e360dc1b81525081565b610295610651366004612ed9565b611089565b348015610661575f80fd5b50610675610670366004612a9c565b6110c9565b60405161026d9190612f3c565b34801561068d575f80fd5b506102ab61069c366004612a9c565b611122565b3480156106ac575f80fd5b506102956106bb366004612b34565b611199565b3480156106cb575f80fd5b506102956106da366004612f4a565b6111b5565b3480156106ea575f80fd5b506102616106f9366004612fd9565b611441565b348015610709575f80fd5b506103167ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c81565b34801561073c575f80fd5b506102d761074b366004612a9c565b60026020525f90815260409020546001600160a01b031681565b348015610770575f80fd5b506103165f8051602061331283398151915281565b5f61078f8261147c565b92915050565b5f6107a08133610fa6565b6107bd57604051631eb49d6d60e11b815260040160405180910390fd5b6107c783836114a0565b505050565b60606107d661154f565b60020180546107e490613001565b80601f016020809104026020016040519081016040528092919081815260200182805461081090613001565b801561085b5780601f106108325761010080835404028352916020019161085b565b820191905f5260205f20905b81548152906001019060200180831161083e57829003601f168201915b5050505050905090565b5f61086f82611573565b610883576108836333d1c03960e21b6115c6565b61088b61154f565b5f9283526006016020525060409020546001600160a01b031690565b816108b25f826115ce565b156108e05760405163a8cf495d60e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107c783836115ef565b5f806108f461154f565b6001015461090061154f565b540303905090565b336109135f826115ce565b1561093c5760405163a8cf495d60e01b81526001600160a01b03821660048201526024016108d7565b6109478484846115fb565b50505050565b5f9081525f80516020613332833981519152602052604090206001015490565b5f8281527fdaedc9ab023613a7caf35e703657e986ccfad7e3eb0af93a2853f8d65dd86b01602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282915f805160206133528339815191529190610a0f57506040805180820190915281546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101515f9061271090610a2d906001600160601b03168861304d565b610a379190613064565b91519791965090945050505050565b610a4f8261094d565b610a58816117b3565b61094783836117bd565b6001600160a01b0381163314610a8b5760405163334bd91960e11b815260040160405180910390fd5b6107c7828261185e565b33610aa05f826115ce565b15610ac95760405163a8cf495d60e01b81526001600160a01b03821660048201526024016108d7565b6109478484846118d7565b610adc6118f1565b610ae582611997565b610aef82826119df565b5050565b5f610afc611a9b565b505f805160206132f283398151915290565b5f80516020613312833981519152610b268133610fa6565b610b4357604051631eb49d6d60e11b815260040160405180910390fd5b60046107c783826130c7565b5f610b5a8133610fa6565b610b7757604051631eb49d6d60e11b815260040160405180910390fd5b610947848484611ae4565b610b8a611bb4565b5f8311610bd95760405162461bcd60e51b815260206004820152601f60248201527f5175616e74697479206d7573742062652067726561746572207468616e20300060448201526064016108d7565b5f858152600260205260409020546001600160a01b031615610c0e576040516301bc022560e01b815260040160405180910390fd5b610c1b8585858585611c21565b610c3857604051638baa579f60e01b815260040160405180910390fd5b5f85815260026020526040812080546001600160a01b03191633179055610c5d611d1b565b9050610c693385611d2a565b337fea2dd3cca5c029676a51e530bccd08a2a6b8e14ec1c678711f6bea41bebf8ef087836001610c97611d1b565b610ca19190613182565b6040805193845260208401929092529082015260600160405180910390a250610cc8611e18565b5050505050565b60408051828152600583901b8082016020019092526060915b8015610d1257601f1980820191860101355f610d03826110c9565b8484016020015250610ce89050565b509392505050565b5f80516020613312833981519152610d328133610fa6565b610d4f57604051631eb49d6d60e11b815260040160405180910390fd5b6001600160a01b038216610da55760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420656e63727970746f7220616464726573730000000000000060448201526064016108d7565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b5f61078f82611e42565b5f80516020613312833981519152610dea8133610fa6565b610e0757604051631eb49d6d60e11b815260040160405180910390fd5b81610e48575f610e178185611ef6565b905080610e42576040516322a92e0760e11b81526001600160a01b03851660048201526024016108d7565b50610e80565b5f610e538185611f0a565b905080610e7e576040516302ed108d60e21b81526001600160a01b03851660048201526024016108d7565b505b6040516001600160a01b0384168152821515907f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d9060200160405180910390a2505050565b5f6001600160a01b038216610ee457610ee46323d3ad8160e21b6115c6565b6001600160401b03610ef461154f565b6005015f846001600160a01b03166001600160a01b031681526020019081526020015f2054169050919050565b60605f80610f2d611d1b565b90506060818314610f4657610f43858484611f1e565b90505b949350505050565b5f610f598133610fa6565b610f7657604051631eb49d6d60e11b815260040160405180910390fd5b505f9081527fdaedc9ab023613a7caf35e703657e986ccfad7e3eb0af93a2853f8d65dd86b016020526040812055565b5f9182525f80516020613332833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060610fe661154f565b60030180546107e490613001565b6060611001848484611f1e565b90505b9392505050565b816110165f826115ce565b1561103f5760405163a8cf495d60e01b81526001600160a01b03821660048201526024016108d7565b6107c78383612018565b5f6110548133610fa6565b61107157604051631eb49d6d60e11b815260040160405180910390fd5b6110865f5f8051602061335283398151915255565b50565b336110945f826115ce565b156110bd5760405163a8cf495d60e01b81526001600160a01b03821660048201526024016108d7565b610cc885858585612094565b604080516080810182525f8082526020820181905291810182905260608101919091526110f4611d1b565b82101561111d575b61110582612156565b611114575f19909101906110fc565b61078f826120cf565b919050565b606061112d82611573565b61114157611141630a14c4b560e41b6115c6565b5f61114a612174565b905080515f036111685760405180602001604052805f815250611004565b8061117284612183565b604051602001611183929190613195565b6040516020818303038152906040529392505050565b6111a28261094d565b6111ab816117b3565b610947838361185e565b5f8051602061337283398151915254610100900460ff166111e8575f805160206133728339815191525460ff16156111ec565b303b155b61125e5760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084016108d7565b5f8051602061337283398151915254610100900460ff16158015611298575f80516020613372833981519152805461ffff19166101011790555b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112dc5750825b90505f826001600160401b031660011480156112f75750303b155b905081158015611305575080155b156113235760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561134d57845460ff60401b1916600160401b1785555b6113556121c6565b61135f8b8b6121ce565b61136761220b565b6113715f8a6117bd565b506113895f80516020613312833981519152896117bd565b506113b47ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c336117bd565b50600380546001600160a01b0319166001600160a01b038916179055831561141657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050508015611439575f80516020613372833981519152805461ff00191690555b505050505050565b5f61144a61154f565b6001600160a01b039384165f908152600791909101602090815260408083209490951682529290925250205460ff1690565b5f6001600160e01b03198216637965db0b60e01b148061078f575061078f82612246565b5f805160206133528339815191526127106001600160601b0383168110156114ed57604051636f483d0960e01b81526001600160601b0384166004820152602481018290526044016108d7565b6001600160a01b03841661151657604051635b6cc80560e11b81525f60048201526024016108d7565b50604080518082019091526001600160a01b039093168084526001600160601b039092166020909301839052600160a01b909202179055565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b5f61157c61154f565b5482101561111d575f5b61158e61154f565b5f848152600491909101602052604081205491508190036115b9576115b2836131c3565b9250611586565b600160e01b161592915050565b805f5260045ffd5b6001600160a01b0381165f9081526001830160205260408120541515611004565b610aef82826001612288565b5f61160582611e42565b6001600160a01b03948516949091508116841461162b5761162b62a1148160e81b6115c6565b5f8061163684612337565b9150915061165b81876116463390565b6001600160a01b039081169116811491141790565b61167d576116698633611441565b61167d5761167d632ce44b5f60e11b6115c6565b8015611687575f82555b61168f61154f565b6001600160a01b0387165f9081526005919091016020526040902080545f190190556116b961154f565b6001600160a01b0386165f8181526005929092016020526040909120805460010190554260a01b17600160e11b176116ef61154f565b5f8681526004919091016020526040812091909155600160e11b84169003611762576001840161171d61154f565b5f828152600491909101602052604081205490036117605761173d61154f565b548114611760578361174d61154f565b5f83815260049190910160205260409020555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4805f036117aa576117aa633a954ecd60e21b6115c6565b50505050505050565b611086813361235c565b5f5f805160206133328339815191526117d68484610fa6565b611855575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561180b3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061078f565b5f91505061078f565b5f5f805160206133328339815191526118778484610fa6565b15611855575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061078f565b6107c783838360405180602001604052805f815250611089565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061197757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661196b5f805160206132f2833981519152546001600160a01b031690565b6001600160a01b031614155b156119955760405163703e46dd60e11b815260040160405180910390fd5b565b7ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c6119c28133610fa6565b610aef57604051631eb49d6d60e11b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a39575060408051601f3d908101601f19168201909252611a36918101906131d8565b60015b611a6157604051634c9c8ce360e01b81526001600160a01b03831660048201526024016108d7565b5f805160206132f28339815191528114611a9157604051632a87526960e21b8152600481018290526024016108d7565b6107c78383612395565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146119955760405163703e46dd60e11b815260040160405180910390fd5b5f805160206133528339815191526127106001600160601b038316811015611b385760405163dfd1fc1b60e01b8152600481018690526001600160601b0384166024820152604481018290526064016108d7565b6001600160a01b038416611b6857604051634b4f842960e11b8152600481018690525f60248201526044016108d7565b506040805180820182526001600160a01b0394851681526001600160601b0393841660208083019182525f9788526001909401909352942093519051909116600160a01b029116179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611bf457604051633ee5aeb560e01b815260040160405180910390fd5b61199560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b906123ea565b5f8033604080516001600160a01b0390921660208301528101889052606081018790526080810186905260a0016040516020818303038152906040528051906020012090505f80611ca78387878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123f192505050565b509150915042881015611ccd576040516338e5e54b60e21b815260040160405180910390fd5b5f816003811115611ce057611ce06131ef565b148015611cfa57506003546001600160a01b038381169116145b15611d0b5760019350505050611d12565b5f93505050505b95945050505050565b5f611d2461154f565b54919050565b5f611d3361154f565b5490505f829003611d4e57611d4e63b562e8dd60e01b6115c6565b6001600160a01b0383164260a01b6001841460e11b1717611d6d61154f565b5f8381526004919091016020526040902055680100000000000000018202611d9361154f565b6001600160a01b0385165f818152600592909201602052604082208054909301909255819003611dcc57611dcc622e076360e81b6115c6565b818301825b80835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4818160010191508103611dd15781611e0e61154f565b55506107c7915050565b6119955f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00611c1b565b5f611e4b61154f565b5f83815260049190910160205260409020549050805f03611ed457611e6e61154f565b548210611e8557611e85636f96cda160e11b6115c6565b611e8d61154f565b5f199092015f81815260049390930160205260409092205490508015611e8557600160e01b81165f03611ebf57919050565b611ecf636f96cda160e11b6115c6565b611e85565b600160e01b81165f03611ee657919050565b61111d636f96cda160e11b6115c6565b5f611004836001600160a01b03841661243a565b5f611004836001600160a01b038416612514565b6060818310611f3757611f37631960ccad60e11b6115c6565b5f611f40611d1b565b905080808410611f4e578093505b5f611f5887610ec5565b9050848610611f6457505f5b801561200e578086860311611f7857508484035b604080516001830160051b81019182905294505f611f95886110c9565b90505f8160400151611fa5575080515b5f5b611fb08a6120cf565b925060408301515f8114611fc6575f9250611feb565b835115611fd257835192505b8b831860601b611feb576001820191508a8260051b8a01525b5060018a01995083604052888a148061200357508481145b15611fa75787525050505b5050509392505050565b8061202161154f565b335f818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61209f848484610908565b6001600160a01b0383163b15610947576120bb84848484612560565b610947576109476368d2bf6b60e11b6115c6565b604080516080810182525f80825260208201819052918101829052606081019190915261078f6120fd61154f565b5f8481526004919091016020526040902054604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b5f61215f61154f565b5f928352600401602052506040902054151590565b6060600480546107e490613001565b606060a06040510180604052602081039150505f815280825b600183039250600a81066030018353600a90048061219c5750819003601f19909101908152919050565b61199561263e565b5f8051602061337283398151915254610100900460ff166122015760405162461bcd60e51b81526004016108d790613203565b610aef8282612687565b5f8051602061337283398151915254610100900460ff1661223e5760405162461bcd60e51b81526004016108d790613203565b6119956126f8565b5f6122508261272b565b8061226b575063152a902d60e11b6001600160e01b03198316145b8061078f5750506001600160e01b03191663184371e560e31b1490565b5f61229283610dc8565b90508180156122aa5750336001600160a01b03821614155b156122cd576122b98133611441565b6122cd576122cd6367d9dca160e11b6115c6565b836122d661154f565b5f858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b5f805f61234261154f565b5f9485526006016020525050604090912080549092909150565b6123668282610fa6565b610aef5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108d7565b61239e82612778565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156123e2576107c782826127db565b610aef612844565b80825d5050565b5f805f8351604103612428576020840151604085015160608601515f1a61241a88828585612863565b955095509550505050612433565b505081515f91506002905b9250925092565b5f8181526001830160205260408120548015611855575f61245c600183613182565b85549091505f9061246f90600190613182565b90508082146124ce575f865f01828154811061248d5761248d613257565b905f5260205f200154905080875f0184815481106124ad576124ad613257565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806124df576124df61326b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061078f565b5f81815260018301602052604081205461255957508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561078f565b505f61078f565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a029061259490339089908890889060040161327f565b6020604051808303815f875af19250505080156125ce575060408051601f3d908101601f191682019092526125cb918101906132bb565b60015b612621573d8080156125fb576040519150601f19603f3d011682016040523d82523d5f602084013e612600565b606091505b5080515f03612619576126196368d2bf6b60e11b6115c6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661199557604051631afcd79f60e31b815260040160405180910390fd5b5f8051602061337283398151915254610100900460ff166126ba5760405162461bcd60e51b81526004016108d790613203565b816126c361154f565b600201906126d190826130c7565b50806126db61154f565b600301906126e990826130c7565b505f6126f361154f565b555050565b5f8051602061337283398151915254610100900460ff166119955760405162461bcd60e51b81526004016108d790613203565b5f6301ffc9a760e01b6001600160e01b03198316148061275b57506380ac58cd60e01b6001600160e01b03198316145b8061078f5750506001600160e01b031916635b5e139f60e01b1490565b806001600160a01b03163b5f036127ad57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016108d7565b5f805160206132f283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516127f791906132d6565b5f60405180830381855af49150503d805f811461282f576040519150601f19603f3d011682016040523d82523d5f602084013e612834565b606091505b5091509150611d1285838361292b565b34156119955760405163b398979f60e01b815260040160405180910390fd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561289c57505f91506003905082612921565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156128ed573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661291857505f925060019150829050612921565b92505f91508190505b9450945094915050565b6060826129405761293b82612987565b611004565b815115801561295757506001600160a01b0384163b155b1561298057604051639996b31560e01b81526001600160a01b03851660048201526024016108d7565b5080611004565b8051156129975780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160e01b031981168114611086575f80fd5b5f602082840312156129d5575f80fd5b8135611004816129b0565b80356001600160a01b038116811461111d575f80fd5b80356001600160601b038116811461111d575f80fd5b5f8060408385031215612a1d575f80fd5b612a26836129e0565b9150612a34602084016129f6565b90509250929050565b5f5b83811015612a57578181015183820152602001612a3f565b50505f910152565b5f8151808452612a76816020860160208601612a3d565b601f01601f19169290920160200192915050565b602081525f6110046020830184612a5f565b5f60208284031215612aac575f80fd5b5035919050565b5f8060408385031215612ac4575f80fd5b612acd836129e0565b946020939093013593505050565b5f805f60608486031215612aed575f80fd5b612af6846129e0565b9250612b04602085016129e0565b9150604084013590509250925092565b5f8060408385031215612b25575f80fd5b50508035926020909101359150565b5f8060408385031215612b45575f80fd5b82359150612a34602084016129e0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612b78575f80fd5b81356001600160401b0380821115612b9257612b92612b55565b604051601f8301601f19908116603f01168101908282118183101715612bba57612bba612b55565b81604052838152866020858801011115612bd2575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612c02575f80fd5b612c0b836129e0565b915060208301356001600160401b03811115612c25575f80fd5b612c3185828601612b69565b9150509250929050565b5f60208284031215612c4b575f80fd5b81356001600160401b03811115612c60575f80fd5b610f4684828501612b69565b5f805f60608486031215612c7e575f80fd5b83359250612c8e602085016129e0565b9150612c9c604085016129f6565b90509250925092565b5f805f805f60808688031215612cb9575f80fd5b85359450602086013593506040860135925060608601356001600160401b0380821115612ce4575f80fd5b818801915088601f830112612cf7575f80fd5b813581811115612d05575f80fd5b896020828501011115612d16575f80fd5b9699959850939650602001949392505050565b5f8060208385031215612d3a575f80fd5b82356001600160401b0380821115612d50575f80fd5b818501915085601f830112612d63575f80fd5b813581811115612d71575f80fd5b8660208260051b8501011115612d85575f80fd5b60209290920196919550909350505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b602080825282518282018190525f9190848201906040850190845b81811015612e1457612e01838551612d97565b9284019260809290920191600101612dee565b50909695505050505050565b5f60208284031215612e30575f80fd5b611004826129e0565b5f8060408385031215612e4a575f80fd5b612e53836129e0565b915060208301358015158114612e67575f80fd5b809150509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612e1457835183529284019291840191600101612e8d565b5f805f60608486031215612ebb575f80fd5b612ec4846129e0565b95602085013595506040909401359392505050565b5f805f8060808587031215612eec575f80fd5b612ef5856129e0565b9350612f03602086016129e0565b92506040850135915060608501356001600160401b03811115612f24575f80fd5b612f3087828801612b69565b91505092959194509250565b6080810161078f8284612d97565b5f805f805f60a08688031215612f5e575f80fd5b85356001600160401b0380821115612f74575f80fd5b612f8089838a01612b69565b96506020880135915080821115612f95575f80fd5b50612fa288828901612b69565b945050612fb1604087016129e0565b9250612fbf606087016129e0565b9150612fcd608087016129e0565b90509295509295909350565b5f8060408385031215612fea575f80fd5b612ff3836129e0565b9150612a34602084016129e0565b600181811c9082168061301557607f821691505b60208210810361303357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761078f5761078f613039565b5f8261307e57634e487b7160e01b5f52601260045260245ffd5b500490565b601f8211156107c757805f5260205f20601f840160051c810160208510156130a85750805b601f840160051c820191505b81811015610cc8575f81556001016130b4565b81516001600160401b038111156130e0576130e0612b55565b6130f4816130ee8454613001565b84613083565b602080601f831160018114613127575f84156131105750858301515b5f19600386901b1c1916600185901b178555611439565b5f85815260208120601f198616915b8281101561315557888601518255948401946001909101908401613136565b508582101561317257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561078f5761078f613039565b5f83516131a6818460208801612a3d565b8351908301906131ba818360208801612a3d565b01949350505050565b5f816131d1576131d1613039565b505f190190565b5f602082840312156131e8575f80fd5b5051919050565b634e487b7160e01b5f52602160045260245ffd5b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906132b190830184612a5f565b9695505050505050565b5f602082840312156132cb575f80fd5b8151611004816129b0565b5f82516132e7818460208701612a3d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800daedc9ab023613a7caf35e703657e986ccfad7e3eb0af93a2853f8d65dd86b00ee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa264697066735822122029b09c05aff4243bdd188be01f6e9fd79cbf8bde8a9ffc718de11fa8ea33f88464736f6c63430008180033