0 txs
94 calls
constructor
constructor()
functions
artistCreatedArtworks
viewfunction artistCreatedArtworks(address, uint256) view returns (uint256)
artworkCost
viewfunction artworkCost() view returns (uint256)
artworksContract
viewfunction artworksContract() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
freeMintingEnabled
viewfunction freeMintingEnabled() view returns (bool)
freeMintsClaimed
viewfunction freeMintsClaimed(address) view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getOwnedTokensIndicies
viewfunction getOwnedTokensIndicies(address account_) view returns (uint256[] ownedTokens)
getTokenInfo
viewfunction getTokenInfo(uint256 tokenId) view returns (address account, uint8 artistType)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
maxSupply
viewfunction maxSupply() view returns (uint256)
merkleRoot
viewfunction merkleRoot() view returns (bytes32)
mintPrice
viewfunction mintPrice() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tbaImplementation
viewfunction tbaImplementation() view returns (address)
tbaRegistry
viewfunction tbaRegistry() view returns (address)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenToAccount
viewfunction tokenToAccount(uint256) view returns (address)
tokenToArtistType
viewfunction tokenToArtistType(uint256) view returns (uint8)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
traitsContract
viewfunction traitsContract() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
approve
nonpayablefunction approve(address to, uint256 tokenId)
initialize
nonpayablefunction initialize(string name_, string symbol_, string baseURI_, address tbaRegistry_, address tbaImplementation_, address traitsContract_, address artworksContract_, uint256 mintPrice_, uint256 maxSupply_, uint256 artworkCost_)
mint
payablefunction mint(uint8 artistType, bytes32[] merkleProof) payable returns (uint256)
produceArtwork
payablefunction produceArtwork(uint256 tokenId, uint256[] traitIds, string aspectRatio, bool artistIsOwner) payable
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setArtworkCost
nonpayablefunction setArtworkCost(uint256 newCost)
setArtworksContract
nonpayablefunction setArtworksContract(address newArtworksContract)
setBaseURI
nonpayablefunction setBaseURI(string baseURI)
setMaxSupply
nonpayablefunction setMaxSupply(uint256 newMaxSupply)
setMerkleRoot
nonpayablefunction setMerkleRoot(bytes32 newMerkleRoot)
setMintPrice
nonpayablefunction setMintPrice(uint256 newPrice)
setTbaImplementation
nonpayablefunction setTbaImplementation(address newTbaImplementation)
setTraitsContract
nonpayablefunction setTraitsContract(address newTraitsContract)
toggleFreeMinting
nonpayablefunction toggleFreeMinting(bool enabled)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
triggerBatchMetadataUpdate
nonpayablefunction triggerBatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address to)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
ArtistNftMinted
event ArtistNftMinted(uint256 tokenId, uint8 artistType, address account)
ArtworkCostUpdated
event ArtworkCostUpdated(uint256 oldCost, uint256 newCost)
ArtworksContractSet
event ArtworksContractSet(address oldArtworksContract, address newArtworksContract)
BaseURIUpdated
event BaseURIUpdated(string baseURI)
BatchMetadataUpdate
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
FreeMintingToggled
event FreeMintingToggled(bool enabled)
Initialized
event Initialized(uint64 version)
MaxSupplyUpdated
event MaxSupplyUpdated(uint256 oldMaxSupply, uint256 newMaxSupply)
MerkleRootSet
event MerkleRootSet(bytes32 oldMerkleRoot, bytes32 newMerkleRoot)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
MintPriceUpdated
event MintPriceUpdated(uint256 oldPrice, uint256 newPrice)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProduceArtwork
event ProduceArtwork(uint256 tokenId, address artistTBA, address artworkOwner, uint256[] traitIds, uint256 artworkTokenId, string aspectRatio)
TbaImplementationSet
event TbaImplementationSet(address oldTbaImplementation, address newTbaImplementation)
TraitsContractSet
event TraitsContractSet(address oldTraitsContract, address newTraitsContract)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516141296100f95f395f81816122630152818161228c015261243c01526141295ff3fe608060405260043610610324575f3560e01c806370a08231116101a7578063b61c5e69116100e7578063e5700b6011610092578063f0d1f63c1161006d578063f0d1f63c146109eb578063f2fde38b14610a0a578063f4a0a52814610a29578063fe1f654614610a48575f5ffd5b8063e5700b601461093a578063e985e9c514610959578063ea2a0b12146109bf575f5ffd5b8063c093afdb116100c2578063c093afdb146108e7578063c87b56dd14610906578063d5abeb0114610925575f5ffd5b8063b61c5e6914610896578063b88d4fde146108a9578063b8db80e9146108c8575f5ffd5b8063902c878e11610152578063a22cb4651161012d578063a22cb465146107dc578063a3ca59de146107fb578063a3d14f541461081a578063ad3cb1cc1461084e575f5ffd5b8063902c878e1461078a57806395d89b41146107a95780639c04b836146107bd575f5ffd5b80637de7dd57116101825780637de7dd57146106c65780638c7a63ae146106e55780638da5cb5b1461074e575f5ffd5b806370a0823114610674578063715018a6146106935780637cb64759146106a7575f5ffd5b806343dde6391161027257806352d1902d1161021d5780635eabd84a116101f85780635eabd84a146106025780636352211e146106215780636817c76c146106405780636f8b44b014610655575f5ffd5b806352d1902d146105b057806355f804b3146105c457806358974eed146105e3575f5ffd5b80634f1ef2861161024d5780634f1ef2861461055f5780634f6ccce71461057257806351cff8d914610591575f5ffd5b806343dde63914610512578063468d198d1461052b5780634bd9406c1461054a575f5ffd5b806318160ddd116102d25780632eb4a7ab116102ad5780632eb4a7ab146104bf5780632f745c59146104d457806342842e0e146104f3575f5ffd5b806318160ddd1461042d57806323b872dd146104605780632a33171f1461047f575f5ffd5b80630865704c116103025780630865704c146103b4578063095ea7b3146103ed578063136fe70c1461040e575f5ffd5b806301ffc9a71461032857806306fdde031461035c578063081812fc1461037d575b5f5ffd5b348015610333575f5ffd5b506103476103423660046137d9565b610a5b565b60405190151581526020015b60405180910390f35b348015610367575f5ffd5b50610370610a6b565b6040516103539190613822565b348015610388575f5ffd5b5061039c610397366004613834565b610b1f565b6040516001600160a01b039091168152602001610353565b3480156103bf575f5ffd5b506103df6103ce36600461386f565b600e6020525f908152604090205481565b604051908152602001610353565b3480156103f8575f5ffd5b5061040c61040736600461388a565b610b65565b005b348015610419575f5ffd5b5061040c6104283660046138cc565b610b74565b348015610438575f5ffd5b507f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02546103df565b34801561046b575f5ffd5b5061040c61047a3660046138e7565b610bc4565b34801561048a575f5ffd5b506104ad610499366004613834565b60056020525f908152604090205460ff1681565b60405160ff9091168152602001610353565b3480156104ca575f5ffd5b506103df600c5481565b3480156104df575f5ffd5b506103df6104ee36600461388a565b610c6b565b3480156104fe575f5ffd5b5061040c61050d3660046138e7565b610d08565b34801561051d575f5ffd5b50600d546103479060ff1681565b348015610536575f5ffd5b5060025461039c906001600160a01b031681565b348015610555575f5ffd5b506103df60075481565b61040c61056d3660046139dc565b610d27565b34801561057d575f5ffd5b506103df61058c366004613834565b610d42565b34801561059c575f5ffd5b5061040c6105ab36600461386f565b610df3565b3480156105bb575f5ffd5b506103df610f3e565b3480156105cf575f5ffd5b5061040c6105de366004613a29565b610f6c565b3480156105ee575f5ffd5b506103df6105fd36600461388a565b610fb0565b34801561060d575f5ffd5b5061040c61061c36600461386f565b610fdb565b34801561062c575f5ffd5b5061039c61063b366004613834565b6110a8565b34801561064b575f5ffd5b506103df600b5481565b348015610660575f5ffd5b5061040c61066f366004613834565b6110b2565b34801561067f575f5ffd5b506103df61068e36600461386f565b61116f565b34801561069e575f5ffd5b5061040c6111f3565b3480156106b2575f5ffd5b5061040c6106c1366004613834565b611206565b3480156106d1575f5ffd5b5061040c6106e036600461386f565b61124c565b3480156106f0575f5ffd5b5061072d6106ff366004613834565b5f908152600460209081526040808320546005909252909120546001600160a01b039091169160ff90911690565b604080516001600160a01b03909316835260ff909116602083015201610353565b348015610759575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661039c565b348015610795575f5ffd5b5061040c6107a4366004613a5b565b611337565b3480156107b4575f5ffd5b5061037061136d565b3480156107c8575f5ffd5b5060035461039c906001600160a01b031681565b3480156107e7575f5ffd5b5061040c6107f6366004613a7b565b6113be565b348015610806575f5ffd5b5061040c610815366004613834565b6113c9565b348015610825575f5ffd5b5061039c610834366004613834565b60046020525f90815260409020546001600160a01b031681565b348015610859575f5ffd5b506103706040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6103df6108a4366004613ab2565b611484565b3480156108b4575f5ffd5b5061040c6108c3366004613b3a565b611991565b3480156108d3575f5ffd5b5061040c6108e2366004613ba2565b6119a9565b3480156108f2575f5ffd5b5060085461039c906001600160a01b031681565b348015610911575f5ffd5b50610370610920366004613834565b611b84565b348015610930575f5ffd5b506103df600a5481565b348015610945575f5ffd5b5061040c61095436600461386f565b611b8f565b348015610964575f5ffd5b50610347610973366004613c92565b6001600160a01b039182165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b3480156109ca575f5ffd5b506109de6109d936600461386f565b611c7a565b6040516103539190613cf8565b3480156109f6575f5ffd5b5060095461039c906001600160a01b031681565b348015610a15575f5ffd5b5061040c610a2436600461386f565b611d0d565b348015610a34575f5ffd5b5061040c610a43366004613834565b611d63565b61040c610a56366004613d0a565b611da6565b5f610a6582612116565b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008054606091908190610a9d90613dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990613dfb565b8015610b145780601f10610aeb57610100808354040283529160200191610b14565b820191905f5260205f20905b815481529060010190602001808311610af757829003601f168201915b505050505091505090565b5f610b2982612153565b505f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b0316610a65565b610b708282336121c3565b5050565b610b7c6121d0565b600d805460ff19168215159081179091556040519081527fb6af709c29c2784ae1ef269aabb1cbca48ff987b012310e06d0c9b8ff9a43321906020015b60405180910390a150565b6001600160a01b038216610bf257604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610bfe838333612244565b9050836001600160a01b0316816001600160a01b031614610c65576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610be9565b50505050565b5f7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00610c968461116f565b8310610ce0576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101849052604401610be9565b6001600160a01b0384165f908152602091825260408082208583529092522054905092915050565b610d2283838360405180602001604052805f815250611991565b505050565b610d2f612258565b610d3882612328565b610b708282612330565b5f7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00610d8c7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed025490565b8310610dcd576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081525f600482015260248101849052604401610be9565b806002018381548110610de257610de2613e33565b905f5260205f200154915050919050565b610dfb6121d0565b6001600160a01b038116610e515760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610be9565b4780610e9f5760405162461bcd60e51b815260206004820152601260248201527f4e6f2045544820746f20776974686472617700000000000000000000000000006044820152606401610be9565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610ee8576040519150601f19603f3d011682016040523d82523d5f602084013e610eed565b606091505b5050905080610d225760405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610be9565b5f610f47612431565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f746121d0565b6001610f808282613e8b565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad81604051610bb99190613822565b6006602052815f5260405f208181548110610fc9575f80fd5b905f5260205f20015f91509150505481565b610fe36121d0565b6001600160a01b0381166110395760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642074726169747320636f6e74726163742061646472657373006044820152606401610be9565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527fd45139757ffd57ed9600c1a5c8fe63e5192859c887a365d2238446be4dbedc2d91015b60405180910390a15050565b5f610a6582612153565b6110ba6121d0565b5f548110156111315760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d6178537570706c792062656c6f7720637572726560448201527f6e7420737570706c7900000000000000000000000000000000000000000000006064820152608401610be9565b600a80549082905560408051828152602081018490527f44ecfc706d63e347851cfd40acfa6cf2e3a41faa3e8b460210c03938e84a91ad910161109c565b5f7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b0383166111d3576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610be9565b6001600160a01b039092165f908152600390920160205250604090205490565b6111fb6121d0565b6112045f612493565b565b61120e6121d0565b600c80549082905560408051828152602081018490527f4983a335d43faab715b8e7c23f104092b464c1b553f3f4aa3fc33c473b45dd49910161109c565b6112546121d0565b6001600160a01b0381166112d05760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642074626120696d706c656d656e746174696f6e20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610be9565b600380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527fa7df551c25312df53319dd441f432f8d716a0db7725d3f97e7f2d3bd94674032910161109c565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910161109c565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930091610a9d90613dfb565b610b70338383612510565b6113d16121d0565b5f81116114465760405162461bcd60e51b815260206004820152602360248201527f417274776f726b20636f7374206d75737420626520677265617465722074686160448201527f6e203000000000000000000000000000000000000000000000000000000000006064820152608401610be9565b600780549082905560408051828152602081018490527f055048f145697f3155d4dff644814fb09d0e7f7ecd884d4d329201bf78ecf992910161109c565b5f600a545f54106114d75760405162461bcd60e51b815260206004820152601260248201527f4d617820737570706c79207265616368656400000000000000000000000000006044820152606401610be9565b60068460ff16111561152b5760405162461bcd60e51b815260206004820152601360248201527f496e76616c6964206172746973742074797065000000000000000000000000006044820152606401610be9565b81158015906117c857600d5460ff166115865760405162461bcd60e51b815260206004820152601b60248201527f46726565206d696e74696e67206973206e6f7420656e61626c656400000000006044820152606401610be9565b600c546115d55760405162461bcd60e51b815260206004820152601360248201527f4d65726b6c6520726f6f74206e6f7420736574000000000000000000000000006044820152606401610be9565b335f908152600e60205260409020546002116116595760405162461bcd60e51b815260206004820152602e60248201527f416464726573732068617320616c726561647920636c61696d6564206d61786960448201527f6d756d2066726565206d696e74730000000000000000000000000000000000006064820152608401610be9565b34156116cc5760405162461bcd60e51b8152602060048201526024808201527f46726565206d696e742073686f756c64206e6f7420696e636c7564652070617960448201527f6d656e74000000000000000000000000000000000000000000000000000000006064820152608401610be9565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201525f906034016040516020818303038152906040528051906020012090506117578585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600c5491508490506125eb565b6117a35760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d65726b6c652070726f6f660000000000000000000000006044820152606401610be9565b335f908152600e602052604081208054916117bd83613f5a565b91905055505061181a565b600b5434101561181a5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742066756e64732073656e740000000000000000006044820152606401610be9565b5f8054818061182883613f5a565b9190505590506118383382612600565b61184a8161184583612619565b6126b6565b5f8181526005602052604090819020805460ff191660ff891617905560025460035491517f8a54c52f0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810184905246604482015230606482015260848101849052911690638a54c52f9060a4016020604051808303815f875af11580156118e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119079190613f72565b5f82815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03949094169384179055815184815260ff8a1691810191909152908101919091527fea479b3071b713c5d23788e4bca5910179d1e5ee4945c539c466725f2e5f7f939060600160405180910390a19150505b9392505050565b61199c848484610bc4565b610c653385858585612728565b5f6119b2612882565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156119de5750825b90505f8267ffffffffffffffff1660011480156119fa5750303b155b905081158015611a08575080155b15611a3f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611a8a57845468ff00000000000000001916680100000000000000001785555b611a948f8f6128aa565b611a9c6128bc565b611aa46128bc565b611aad336128c4565b611ab56128bc565b6001611ac18e82613e8b565b50600280546001600160a01b03808f1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600380548e8416908316179055600880548d841690831617905560098054928c1692909116919091179055600b889055600a87905560078690558315611b7357845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050505050565b6060610a65826128d5565b611b976121d0565b6001600160a01b038116611c135760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420617274776f726b7320636f6e74726163742061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610be9565b600980546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527fee2d873238be54242bbb6b190b109967356db59e715d03e4a6c124a20320c4e8910161109c565b60605f611c868361116f565b90508067ffffffffffffffff811115611ca157611ca1613925565b604051908082528060200260200182016040528015611cca578160200160208202803683370190505b5091505f5b81811015611d0657611ce18482610c6b565b838281518110611cf357611cf3613e33565b6020908102919091010152600101611ccf565b5050919050565b611d156121d0565b6001600160a01b038116611d57576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610be9565b611d6081612493565b50565b611d6b6121d0565b600b81905560408051828152602081018390527f2e1c9e000c6e8dda4d03536adb13b7cb6034ccff90d17f01de381e4d5097b5259101610bb9565b6008546001600160a01b0316611dfe5760405162461bcd60e51b815260206004820152601760248201527f54726169747320636f6e7472616374206e6f74207365740000000000000000006044820152606401610be9565b600754341015611e765760405162461bcd60e51b815260206004820152602b60248201527f496e73756666696369656e74207061796d656e7420666f7220617274776f726b60448201527f2070726f64756374696f6e0000000000000000000000000000000000000000006064820152608401610be9565b33611e80856110a8565b6001600160a01b031614611efb5760405162461bcd60e51b8152602060048201526024808201527f53656e64657220646f6573206e6f74206f776e2074686520617274697374207460448201527f6f6b656e000000000000000000000000000000000000000000000000000000006064820152608401610be9565b5f848152600460208190526040918290205460085492517f2705c0620000000000000000000000000000000000000000000000000000000081526001600160a01b0391821693909116918291632705c06291611f5b9186918a9101613f8d565b602060405180830381865afa158015611f76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9a9190613fae565b61200c5760405162461bcd60e51b815260206004820152602760248201527f41727469737420646f6573206e6f74206f776e20616c6c2073656c656374656460448201527f20747261697473000000000000000000000000000000000000000000000000006064820152608401610be9565b6009546001600160a01b03165f81636a6278428661202a573361202c565b855b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016020604051808303815f875af115801561206f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120939190613fc9565b6001600160a01b0385165f9081526006602090815260408220805460018101825590835291200181905590507faf16113d835d087dac07b3b432492faf12638219bde00c29c826f5032bf52e868885876120ed57336120ef565b865b8a858b60405161210496959493929190613fe0565b60405180910390a15050505050505050565b5f6001600160e01b031982167f49064906000000000000000000000000000000000000000000000000000000001480610a655750610a65826129f8565b5f8181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120546001600160a01b031680610a65576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610be9565b610d228383836001612a35565b336122027f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614611204576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610be9565b5f612250848484612bbe565b949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122f157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122e57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611204576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d606121d0565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561238a575060408051601f3d908101601f1916820190925261238791810190613fc9565b60015b6123cb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610be9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612427576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610be9565b610d228383612cc7565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611204576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b03831661257c576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610be9565b6001600160a01b038481165f818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b5f826125f78584612d1c565b14949350505050565b610b70828260405180602001604052805f815250612d5e565b60605f61262583612d75565b60010190505f8167ffffffffffffffff81111561264457612644613925565b6040519080825280601f01601f19166020018201604052801561266e576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461267857509392505050565b5f8281527f0542a41881ee128a365a727b282c86fa859579490b9bb45aab8503648c8e7900602081905260409091206126ef8382613e8b565b506040518381527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050565b6001600160a01b0383163b1561287b576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a029061278390889088908790879060040161403b565b6020604051808303815f875af19250505080156127bd575060408051601f3d908101601f191682019092526127ba9181019061407b565b60015b612824573d8080156127ea576040519150601f19603f3d011682016040523d82523d5f602084013e6127ef565b606091505b5080515f0361281c57604051633250574960e11b81526001600160a01b0385166004820152602401610be9565b805160208201fd5b6001600160e01b031981167f150b7a02000000000000000000000000000000000000000000000000000000001461287957604051633250574960e11b81526001600160a01b0385166004820152602401610be9565b505b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610a65565b6128b2612e56565b610b708282612e94565b611204612e56565b6128cc612e56565b611d6081612ed7565b60607f0542a41881ee128a365a727b282c86fa859579490b9bb45aab8503648c8e790061290183612153565b505f838152602082905260408120805461291a90613dfb565b80601f016020809104026020016040519081016040528092919081815260200182805461294690613dfb565b80156129915780601f1061296857610100808354040283529160200191612991565b820191905f5260205f20905b81548152906001019060200180831161297457829003601f168201915b505050505090505f6129a1612edf565b905080515f036129b357509392505050565b8151156129e65780826040516020016129cd9291906140ad565b6040516020818303038152906040529350505050919050565b6129ef85612f6f565b95945050505050565b5f6001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610a655750610a6582612fd3565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180612a6a57506001600160a01b03831615155b15612b81575f612a7985612153565b90506001600160a01b03841615801590612aa55750836001600160a01b0316816001600160a01b031614155b8015612af557506001600160a01b038082165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b15612b37576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610be9565b8215612b7f5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5f938452600401602052505060409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f5f612bcb85858561306d565b90506001600160a01b038116612c6557612c60847f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0280545f8381527f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0360205260408120829055600182018355919091527fa42f15e5d656f8155fd7419d740a6073999f19cd6e061449ce4a257150545bf20155565b612c88565b846001600160a01b0316816001600160a01b031614612c8857612c8881856131b4565b6001600160a01b038516612ca457612c9f8461325e565b612250565b846001600160a01b0316816001600160a01b031614612250576122508585613351565b612cd0826133bc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612d1457610d228282613458565b610b706134c1565b5f81815b8451811015612d5657612d4c82868381518110612d3f57612d3f613e33565b60200260200101516134f9565b9150600101612d20565b509392505050565b612d688383613522565b610d22335f858585612728565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612dbd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612de9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e0757662386f26fc10000830492506010015b6305f5e1008310612e1f576305f5e100830492506008015b6127108310612e3357612710830492506004015b60648310612e45576064830492506002015b600a8310610a655760010192915050565b612e5e61359c565b611204576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e9c612e56565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080612ec88482613e8b565b5060018101610c658382613e8b565b611d15612e56565b606060018054612eee90613dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1a90613dfb565b8015612f655780601f10612f3c57610100808354040283529160200191612f65565b820191905f5260205f20905b815481529060010190602001808311612f4857829003601f168201915b5050505050905090565b6060612f7a82612153565b505f612f84612edf565b90505f815111612fa25760405180602001604052805f81525061198a565b80612fac84612619565b604051602001612fbd9291906140ad565b6040516020818303038152906040529392505050565b5f6001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061303557506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a6557507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610a65565b5f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300906001600160a01b03908116908416156130da576130da8185876135ba565b6001600160a01b03811615613116576130f55f865f5f612a35565b6001600160a01b0381165f908152600383016020526040902080545f190190555b6001600160a01b03861615613146576001600160a01b0386165f9081526003830160205260409020805460010190555b5f858152600283016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed005f6131df8461116f565b5f8481526001840160209081526040808320546001600160a01b03891684529186905290912091925090818314613237575f838152602082815260408083205485845281842081905583526001870190915290208290555b5f948552600190930160209081526040808620869055928552929092528220919091555050565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02547f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00905f906132b0906001906140c1565b5f8481526003840160205260408120546002850180549394509092849081106132db576132db613e33565b905f5260205f2001549050808460020183815481106132fc576132fc613e33565b5f91825260208083209091019290925582815260038601909152604080822084905586825281205560028401805480613337576133376140d4565b600190038181905f5260205f20015f905590555050505050565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed005f600161337e8561116f565b61338891906140c1565b6001600160a01b039094165f9081526020838152604080832087845282528083208690559482526001909301909252502055565b806001600160a01b03163b5f0361340a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610be9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161347491906140e8565b5f60405180830381855af49150503d805f81146134ac576040519150601f19603f3d011682016040523d82523d5f602084013e6134b1565b606091505b50915091506129ef858383613650565b3415611204576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f818310613513575f82815260208490526040902061198a565b505f9182526020526040902090565b6001600160a01b03821661354b57604051633250574960e11b81525f6004820152602401610be9565b5f61355783835f612244565b90506001600160a01b03811615610d22576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610be9565b5f6135a5612882565b5468010000000000000000900460ff16919050565b6135c58383836136c5565b610d22576001600160a01b03831661360c576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610be9565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610be9565b6060826136655761366082613783565b61198a565b815115801561367c57506001600160a01b0384163b155b156136be576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610be9565b508061198a565b5f6001600160a01b038316158015906122505750826001600160a01b0316846001600160a01b0316148061373c57506001600160a01b038085165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b806122505750505f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b03908116911614919050565b80511561379257805160208201fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981168114611d60575f5ffd5b5f602082840312156137e9575f5ffd5b813561198a816137c4565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61198a60208301846137f4565b5f60208284031215613844575f5ffd5b5035919050565b6001600160a01b0381168114611d60575f5ffd5b803561386a8161384b565b919050565b5f6020828403121561387f575f5ffd5b813561198a8161384b565b5f5f6040838503121561389b575f5ffd5b82356138a68161384b565b946020939093013593505050565b8015158114611d60575f5ffd5b803561386a816138b4565b5f602082840312156138dc575f5ffd5b813561198a816138b4565b5f5f5f606084860312156138f9575f5ffd5b83356139048161384b565b925060208401356139148161384b565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561396257613962613925565b604052919050565b5f82601f830112613979575f5ffd5b8135602083015f5f67ffffffffffffffff84111561399957613999613925565b50601f8301601f19166020016139ae81613939565b9150508281528583830111156139c2575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f604083850312156139ed575f5ffd5b82356139f88161384b565b9150602083013567ffffffffffffffff811115613a13575f5ffd5b613a1f8582860161396a565b9150509250929050565b5f60208284031215613a39575f5ffd5b813567ffffffffffffffff811115613a4f575f5ffd5b6122508482850161396a565b5f5f60408385031215613a6c575f5ffd5b50508035926020909101359150565b5f5f60408385031215613a8c575f5ffd5b8235613a978161384b565b91506020830135613aa7816138b4565b809150509250929050565b5f5f5f60408486031215613ac4575f5ffd5b833560ff81168114613ad4575f5ffd5b9250602084013567ffffffffffffffff811115613aef575f5ffd5b8401601f81018613613aff575f5ffd5b803567ffffffffffffffff811115613b15575f5ffd5b8660208260051b8401011115613b29575f5ffd5b939660209190910195509293505050565b5f5f5f5f60808587031215613b4d575f5ffd5b8435613b588161384b565b93506020850135613b688161384b565b925060408501359150606085013567ffffffffffffffff811115613b8a575f5ffd5b613b968782880161396a565b91505092959194509250565b5f5f5f5f5f5f5f5f5f5f6101408b8d031215613bbc575f5ffd5b8a3567ffffffffffffffff811115613bd2575f5ffd5b613bde8d828e0161396a565b9a505060208b013567ffffffffffffffff811115613bfa575f5ffd5b613c068d828e0161396a565b99505060408b013567ffffffffffffffff811115613c22575f5ffd5b613c2e8d828e0161396a565b985050613c3d60608c0161385f565b9650613c4b60808c0161385f565b9550613c5960a08c0161385f565b9450613c6760c08c0161385f565b999c989b50969995989497939650939460e08101359450610100810135936101209091013592509050565b5f5f60408385031215613ca3575f5ffd5b8235613cae8161384b565b91506020830135613aa78161384b565b5f8151808452602084019350602083015f5b82811015613cee578151865260209586019590910190600101613cd0565b5093949350505050565b602081525f61198a6020830184613cbe565b5f5f5f5f60808587031215613d1d575f5ffd5b84359350602085013567ffffffffffffffff811115613d3a575f5ffd5b8501601f81018713613d4a575f5ffd5b803567ffffffffffffffff811115613d6457613d64613925565b8060051b613d7460208201613939565b9182526020818401810192908101908a841115613d8f575f5ffd5b6020850194505b83851015613db557843580835260209586019590935090910190613d96565b96505050506040860135905067ffffffffffffffff811115613dd5575f5ffd5b613de18782880161396a565b925050613df0606086016138c1565b905092959194509250565b600181811c90821680613e0f57607f821691505b602082108103613e2d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b601f821115610d2257805f5260205f20601f840160051c81016020851015613e6c5750805b601f840160051c820191505b8181101561287b575f8155600101613e78565b815167ffffffffffffffff811115613ea557613ea5613925565b613eb981613eb38454613dfb565b84613e47565b6020601f821160018114613eeb575f8315613ed45750848201515b5f19600385901b1c1916600184901b17845561287b565b5f84815260208120601f198516915b82811015613f1a5787850151825560209485019460019092019101613efa565b5084821015613f3757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b5f60018201613f6b57613f6b613f46565b5060010190565b5f60208284031215613f82575f5ffd5b815161198a8161384b565b6001600160a01b0383168152604060208201525f6122506040830184613cbe565b5f60208284031215613fbe575f5ffd5b815161198a816138b4565b5f60208284031215613fd9575f5ffd5b5051919050565b8681526001600160a01b03861660208201526001600160a01b038516604082015260c060608201525f61401660c0830186613cbe565b84608084015282810360a084015261402e81856137f4565b9998505050505050505050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f61407160808301846137f4565b9695505050505050565b5f6020828403121561408b575f5ffd5b815161198a816137c4565b5f81518060208401855e5f93019283525090919050565b5f6122506140bb8386614096565b84614096565b81810381811115610a6557610a65613f46565b634e487b7160e01b5f52603160045260245ffd5b5f61198a828461409656fea264697066735822122041bd337003c73ce6262999b0c13aca1f1f186c76294ec0483ce28f0665e5506b64736f6c634300081b0033