745 txs
1.1k calls
constructor
constructor(address ownerAddress, address treasuryAddress, address creatorCoinFactoryAddress)
functions
checkProof
viewfunction checkProof(bytes32 message, bytes signature) view returns (bool)
creatorCoinFactory
viewfunction creatorCoinFactory() view returns (address)
creatorPools
viewfunction creatorPools(address nftContract) view returns (address creatorPool)
creatorPoolTax
viewfunction creatorPoolTax() view returns (uint256)
factory
viewfunction factory() view returns (address)
getMessageHash
purefunction getMessageHash(address userAddress, address nftContract, uint256 tokenId, uint256 amount, uint256 nonce) pure returns (bytes32)
getNextMintsPrice
viewfunction getNextMintsPrice(address nftContract, uint256 amount) view returns (uint256 totalPrice)
getPrimaryMintTimeLeft
viewfunction getPrimaryMintTimeLeft(address nftContract) view returns (uint256)
getPrimaryTotalPrice
viewfunction getPrimaryTotalPrice(uint256 primaryStartingPrice, uint256 currentSupply, uint256 quantity) view returns (uint256)
isPrimarySaleOpen
viewfunction isPrimarySaleOpen(address nftContract) view returns (bool)
lastPrimaryMintTimestamp
viewfunction lastPrimaryMintTimestamp(address nftContract) view returns (uint256 lastPrimaryMintTimestamp)
listings
viewfunction listings(address nftContract, uint256 tokenId, address userAddress) view returns (uint256 amount, uint256 price)
owner
viewfunction owner() view returns (address)
platformFee
viewfunction platformFee() view returns (uint256)
priceIncreaseMultiplier
viewfunction priceIncreaseMultiplier() view returns (uint256)
primaryMintTimeout
viewfunction primaryMintTimeout() view returns (uint256)
proofNonce
viewfunction proofNonce(address userAddress) view returns (uint256 proofNonce)
proofRequired
viewfunction proofRequired(address nftContract) view returns (uint8 proofRequired)
proofSigner
viewfunction proofSigner() view returns (address)
referralFee
viewfunction referralFee() view returns (uint256)
registeredContracts
viewfunction registeredContracts(address nftContract) view returns (bool isRegistered)
salesOpen
viewfunction salesOpen() view returns (bool)
secondaryCreatorPercentage
viewfunction secondaryCreatorPercentage() view returns (uint256)
secondaryCreatorPoolTax
viewfunction secondaryCreatorPoolTax() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
verifyListing
viewfunction verifyListing(address nftContract, uint256 tokenId, address seller) view returns (bool isValid, uint256 amountAvailable, uint256 amountUnavailable, bool isApproved)
batchBuyListedNft
payablefunction batchBuyListedNft(address nftContract, uint256 tokenId, uint256[] amounts, address[] sellers, address referrer) payable
batchCleanupInvalidListings
nonpayablefunction batchCleanupInvalidListings(address nftContract, uint256 tokenId, address[] sellers) returns (uint256)
cancelNftListing
nonpayablefunction cancelNftListing(address nftContract, uint256 tokenId)
cleanupInvalidListing
nonpayablefunction cleanupInvalidListing(address nftContract, uint256 tokenId, address seller) returns (bool)
closeSales
nonpayablefunction closeSales()
delegateCreatorPoolControllerCall
nonpayablefunction delegateCreatorPoolControllerCall(address creatorPool, bytes data)
listNft
nonpayablefunction listNft(address nftContract, uint256 tokenId, uint256 amount, uint256 price)
mintNft
payablefunction mintNft(address nftContract, uint256 tokenId, uint256 amount, address referrer) payable
mintNftWithProof
payablefunction mintNftWithProof(address nftContract, uint256 tokenId, uint256 amount, address referrer, bytes proof) payable
openSales
nonpayablefunction openSales()
registerContract
nonpayablefunction registerContract(address nftContract)
registerContractWithProof
nonpayablefunction registerContractWithProof(address nftContract, uint8 proofId)
renounceOwnership
nonpayablefunction renounceOwnership()
setCreatorCoinFactory
nonpayablefunction setCreatorCoinFactory(address newCreatorCoinFactory)
setFactory
nonpayablefunction setFactory(address newFactory)
setProofSigner
nonpayablefunction setProofSigner(address newProofSigner)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateCreatorPoolTax
nonpayablefunction updateCreatorPoolTax(uint256 newTax)
updateNftListing
nonpayablefunction updateNftListing(address nftContract, uint256 tokenId, uint256 amount, uint256 price)
updateOwner
nonpayablefunction updateOwner(address newOwner)
updatePlatformFee
nonpayablefunction updatePlatformFee(uint256 newFee)
updatePriceIncreaseMultiplier
nonpayablefunction updatePriceIncreaseMultiplier(uint256 newMultiplier)
updatePrimaryMintTimeout
nonpayablefunction updatePrimaryMintTimeout(uint256 newTimeout)
updateReferralFee
nonpayablefunction updateReferralFee(uint256 newFee)
updateSecondaryCreatorPercentage
nonpayablefunction updateSecondaryCreatorPercentage(uint256 newPercentage)
updateSecondaryCreatorPoolTax
nonpayablefunction updateSecondaryCreatorPoolTax(uint256 newTax)
events
ContractRegistered
event ContractRegistered(address indexed nftContract, address indexed owner, address indexed creatorPool, uint256 timestamp)
ContractRegisteredWithProof
event ContractRegisteredWithProof(address indexed nftContract, address indexed owner, address indexed creatorPool, uint8 proofRequired, uint256 timestamp)
ContractUnregistered
event ContractUnregistered(address indexed nftContract, address indexed owner, uint256 timestamp)
CreatorCoinFactoryUpdated
event CreatorCoinFactoryUpdated(address oldFactory, address newFactory)
CreatorPoolTaxUpdated
event CreatorPoolTaxUpdated(uint256 oldTax, uint256 newTax)
FactoryUpdated
event FactoryUpdated(address oldFactory, address newFactory)
NftListed
event NftListed(address indexed nftContract, address indexed userAddress, uint256 indexed tokenId, uint256 amount, uint256 price, uint256 timestamp)
NftListedBought
event NftListedBought(address indexed nftContract, address indexed seller, address indexed buyer, uint256 tokenId, uint256 amount, uint256 price, uint256 sellerAmount, uint256 royaltyAmount, uint256 creatorPoolAmount, uint256 referralAmount, uint256 platformAmount, address referrer, uint256 timestamp)
NftListingUpdated
event NftListingUpdated(address indexed nftContract, address indexed userAddress, uint256 indexed tokenId, uint256 amount, uint256 price, uint256 timestamp)
NftMinted
event NftMinted(address indexed nftContract, address indexed userAddress, uint256 indexed tokenId, uint256 amount, uint256 price, uint256 creatorAmount, uint256 creatorPoolAmount, uint256 referralAmount, uint256 platformAmount, address referrer, uint256 timestamp)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformFeeUpdated
event PlatformFeeUpdated(uint256 oldFee, uint256 newFee)
PriceIncreaseMultiplierUpdated
event PriceIncreaseMultiplierUpdated(uint256 oldMultiplier, uint256 newMultiplier)
PrimaryMintTimeoutUpdated
event PrimaryMintTimeoutUpdated(uint256 oldTimeout, uint256 newTimeout)
ReferralFeeUpdated
event ReferralFeeUpdated(uint256 oldFee, uint256 newFee)
ReferralPaid
event ReferralPaid(address indexed referrer, uint256 amount, address indexed nftContract, address buyer, uint256 timestamp)
SalesClosed
event SalesClosed()
SalesOpened
event SalesOpened()
SecondaryCreatorPercentageUpdated
event SecondaryCreatorPercentageUpdated(uint256 oldPercentage, uint256 newPercentage)
SecondaryCreatorPoolTaxUpdated
event SecondaryCreatorPoolTaxUpdated(uint256 oldTax, uint256 newTax)
errors
AlreadyListed
error AlreadyListed()
ArrayLengthMismatch
error ArrayLengthMismatch()
ContractAlreadyRegistered
error ContractAlreadyRegistered()
ContractNotRegistered
error ContractNotRegistered()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EmptyArrays
error EmptyArrays()
InsufficientAmountAvailable
error InsufficientAmountAvailable()
InsufficientBalance
error InsufficientBalance()
InsufficientFunds
error InsufficientFunds()
InvalidPercentage
error InvalidPercentage()
InvalidProofSignature
error InvalidProofSignature()
ListingNotFound
error ListingNotFound()
NoActiveListing
error NoActiveListing()
NotApproved
error NotApproved()
NotFactory
error NotFactory()
NotMarketplace
error NotMarketplace()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PrimarySaleClosed
error PrimarySaleClosed()
ProofNotRequired
error ProofNotRequired()
ProofRequired
error ProofRequired()
ProofSignerNotSet
error ProofSignerNotSet()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ReferralFeeGreaterThanPlatformFee
error ReferralFeeGreaterThanPlatformFee()
SalesNotOpen
error SalesNotOpen()
SellerInsufficientBalance
error SellerInsufficientBalance()
SellerNotAuthorized
error SellerNotAuthorized()
ZeroAmount
error ZeroAmount()
ZeroFee
error ZeroFee()
ZeroMultiplier
error ZeroMultiplier()
ZeroPercentage
error ZeroPercentage()
ZeroPrice
error ZeroPrice()
ZeroQuantity
error ZeroQuantity()
ZeroTimeout
error ZeroTimeout()
creation bytecode
0x6080346200012b57601f6200311e38819003918201601f19168301916001600160401b0383118484101762000130578084926060946040528339810103126200012b576200004d8162000146565b620000696040620000616020850162000146565b930162000146565b6001600160a01b03918216919082156200011257600080546001600160a01b0319808216861783556040519690958593919284167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a36001805580600655600755600a60085560026009556003600a55600a600b5562015180600c5560ff19600d5416600d551683600254161760025516906003541617600355612fc290816200015c8239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200012b5756fe6080806040526004361015610028575b5036156100205761001e61277c565b005b61001e61277c565b60003560e01c90816306e4641d14611e96575080630b64447d14611e7857806311b76a9814611e5557806315a8f07314611e0b57806315fb943e14611dd15780631b11555714611caf5780631b81064414611c915780631e7b3f561461155a57806322a5dde41461134957806326232a2e1461132b5780632ab6cae6146113085780632fdccecd146112ab5780633a58fedc1461123a5780633ae1f2a7146112215780633ed18bea146111d957806340f67ba61461119c5780634339f18f1461112f57806351e9b4a314611111578063564490c4146110e857806359e1abaa1461107e5780635bb478081461100857806361d027b314610fdf5780636620a90814610e785780636bd3a64b14610e24578063715018a614610dcb578063729205e714610da85780637572547914610d2f57806379c4223c14610cfa57806384ae2bc614610cdc578063880cdc3114610cb35780638da5cb5b14610c8a57806391c6c0fe14610c47578063977db65314610c235780639d24791814610be85780639dd6394b14610b7d578063a06617cd14610b3e578063aa0b598814610aeb578063ade82851146109e9578063bec288ea146109af578063c103e59b146108d0578063c45a0155146108a7578063c647fc0814610838578063c95756a8146107cb578063cff79d2d146107ad578063d1e1a5c81461054a578063d940a32114610460578063dd5d793414610442578063ef102c6f14610419578063f2fde38b146103c7578063f3f524b814610357578063f7ca892a1461030a5763f9d58e3914610271573861000f565b346103055760603660031901126103055761028a61209f565b6024356044356001600160401b038111610305576102ac903690600401612126565b92909160009360005b8181106102c757602086604051908152f35b6102e46102dd6102d88385896122e0565b612306565b84866123a0565b6102f1575b6001016102b5565b946102fd6001916122d1565b9590506102e9565b600080fd5b34610305576000366003190112610305576103236127c1565b600160ff19600d541617600d557fa233be964e9ae4a4a047824571ca28b43a901a3188f61eb5f6bf519bbf8dd594600080a1005b34610305576020366003190112610305576004356103736127c1565b60065481116103b55760407fe6a16ded5057640d8831f18cd4885a75642c76b3fde5215975c3d9735027fa2091600754908060075582519182526020820152a1005b60405163abe6063760e01b8152600490fd5b34610305576020366003190112610305576103e061209f565b6103e86127c1565b6001600160a01b038116156104005761001e90612ca1565b604051631e4fbdf760e01b815260006004820152602490fd5b34610305576000366003190112610305576003546040516001600160a01b039091168152602090f35b34610305576000366003190112610305576020600854604051908152f35b60803660031901126103055761047461209f565b60443561047f6120b5565b906104886127ed565b60ff600d5416156105385761049c8361234c565b15610526576001600160a01b0383166000818152600e602052604090205460ff161561051457811561050257600052601260205260ff604060002054166104f0576104ea9260243590612810565b60018055005b604051631eae1a4d60e31b8152600490fd5b604051631f2a200560e01b8152600490fd5b604051639ada36a160e01b8152600490fd5b60405163bf17eae760e01b8152600490fd5b604051632680523f60e01b8152600490fd5b346103055760403660031901126103055761056361209f565b60243560ff8116809103610305576004546001600160a01b03929083163314158061079f575b61078d578216806000526020600e815260ff6040600020541661077b5760405163abc8c7af60e01b81528181600481865afa9081156106e45760009161075e575b50843091160361074c57600354604051638da5cb5b60e01b808252918616908381600481885afa80156106e45760248891869360009161072f575b506040519485938492630fdd144960e11b84521660048301525afa80156106e4578691600091610712575b501694856106f0575b83600052600e8352604060002060ff199060018282541617905560128452856040600020918254161790556040519182528282600481875afa80156106e4577f3f3d16970efb878ec14658ecef799bb072037cd90c5a8ca76d2769fb30c9739f936040936000926106b5575b50835196875242908701521693a4005b816106d69293503d84116106dd575b6106ce818361219d565b81019061232d565b90886106a5565b503d6106c4565b6040513d6000823e3d90fd5b6000848152601184526040902080546001600160a01b03191687179055610639565b6107299150843d86116106dd576106ce818361219d565b87610630565b6107469150843d86116106dd576106ce818361219d565b8a610605565b60405163386317a360e01b8152600490fd5b6107759150823d84116106dd576106ce818361219d565b856105ca565b6040516370bc3e8560e01b8152600490fd5b604051631966391b60e11b8152600490fd5b508260005416331415610589565b34610305576000366003190112610305576020600b54604051908152f35b34610305576020366003190112610305576004356107e76127c1565b80156108265760407f0e72001967179cd1dc2fa8f1c1b5d0dfca0a25163e4dc24f3bbeb97515b3905591600b549080600b5582519182526020820152a1005b6040516303373dc760e61b8152600490fd5b34610305576020366003190112610305576004356108546127c1565b606481116108955760407f28ae399f9b4ac445d4223d7ce70d317552bd1261a076eb1866e2bb88d6aad44691600854908060085582519182526020820152a1005b604051631f3b85d360e01b8152600490fd5b34610305576000366003190112610305576004546040516001600160a01b039091168152602090f35b34610305576040366003190112610305576108e961209f565b6024356001600160401b038111610305576000918261090d819336906004016120f9565b91906109176127c1565b826040519384928337810182815203925af13d156109aa573d610939816124d4565b90610947604051928361219d565b8152600060203d92013e5b1561095957005b60405162461bcd60e51b815260206004820152602360248201527f43726561746f7220706f6f6c20636f6e74726f6c6c65722063616c6c206661696044820152621b195960ea1b6064820152608490fd5b610952565b34610305576020366003190112610305576001600160a01b036109d061209f565b1660005260136020526020604060002054604051908152f35b3461030557604036600319011261030557610a0261209f565b6024359060018060a01b031680600052602091600e835260ff6040600020541615610514578015610502576040516318160ddd60e01b8152918383600481845afa9081156106e4578490600092610abb575b60405163bf9eaff360e01b81529450849060049082905afa80156106e457600090610a8c575b610a8493506126e7565b604051908152f35b508383813d8311610ab4575b610aa2818361219d565b8101031261030557610a849251610a7a565b503d610a98565b915083813d8311610ae4575b610ad1818361219d565b8101031261030557836004935191610a54565b503d610ac7565b3461030557602036600319011261030557600435610b076127c1565b7fd347e206f25a89b917fc9482f1a2d294d749baa4dc9bde7fb495ee11fe49164360406006548151908152836020820152a1600655005b34610305576020366003190112610305576001600160a01b03610b5f61209f565b16600052600e602052602060ff604060002054166040519015158152f35b3461030557602036600319011261030557600435610b996127c1565b8015610bd6577fdb56756c5514be37ee7ccb1b0e66009a3adab1aa8e4076e088a4474a59ebfe3a6040600a548151908152836020820152a1600a55005b60405163b5646fa560e01b8152600490fd5b346103055760203660031901126103055760206001600160a01b0380610c0c61209f565b166000526011825260406000205416604051908152f35b34610305576060366003190112610305576020610a846044356024356004356126e7565b3461030557602036600319011261030557610c6061209f565b610c686127c1565b600580546001600160a01b0319166001600160a01b0392909216919091179055005b34610305576000366003190112610305576000546040516001600160a01b039091168152602090f35b346103055760203660031901126103055761001e610ccf61209f565b610cd76127c1565b612ca1565b34610305576000366003190112610305576020600754604051908152f35b34610305576080610d13610d0d36612156565b91612591565b9160405193151584526020840152604083015215156060820152f35b3461030557604036600319011261030557610d4861209f565b6024359060ff600d5416156105385760018060a01b038116600052600f60205260406000208260005260205260406000203360005260205260406000205415610d965761001e913391612bb1565b604051632cd08f1160e01b8152600490fd5b3461030557600036600319011261030557602060ff600d54166040519015158152f35b3461030557600036600319011261030557610de46127c1565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461030557610e3236612156565b919060018060a01b03809216600052600f602052604060002090600052602052604060002091166000526020526040806000206001815491015482519182526020820152f35b3461030557610e86366120cb565b919260ff600d5416156105385760018060a01b03811680600052602090600f82526040600020866000528252604060002033600052825260406000205415610d96578415610fcd57604051627eeac760e11b8152828180610eeb8a33600484016121be565b0381855afa80156106e4578591600091610f9c575b5010610f8a5781604051809263e985e9c560e01b82528180610f263033600484016121f1565b03915afa9182156106e457600092610f5d575b505015610f4b5761001e933391612c2b565b60405163c19f17a960e01b8152600490fd5b610f7c9250803d10610f83575b610f74818361219d565b8101906121d9565b8580610f39565b503d610f6a565b604051631e9acf1760e31b8152600490fd5b809250848092503d8311610fc6575b610fb5818361219d565b810103126103055784905188610f00565b503d610fab565b604051634dfba02360e01b8152600490fd5b34610305576000366003190112610305576002546040516001600160a01b039091168152602090f35b34610305576020366003190112610305577f333c7678baf16017cf31e1d2f90143a62aab01a67a0807f6836a4304ceabb55561104261209f565b61104a6127c1565b600480546001600160a01b038381166001600160a01b03198316179092556040519283926110799216836121f1565b0390a1005b346103055760a03660031901126103055761109761209f565b6024356001600160a01b0381168103610305576110cf6110dd602093604051928391868301956084359160643591604435918961229d565b03601f19810183528261219d565b519020604051908152f35b34610305576000366003190112610305576005546040516001600160a01b039091168152602090f35b34610305576000366003190112610305576020600a54604051908152f35b346103055760203660031901126103055760043561114b6127c1565b801561118a5760407fda6fd77d1951984896f1e76feea4cb090d16bfd6f16fd96d6b2c4a10aa51736a91600c549080600c5582519182526020820152a1005b60405163b077b20b60e01b8152600490fd5b34610305576020366003190112610305576001600160a01b036111bd61209f565b166000526012602052602060ff60406000205416604051908152f35b34610305576040366003190112610305576024356001600160401b0381116103055761121761120e60209236906004016120f9565b906004356124ef565b6040519015158152f35b3461030557602061121761123436612156565b916123a0565b34610305576020366003190112610305577f2babfe1e800fa69161c53f84b18d67364469b5f77bbe24d71ce28cdbff25df1f61127461209f565b61127c6127c1565b600380546001600160a01b038381166001600160a01b03198316179092556040519283926110799216836121f1565b34610305576020366003190112610305576004356112c76127c1565b606481116108955760407f93fd42ef6ad137187c413d272b6380aad3b71e60b656446c2b71f7361b665d1f91600954908060095582519182526020820152a1005b3461030557602036600319011261030557602061121761132661209f565b61234c565b34610305576000366003190112610305576020600654604051908152f35b34610305576020806003193601126103055761136361209f565b6004546001600160a01b0392919083163314158061154c575b61078d57821680600052600e825260ff6040600020541661077b5760405163abc8c7af60e01b81528281600481855afa9081156106e45760009161152f575b50833091160361074c57600354604051638da5cb5b60e01b80825293918516908281600481875afa80156106e457602487918593600091611512575b506040519485938492630fdd144960e11b84521660048301525afa80156106e45785916000916114f5575b501693846114d3575b82600052600e82526040600020600160ff198254161790556040519384528184600481865afa9384156106e457600094611490575b50907f74b523c72a25fc99f3cc3a148bfeb7ead25bb1709852a5cda1e037ef4e0b5d8a91604051944286521693a4005b829194506114cb907f74b523c72a25fc99f3cc3a148bfeb7ead25bb1709852a5cda1e037ef4e0b5d8a933d84116106dd576106ce818361219d565b939091611460565b6000838152601183526040902080546001600160a01b0319168617905561142b565b61150c9150833d85116106dd576106ce818361219d565b86611422565b6115299150843d86116106dd576106ce818361219d565b896113f7565b6115469150833d85116106dd576106ce818361219d565b846113bb565b50826000541633141561137c565b60a03660031901126103055761156e61209f565b6001600160401b03906044358281116103055761158f903690600401612126565b9092606435908111610305576115a9903690600401612126565b9390916084356001600160a01b0381169003610305576115c76127ed565b60ff600d54161561053857848103611c7f578015611c6d5760009460009560006006545b838210611b5a5750503410611b4857939291906000945b80861061164557868034116116175760018055005b6000808061162681943461222e565b81811561163c575b3390f1156106e457806104ea565b506108fc61162e565b9091929394956116596102d88884886122e0565b6116648885876122e0565b3591604051627eeac760e11b81526020818061168660243587600484016121be565b03816001600160a01b038d165afa80156106e4578491600091611b13575b5010611adc5760405163e985e9c560e01b8152602081806116c93087600484016121f1565b03816001600160a01b038d165afa9081156106e457600091611af4575b5015611adc576001600160a01b038881166000908152600f60209081526040808320602435845282528083209386168352929052206001810154905490919061174090839061173690879061222e565b856024358d612c2b565b6001600160a01b0389163b1561030557600092838a60c460405180978193637921219560e11b835260018060a01b038716600484015233602484015260243560448401528a606484015260a060848401528160a484015260018060a01b03165af19384156106e457600494611acd575b506117bf33608435878d612ce8565b95906117cb828661231a565b9660208d60405198898092638da5cb5b60e01b825260018060a01b03165afa9687156106e457600097611aac575b506064611808600a548a61231a565b049660018060a01b036002541690813b1561030557604051630bd1c52160e11b81526001600160a01b03909116600482015290600090829060249082908c905af180156106e457611a9d575b506001600160a01b03808e166000908152601160205260408120549099911680151580611a94575b15611a7b57606461188f6009548461231a565b0499813b156103055760405163aadd1b0360e01b8152906000826004818f875af19081156106e4578c938c938893611a67575b50816119f1575b5050906118dc6118dc926118e19561222e565b61222e565b9760018060a01b036002541697883b1561030557604051630bd1c52160e11b81526001600160a01b038716600482015299986000908b9060249082908d905af19889156106e45760019a6119d59a6119e2575b50611954611942878b61231a565b61194e8860065461231a565b9061220b565b98604051966024358852602088015260408701526060860152608085015260a084015260c083015260e0820152858060a01b0360843516610100820152426101208201523391868060a01b0316907fad911546ffdd41a4e0a1deca981b15b38002cfb6982330656b3663a976639ea46101408d898060a01b031692a461220b565b965b019493929190611602565b6119eb9061218a565b38611934565b9250925050803b15611a63578f8b611a22928492836040518096819582946388ba030160e01b8452600484016121be565b03925af18015611a58578b928b928792156118c957909350839250611a47915061218a565b611a55578884828c936118c9565b80fd5b6040513d84823e3d90fd5b5080fd5b611a7291925061218a565b600090386118c2565b508298506118e1906118dc896118dc60009c8d9461222e565b5081151561187c565b611aa69061218a565b8e611854565b611ac691975060203d6020116106dd576106ce818361219d565b958e6117f9565b611ad69061218a565b8b6117b0565b979060019250611aef9060243589612bb1565b6119d7565b611b0d915060203d602011610f8357610f74818361219d565b8a6116e6565b9150506020813d602011611b40575b81611b2f6020938361219d565b81010312610305578390518b6116a4565b3d9150611b22565b60405163356680b760e01b8152600490fd5b9091611b6a6102d884868a6122e0565b90611b768487896122e0565b6001600160a01b038a81166000908152600f6020908152604080832060243584528252808320938716835292905220549035919015611c5b578115610502576001600160a01b038a81166000908152600f6020908152604080832060243584528252808320938716835292905220548211611c495761194e611c4192600194858060a01b038d16600052600f6020526040600020602435600052602052604060002090868060a01b031660005260205261194e611c3a82876040600020015461231a565b918761231a565b9201906115eb565b6040516359b7f32960e01b8152600490fd5b604051630fc87cc760e31b8152600490fd5b60405163a600c81d60e01b8152600490fd5b60405163512509d360e11b8152600490fd5b34610305576000366003190112610305576020600c54604051908152f35b60a036600319011261030557611cc361209f565b602435604435611cd16120b5565b916084356001600160401b03811161030557611cf19036906004016120f9565b611cf96127ed565b60ff600d54161561053857611d0d8661234c565b15610526576001600160a01b0386166000818152600e602052604090205460ff161561051457841561050257600052601260205260ff6040600020541615611dbf57611d8591336000526013602052866110cf611d7d6040600020546040519283918a8a6020850197338961229d565b5190206124ef565b15611dad576104ea933360005260136020526040600020611da681546122d1565b9055612810565b60405163d338dbb760e01b8152600490fd5b6040516338cb392760e21b8152600490fd5b34610305576020366003190112610305576001600160a01b03611df261209f565b1660005260106020526020604060002054604051908152f35b3461030557600036600319011261030557611e246127c1565b60ff19600d5416600d557f0671dd5e3fea89b895c1249668b5d4536fb7bc1c1981d7b9c170a9bf041f3909600080a1005b34610305576020366003190112610305576020610a84611e7361209f565b61223b565b34610305576000366003190112610305576020600954604051908152f35b3461030557611ea4366120cb565b9290919360ff600d541615612090575060018060a01b031690816000526020600e815260ff6040600020541615610514578115610502578315610fcd57604051627eeac760e11b8152818180611efe8933600484016121be565b0381875afa80156106e457839160009161205f575b5010610f8a5782600052600f81526040600020856000528152604060002033600052815260406000205461204d5760405163e985e9c560e01b8152818180611f5f3033600484016121f1565b0381875afa9081156106e457600091612030575b5015610f4b576040519160408301928084106001600160401b0385111761201a576001612015937fd1f715ae46c116f478a481e7aec65ab5bc149f549ca35e216612e76d6f57f765956040528383528083019088825287600052600f815260406000208a600052815260406000209033600052526040600020925183555191015560405191829133964291846040919493926060820195825260208201520152565b0390a4005b634e487b7160e01b600052604160045260246000fd5b6120479150823d8411610f8357610f74818361219d565b86611f73565b6040516328f560bb60e21b8152600490fd5b809250838092503d8311612089575b612078818361219d565b810103126103055782905187611f13565b503d61206e565b632680523f60e01b8152600490fd5b600435906001600160a01b038216820361030557565b606435906001600160a01b038216820361030557565b6080906003190112610305576004356001600160a01b03811681036103055790602435906044359060643590565b9181601f84011215610305578235916001600160401b038311610305576020838186019501011161030557565b9181601f84011215610305578235916001600160401b038311610305576020808501948460051b01011161030557565b6060906003190112610305576001600160a01b03600435818116810361030557916024359160443590811681036103055790565b6001600160401b03811161201a57604052565b90601f801991011681019081106001600160401b0382111761201a57604052565b6001600160a01b039091168152602081019190915260400190565b90816020910312610305575180151581036103055790565b6001600160a01b0391821681529116602082015260400190565b9190820180921161221857565b634e487b7160e01b600052601160045260246000fd5b9190820391821161221857565b6001600160a01b03166000908152600e602052604090205460ff16156122985760ff600d54161561229857601060205260406000205480156122915761228761228e91600c549061220b565b429061222e565b90565b50600c5490565b600090565b939190608895939160018060601b0319809260601b16865260601b1660148501526028840152604883015260688201520190565b60001981146122185760010190565b91908110156122f05760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036103055790565b8181029291811591840414171561221857565b9081602091031261030557516001600160a01b03811681036103055790565b6001600160a01b03166000908152600e602052604090205460ff16156122985760ff600d541615612298576010602052604060002054801561239a57600c546123949161220b565b42111590565b50600190565b919060018060a01b0392838116600094818652602091600f83526040918288208689528452828820908716885283528187205480156124ca578251627eeac760e11b81528481806123f58a8c600484016121be565b0381865afa9081156124c057899161248f575b501092808351809363e985e9c560e01b8252818061242a308d600484016121f1565b03915afa92831561248657508792612469575b50508115612460575b506124515750505090565b61245b9350612bb1565b600190565b90501538612446565b61247f9250803d10610f8357610f74818361219d565b388061243d565b513d89823e3d90fd5b90508481813d83116124b9575b6124a6818361219d565b810103126124b5575138612408565b8880fd5b503d61249c565b84513d8b823e3d90fd5b5050505050505090565b6001600160401b03811161201a57601f01601f191660200190565b6005546001600160a01b039081169390929091841561257f577f19457468657265756d205369676e6564204d6573736167653a0a333200000000600052601c52603c60002061253d836124d4565b9061254b604051928361219d565b838252368484011161030557600060208561257a96612571968387013784010152612e45565b90929192612e81565b161490565b60405163f34ba7a960e01b8152600490fd5b60408051627eeac760e11b81529094936001600160a01b039283169391926020928385806125c38487600484016121be565b0381895afa9485156126dc576000956126ad575b5085600052600f845287600020906000528352866000209082166000528252856000205493841561269857918091612625938851808096819463e985e9c560e01b83523090600484016121f1565b03915afa95861561268e575060009561266f575b505081811061265d5750916000915b821580612656575b93929190565b5081612650565b8061266991949261222e565b91612648565b612686929550803d10610f8357610f74818361219d565b923880612639565b513d6000823e3d90fd5b50505050509050600090600090600090600090565b90948482813d83116126d5575b6126c4818361219d565b81010312611a5557505193386125d7565b503d6126ba565b88513d6000823e3d90fd5b919091811561276a5791600092600091600b5480155b8585106127195750505050509061194e61228e9260065461231a565b90919293958161273261272c898761220b565b8761231a565b906127545760019161194e8561274993048861220b565b9601939291906126fd565b634e487b7160e01b600052601260045260246000fd5b60405163f4f5b73360e01b8152600490fd5b6002546001600160a01b0316803b156103055760006004916040519283809263d3bed04d60e01b825234905af180156106e4576127b65750565b6127bf9061218a565b565b6000546001600160a01b031633036127d557565b60405163118cdaa760e01b8152336004820152602490fd5b6002600154146127fe576002600155565b604051633ee5aeb560e01b8152600490fd5b6040805163bf9eaff360e01b815292946001600160a01b0380841694909391926000926020929091600491848184818c5afa908115612ba7578691612b7a575b5081516318160ddd60e01b8152858185818d5afa908115612b2757908b918891612b43575b5061287f926126e7565b803410612b3557883b15612b31578151630ab714fb60e11b81523384820152602481018c9052604481018b90528681606481838e5af18015612b2757612b14575b506128cd33888c87612ce8565b9590966128e56128df8d60065461231a565b8461222e565b956000968c8852601184528b86892054169788151580612b0b575b15612b0157506129156064916008549061231a565b0496803b1561030557855163aadd1b0360e01b815260008189818c865af18015612af657612ae7575b50803b15610305578760009161296a93838a8a51968795869485936388ba030160e01b855284016121be565b03925af18015612adc57612acd575b505b61298d866118dc896118dc8c8861222e565b94808c848d6002541691885193848092638da5cb5b60e01b82525afa918215612ac3578492612aa4575b50803b15612aa05760248492898f938a519687958694630bd1c52160e11b865216908401525af18015612a9657908291612a82575b508b9052601082524284822055823411612a51575b5082519a8b528a01528801526060870152608086015260a08501521660c08301524260e08301527fa6d8e89897dc113222521941267dc99767dd49da6fef55c5bdbe3fa868c4f4926101003393a4565b80808080612a5f873461222e565b818115612a79575b3390f1612a01578351903d90823e3d90fd5b506108fc612a67565b612a8b9061218a565b611a555780386129ec565b85513d84823e3d90fd5b8380fd5b612abc919250853d87116106dd576106ce818361219d565b90386129b7565b87513d86823e3d90fd5b612ad69061218a565b38612979565b85513d6000823e3d90fd5b612af09061218a565b3861293e565b87513d6000823e3d90fd5b975061297b915050565b50811515612900565b612b209096919661218a565b94386128c0565b83513d89823e3d90fd5b8580fd5b505163356680b760e01b8152fd5b809250878092503d8311612b73575b612b5c818361219d565b81010312612b6f57518a9061287f612875565b8680fd5b503d612b52565b90508481813d8311612ba0575b612b91818361219d565b81010312612b31575138612850565b503d612b87565b82513d88823e3d90fd5b6001600160a01b039081166000818152600f602090815260408083208684528252808320969094168083529581528382208281556001018290558351828152908101919091524292810192909252919291907f2d7a7e3fdc50a32b6eed063e37a7963052f94463810cd861d2eefd4d90f2891e90606090a4565b6001600160a01b039081166000818152600f6020908152604080832086845282528083209690941680835295815290839020868155600101879055825195865285019590955242908401529290917f2d7a7e3fdc50a32b6eed063e37a7963052f94463810cd861d2eefd4d90f2891e90606090a4565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3565b9092939160065491612cfc8560009461231a565b95839560018060a01b038094169081151580612e39575b612d5e575b5050505060025416803b15611a635781859160046040518094819363d3bed04d60e01b83525af18015611a5857612d4d575050565b612d57829161218a565b611a555750565b612d7a919293989750612d739060075461231a565b809761222e565b968360025416803b15612b3157858891602460405180948193630bd1c52160e11b83528860048401525af18015612e2e57612df6575b506060847f8aabde3cfd5b1ed1150f67d8845bab5e634a56fcc5b12f3ae2714473bbf8fec39281604051968b88521660208701524260408701521693a338808080612d18565b847f8aabde3cfd5b1ed1150f67d8845bab5e634a56fcc5b12f3ae2714473bbf8fec39296612e2560609361218a565b96925050612db0565b6040513d88823e3d90fd5b50848316821415612d13565b8151919060418303612e7657612e6f92506020820151906060604084015193015160001a90612f06565b9192909190565b505060009160029190565b6004811015612ef05780612e93575050565b60018103612ead5760405163f645eedf60e01b8152600490fd5b60028103612ece5760405163fce698f760e01b815260048101839052602490fd5b600314612ed85750565b602490604051906335e2f38360e21b82526004820152fd5b634e487b7160e01b600052602160045260246000fd5b91906fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411612f8057926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612f745780516001600160a01b03811615612f6b57918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea26469706673582212200fe76df23f498e59d9ae679e368e793332948712bc57a35d78c605de868d60ba64736f6c634300081600330000000000000000000000002697efce331b946d1a0ceb2bb0db5989ceafddd200000000000000000000000025b6e6577c47c2ee26b3fc8cad5795b50b1dbcdf000000000000000000000000a8d3501387a72f78a7e88a1008e67b4dccad669a