0 txs
58 calls
constructor
No constructor.
functions
crossmintAddress
viewfunction crossmintAddress() view returns (address)
getNFTSaleDetails
viewfunction getNFTSaleDetails(uint256 _saleId) view returns (tuple)
getSupportedTokens
viewfunction getSupportedTokens() view returns (address[])
nftSales
viewfunction nftSales(uint256) view returns (address NFTContract, string tokenMetadata, uint256 quantity, uint256 soldQuantity, bool isActive, uint256 USDPrice, uint256 totalLimitPerUser, uint256 onetimeLimitPerUser)
owner
viewfunction owner() view returns (address)
saleCounter
viewfunction saleCounter() view returns (uint256)
trustedForwarder
viewfunction trustedForwarder() view returns (address)
uniswapHelper
viewfunction uniswapHelper() view returns (address)
usersBoughtQuantity
viewfunction usersBoughtQuantity(address, uint256) view returns (uint256)
verification
viewfunction verification() view returns (address)
addPaymentToken
nonpayablefunction addPaymentToken(address _token)
buyNFT
payablefunction buyNFT(uint256 _saleId, uint256 _quantity, address _paymentToken, uint256 _expectedTokenAmount, uint256 _slippageTolerance) payable
buyNFTFromCrossmint
nonpayablefunction buyNFTFromCrossmint(uint256 _saleId, address _receiver, uint256 _quantity)
changeCrossmintAddress
nonpayablefunction changeCrossmintAddress(address _crossmintAddress)
delistNFTFromSale
nonpayablefunction delistNFTFromSale(uint256 _saleId)
initialize
nonpayablefunction initialize(address _kycAmlVerification, address _uniswapHelper, address _crossmintAddress, address[] _paymentTokens, address _owner)
listNFTForSale
nonpayablefunction listNFTForSale(address _NFTContract, string _tokenMetadata, uint256 _quantity, bool _status, uint256 _USDPrice, uint256 _totalLimitPerUser, uint256 _onetimeLimitPerUser)
mintNFTs
nonpayablefunction mintNFTs(address _nftContract, address _to, uint256 _quantity, string _metadata, uint256 _timestamp, bytes _signature)
removePaymentToken
nonpayablefunction removePaymentToken(address _token)
renewNFTSale
nonpayablefunction renewNFTSale(uint256 _saleId)
renounceOwnership
nonpayablefunction renounceOwnership()
setTrustedForwarder
nonpayablefunction setTrustedForwarder(address _trustedForwarder)
stopNFTSale
nonpayablefunction stopNFTSale(uint256 _saleId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateVerificationContractAddress
nonpayablefunction updateVerificationContractAddress(address _newVerification)
events
Initialized
event Initialized(uint64 version)
NFTBought
event NFTBought(uint256 saleId, address buyer, uint256 USDAmount, address paymentToken, uint256 paymentTokenAmount, address NFTContract, uint256 quantity)
NFTBoughtFromCrossmint
event NFTBoughtFromCrossmint(uint256 saleId, address buyer, uint256 USDAmount, address paymentToken, uint256 paymentTokenAmount, address NFTContract, uint256 quantity)
NFTDelisted
event NFTDelisted(uint256 indexed saleId)
NFTListedForSale
event NFTListedForSale(uint256 indexed saleId, address indexed NFTContract, string tokenMetadata, uint256 quantity, bool status, uint256 USDPrice, uint256 totalLimitPerUser, uint256 onetimeLimitPerUser)
NFTSaleRenewed
event NFTSaleRenewed(uint256 indexed saleId)
NFTSaleStopped
event NFTSaleStopped(uint256 indexed saleId)
NFTsMinted
event NFTsMinted(address indexed nftContract, address indexed to, uint256 quantity, string metadata)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PaymentTokenAdded
event PaymentTokenAdded(address token)
PaymentTokenRemoved
event PaymentTokenRemoved(address token)
VerificationAddressUpdated
event VerificationAddressUpdated(address newKYCAMLVerification)
errors
ContractCannotReceiveETH
error ContractCannotReceiveETH()
DuplicateAddress
error DuplicateAddress()
ETHNotAllowedWithTokenPayment
error ETHNotAllowedWithTokenPayment()
ETHSendFailed
error ETHSendFailed()
expectedTokenAmountExceedsDeviation
error expectedTokenAmountExceedsDeviation()
InsufflientETHSent
error InsufflientETHSent()
InvalidAddress
error InvalidAddress()
InvalidExpectedAmount
error InvalidExpectedAmount()
InvalidInitialization
error InvalidInitialization()
InvalidPrice
error InvalidPrice()
InvalidQuantity
error InvalidQuantity()
InvalidSender
error InvalidSender()
InvalidSlippage
error InvalidSlippage()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SaleAlreadyActive
error SaleAlreadyActive()
SaleAlreadyStarted
error SaleAlreadyStarted()
SaleAlreadyStopped
error SaleAlreadyStopped()
SaleDoesNotExist
error SaleDoesNotExist()
TokenAlreadySupported
error TokenAlreadySupported()
TokenNotSupported
error TokenNotSupported()
creation bytecode
0x608060405234801561000f575f5ffd5b5061001e61002360201b60201c565b610183565b5f61003261012160201b60201c565b9050805f0160089054906101000a900460ff161561007c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff161461011e5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051610115919061016a565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b61016481610148565b82525050565b5f60208201905061017d5f83018461015b565b92915050565b61476c806101905f395ff3fe608060405260043610610165575f3560e01c80637e91f6fe116100d0578063bc7a87e811610089578063da74222811610063578063da742228146104e4578063e3b1a2b31461050c578063e60ebe4e14610534578063f2fde38b1461055c57610165565b8063bc7a87e814610442578063ce177cfa1461047e578063d3c7c2c7146104ba57610165565b80637e91f6fe1461035c57806380ae160b146103845780638da5cb5b146103ac578063a5125421146103d6578063b50dfff9146103fe578063b69e1f941461042657610165565b806359c315f91161012257806359c315f91461027a5780635b2a55e4146102a25780636e467243146102cc578063715018a6146102f45780637d8133e01461030a5780637da0a8771461033257610165565b80630387b0a2146101695780632ffb56b71461019357806341258398146101bb57806344432bfc146101e55780634a7dc8e0146102285780634ffe2a8b14610250575b5f5ffd5b348015610174575f5ffd5b5061017d610584565b60405161018a9190613267565b60405180910390f35b34801561019e575f5ffd5b506101b960048036038101906101b49190613486565b61058a565b005b3480156101c6575f5ffd5b506101cf610815565b6040516101dc919061354e565b60405180910390f35b3480156101f0575f5ffd5b5061020b60048036038101906102069190613567565b61083a565b60405161021f989796959493929190613601565b60405180910390f35b348015610233575f5ffd5b5061024e60048036038101906102499190613684565b61092f565b005b34801561025b575f5ffd5b50610264610a10565b604051610271919061354e565b60405180910390f35b348015610285575f5ffd5b506102a0600480360381019061029b9190613567565b610a35565b005b3480156102ad575f5ffd5b506102b6610b3d565b6040516102c3919061354e565b60405180910390f35b3480156102d7575f5ffd5b506102f260048036038101906102ed9190613567565b610b62565b005b3480156102ff575f5ffd5b50610308610cb3565b005b348015610315575f5ffd5b50610330600480360381019061032b91906136af565b610cc6565b005b34801561033d575f5ffd5b50610346610ce6565b604051610353919061354e565b60405180910390f35b348015610367575f5ffd5b50610382600480360381019061037d9190613684565b610d0b565b005b34801561038f575f5ffd5b506103aa60048036038101906103a5919061379d565b610df2565b005b3480156103b7575f5ffd5b506103c061105b565b6040516103cd919061354e565b60405180910390f35b3480156103e1575f5ffd5b506103fc60048036038101906103f79190613684565b611090565b005b348015610409575f5ffd5b50610424600480360381019061041f9190613684565b611111565b005b610440600480360381019061043b919061385e565b6111c1565b005b34801561044d575f5ffd5b5061046860048036038101906104639190613567565b6111e5565b60405161047591906139f7565b60405180910390f35b348015610489575f5ffd5b506104a4600480360381019061049f9190613a17565b61138e565b6040516104b19190613267565b60405180910390f35b3480156104c5575f5ffd5b506104ce6113ae565b6040516104db9190613afd565b60405180910390f35b3480156104ef575f5ffd5b5061050a60048036038101906105059190613684565b611438565b005b348015610517575f5ffd5b50610532600480360381019061052d9190613be1565b611483565b005b34801561053f575f5ffd5b5061055a60048036038101906105559190613567565b61160c565b005b348015610567575f5ffd5b50610582600480360381019061057d9190613684565b611713565b005b60035481565b610592611797565b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036105f7576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f85148061060457505f82145b8061060e57505f81145b8061061857508181115b1561064f576040517f524f409b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610687576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919061069990613ca1565b91905055506040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020015f815260200185151581526020018481526020018381526020018281525060015f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101908161075c9190613ee5565b5060408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690831515021790555060a0820151816005015560c0820151816006015560e082015181600701559050508673ffffffffffffffffffffffffffffffffffffffff166003547f7c51bddc35de54e1e242cd99b16a92f78022df5a34bf7500effb1378c09194af88888888888860405161080496959493929190613fb4565b60405180910390a350505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461087e90613d15565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90613d15565b80156108f55780601f106108cc576101008083540402835291602001916108f5565b820191905f5260205f20905b8154815290600101906020018083116108d857829003601f168201915b505050505090806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154908060070154905088565b610937611797565b6109408161181e565b15610977576040517fc78e82ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa317c10673baf4f03b3c1041bd5ddbb537d0333a86fec3607c75f9dbb630f48f81604051610a05919061354e565b60405180910390a150565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a3d611797565b5f60015f8381526020019081526020015f206002015403610a8a576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f8281526020019081526020015f206004015f9054906101000a900460ff1615610ae2576040517fe794df0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805f8381526020019081526020015f206004015f6101000a81548160ff021916908315150217905550807f65680c05480932b59a3a5950a95b778a9402b1c0a40486fc4b1f65a30d83899060405160405180910390a250565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b6a611797565b5f60015f8381526020019081526020015f206002015403610bb7576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8381526020019081526020015f20600301541115610c05576040517f522cb3fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f8281526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f610c4b91906131a1565b600282015f9055600382015f9055600482015f6101000a81549060ff0219169055600582015f9055600682015f9055600782015f90555050807fc0c55a6edead4433d18cb1e287a0a20a2fa003a6f483bc9823d2e504d70d1c6760405160405180910390a250565b610cbb611797565b610cc45f6118c4565b565b610cce611995565b610cd98383836119e9565b610ce1611dce565b505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d13611797565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d78576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3349a3853122d0352064bb1f1d6e9853ebf241489b031e96dc02aa23e4ae2e7b81604051610de7919061354e565b60405180910390a150565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480610e5757505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610e8e576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8403610ec7576040517f524f409b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c38ca3430888888888846604051602001610f219796959493929190614064565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401610f55929190614156565b5f604051808303815f87803b158015610f6c575f5ffd5b505af1158015610f7e573d5f5f3e3d5ffd5b505050508573ffffffffffffffffffffffffffffffffffffffff1663f5972ddd8686866040518463ffffffff1660e01b8152600401610fbf93929190614184565b5f604051808303815f87803b158015610fd6575f5ffd5b505af1158015610fe8573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f9cb129951a701ece6ffa0eb3defecd7cf1d7dace77f87efd9baa64405fb45f18868660405161104b9291906141c0565b60405180910390a3505050505050565b5f5f611065611de5565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b611098611797565b6110a181611e0c565b6110d7576040517f3dd1b30500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f85a3e72f8dd6db3794f93109c3c5f5b79d6112f6979431c45f98b26134b42af281604051611106919061354e565b60405180910390a150565b611119611797565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361117e576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111c9611995565b6111d68585858585611f98565b6111de611dce565b5050505050565b6111ed6131de565b5f60015f8481526020019081526020015f20600201540361123a576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f8381526020019081526020015f20604051806101000160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180546112bb90613d15565b80601f01602080910402602001604051908101604052809291908181526020018280546112e790613d15565b80156113325780601f1061130957610100808354040283529160200191611332565b820191905f5260205f20905b81548152906001019060200180831161131557829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482015f9054906101000a900460ff1615151515815260200160058201548152602001600682015481526020016007820154815250509050919050565b6002602052815f5260405f20602052805f5260405f205f91509150505481565b60605f80548060200260200160405190810160405280929190818152602001828054801561142e57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116113e5575b5050505050905090565b611440611797565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61148c6124ed565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156114d45750825b90505f60018367ffffffffffffffff1614801561150757505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015611515575080155b1561154c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611599576001855f0160086101000a81548160ff0219169083151502179055505b6115a68a8a8a8a8a612514565b8315611600575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516115f7919061423a565b60405180910390a15b50505050505050505050565b611614611797565b5f60015f8381526020019081526020015f206002015403611661576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f8281526020019081526020015f206004015f9054906101000a900460ff166116b8576040517f78cd3ae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8381526020019081526020015f206004015f6101000a81548160ff021916908315150217905550807fa1d67366e1e19923b39251bdfef1e7d4be22b13b5909fd335de8e219d0804df560405160405180910390a250565b61171b611797565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361178b575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611782919061354e565b60405180910390fd5b611794816118c4565b50565b61179f612530565b73ffffffffffffffffffffffffffffffffffffffff166117bd61105b565b73ffffffffffffffffffffffffffffffffffffffff161461181c576117e0612530565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611813919061354e565b60405180910390fd5b565b5f5f5f8054905090505f5f90505b818110156118b9578373ffffffffffffffffffffffffffffffffffffffff165f828154811061185e5761185d614253565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036118ac576001925050506118bf565b808060010191505061182c565b505f9150505b919050565b5f6118cd611de5565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f61199e6125ac565b90506002815f0154036119dd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002815f018190555050565b5f6119f2612530565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a59576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611adf576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8681526020019081526020015f2090505f816002015403611b30576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806004015f9054906101000a900460ff16611b77576040517f78cd3ae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f831480611b97575080600301548160020154611b949190614280565b83115b80611ba55750806007015483115b15611bdc576040517f524f409b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc06e81d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6b91906142c7565b90505f848360050154611c7e91906142f2565b9050611cad8430838573ffffffffffffffffffffffffffffffffffffffff166125d3909392919063ffffffff16565b84836003015f828254611cc09190614333565b92505081905550611cd18282612655565b825f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f5972ddd8787866001016040518463ffffffff1660e01b8152600401611d33939291906143e7565b5f604051808303815f87803b158015611d4a575f5ffd5b505af1158015611d5c573d5f5f3e3d5ffd5b505050507f63283f7a7cc750062bcd0676724d5ad05f2fa23df7619d9bde3f8abc776575d18787838585885f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b604051611dbd9796959493929190614423565b60405180910390a150505050505050565b5f611dd76125ac565b90506001815f018190555050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f5f5f8054905090505f5f90505b81811015611f8d578373ffffffffffffffffffffffffffffffffffffffff165f8281548110611e4c57611e4b614253565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f80575f60015f80549050611ea19190614280565b81548110611eb257611eb1614253565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f8281548110611eed57611eec614253565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f805480611f4357611f42614490565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055600192505050611f93565b8080600101915050611e1a565b505f9150505b919050565b5f611fa1612530565b9050611fac8461181e565b611fe2576040517f3dd1b30500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f821480611ff15750610bb882115b15612028576040517f334ee9a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303612061576040517f843a5a1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561209c57505f34115b156120d3576040517f4935134600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8881526020019081526020015f2090505f816002015403612124576040517f1a6cb34500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806004015f9054906101000a900460ff1661216b576040517f78cd3ae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86148061218b5750806003015481600201546121889190614280565b86115b806121995750806007015486115b806121fe5750806006015460025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f2054876121fc9190614333565b115b15612235576040517f524f409b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86826005015461224691906142f2565b90505f81905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361597eab85846040518363ffffffff1660e01b81526004016122a89291906144bd565b5f6040518083038186803b1580156122be575f5ffd5b505afa1580156122d0573d5f5f3e3d5ffd5b5050505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc06e81d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561233e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236291906142c7565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146124c75760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d055108888489896107086040518663ffffffff1660e01b81526004016123f895949392919061452c565b5f6040518083038186803b15801561240e575f5ffd5b505afa158015612420573d5f5f3e3d5ffd5b5050505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c273c26838989896040518563ffffffff1660e01b8152600401612484949392919061457d565b6020604051808303815f875af11580156124a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c491906145d4565b90505b6124d28782866128c4565b6124e28989898485878a8a612a1d565b505050505050505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b61251c612c2a565b6125298585858585612c6a565b5050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612591575060145f36905010155b156125a557601436033560601c90506125a9565b3390505b90565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00905090565b61264f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612608939291906145ff565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fa0565b50505050565b5f5f5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637809b47b6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156126c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e69190614634565b509250925092505f61271082866126fd91906142f2565b61270791906146c5565b90505f81866127169190614280565b90505f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612864575f8573ffffffffffffffffffffffffffffffffffffffff168360405161277090614722565b5f6040518083038185875af1925050503d805f81146127aa576040519150601f19603f3d011682016040523d82523d5f602084013e6127af565b606091505b505090505f8573ffffffffffffffffffffffffffffffffffffffff16836040516127d890614722565b5f6040518083038185875af1925050503d805f8114612812576040519150601f19603f3d011682016040523d82523d5f602084013e612817565b606091505b50509050811580612826575080155b1561285d576040517fcef4eed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506128bb565b61288f85838973ffffffffffffffffffffffffffffffffffffffff1661303b9092919063ffffffff16565b6128ba84828973ffffffffffffffffffffffffffffffffffffffff1661303b9092919063ffffffff16565b5b50505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129ea5781341015612931576040517f0c38d30500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b813411156129e5575f8173ffffffffffffffffffffffffffffffffffffffff16833461295d9190614280565b60405161296990614722565b5f6040518083038185875af1925050503d805f81146129a3576040519150601f19603f3d011682016040523d82523d5f602084013e6129a8565b606091505b50509050806129e3576040517fcef4eed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612a18565b612a178130848673ffffffffffffffffffffffffffffffffffffffff166125d3909392919063ffffffff16565b5b505050565b86816003015f828254612a309190614333565b9250508190555060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334dfbfee83856040518363ffffffff1660e01b8152600401612a939291906144bd565b5f604051808303815f87803b158015612aaa575f5ffd5b505af1158015612abc573d5f5f3e3d5ffd5b505050508660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a81526020019081526020015f205f828254612b1b9190614333565b92505081905550612b2c8685612655565b805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f5972ddd8389846001016040518463ffffffff1660e01b8152600401612b8e939291906143e7565b5f604051808303815f87803b158015612ba5575f5ffd5b505af1158015612bb7573d5f5f3e3d5ffd5b505050507ff10061092bbb1af405b21f944d5a3fc967534deaabe2a030b36dfdd9e565d1e68883858989865f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d604051612c189796959493929190614423565b60405180910390a15050505050505050565b612c326130ba565b612c68576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612c72612c2a565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612cd757505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612d0d57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612d4357505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612d7a576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d83816130d8565b612d8b6130ec565b8460045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f825190505f5f90505b81811015612f97575f5f90505b81811015612f1057848181518110612e7d57612e7c614253565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16858381518110612eae57612ead614253565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603612f03576040517f0a47c55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8080600101915050612e62565b505f848281518110612f2557612f24614253565b5b6020026020010151908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612e55565b50505050505050565b5f5f60205f8451602086015f885af180612fbf576040513d5f823e3d81fd5b3d92505f519150505f8214612fd8576001811415612ff3565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561303557836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161302c919061354e565b60405180910390fd5b50505050565b6130b5838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161306e9291906144bd565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612fa0565b505050565b5f6130c36124ed565b5f0160089054906101000a900460ff16905090565b6130e0612c2a565b6130e9816130fe565b50565b6130f4612c2a565b6130fc613182565b565b613106612c2a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613176575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161316d919061354e565b60405180910390fd5b61317f816118c4565b50565b61318a612c2a565b5f6131936125ac565b90506001815f018190555050565b5080546131ad90613d15565b5f825580601f106131be57506131db565b601f0160209004905f5260205f20908101906131da9190613234565b5b50565b6040518061010001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81525090565b5b8082111561324b575f815f905550600101613235565b5090565b5f819050919050565b6132618161324f565b82525050565b5f60208201905061327a5f830184613258565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132ba82613291565b9050919050565b6132ca816132b0565b81146132d4575f5ffd5b50565b5f813590506132e5816132c1565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613339826132f3565b810181811067ffffffffffffffff8211171561335857613357613303565b5b80604052505050565b5f61336a613280565b90506133768282613330565b919050565b5f67ffffffffffffffff82111561339557613394613303565b5b61339e826132f3565b9050602081019050919050565b828183375f83830152505050565b5f6133cb6133c68461337b565b613361565b9050828152602081018484840111156133e7576133e66132ef565b5b6133f28482856133ab565b509392505050565b5f82601f83011261340e5761340d6132eb565b5b813561341e8482602086016133b9565b91505092915050565b6134308161324f565b811461343a575f5ffd5b50565b5f8135905061344b81613427565b92915050565b5f8115159050919050565b61346581613451565b811461346f575f5ffd5b50565b5f813590506134808161345c565b92915050565b5f5f5f5f5f5f5f60e0888a0312156134a1576134a0613289565b5b5f6134ae8a828b016132d7565b975050602088013567ffffffffffffffff8111156134cf576134ce61328d565b5b6134db8a828b016133fa565b96505060406134ec8a828b0161343d565b95505060606134fd8a828b01613472565b945050608061350e8a828b0161343d565b93505060a061351f8a828b0161343d565b92505060c06135308a828b0161343d565b91505092959891949750929550565b613548816132b0565b82525050565b5f6020820190506135615f83018461353f565b92915050565b5f6020828403121561357c5761357b613289565b5b5f6135898482850161343d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6135c482613592565b6135ce818561359c565b93506135de8185602086016135ac565b6135e7816132f3565b840191505092915050565b6135fb81613451565b82525050565b5f610100820190506136155f83018b61353f565b8181036020830152613627818a6135ba565b90506136366040830189613258565b6136436060830188613258565b61365060808301876135f2565b61365d60a0830186613258565b61366a60c0830185613258565b61367760e0830184613258565b9998505050505050505050565b5f6020828403121561369957613698613289565b5b5f6136a6848285016132d7565b91505092915050565b5f5f5f606084860312156136c6576136c5613289565b5b5f6136d38682870161343d565b93505060206136e4868287016132d7565b92505060406136f58682870161343d565b9150509250925092565b5f67ffffffffffffffff82111561371957613718613303565b5b613722826132f3565b9050602081019050919050565b5f61374161373c846136ff565b613361565b90508281526020810184848401111561375d5761375c6132ef565b5b6137688482856133ab565b509392505050565b5f82601f830112613784576137836132eb565b5b813561379484826020860161372f565b91505092915050565b5f5f5f5f5f5f60c087890312156137b7576137b6613289565b5b5f6137c489828a016132d7565b96505060206137d589828a016132d7565b95505060406137e689828a0161343d565b945050606087013567ffffffffffffffff8111156138075761380661328d565b5b61381389828a016133fa565b935050608061382489828a0161343d565b92505060a087013567ffffffffffffffff8111156138455761384461328d565b5b61385189828a01613770565b9150509295509295509295565b5f5f5f5f5f60a0868803121561387757613876613289565b5b5f6138848882890161343d565b95505060206138958882890161343d565b94505060406138a6888289016132d7565b93505060606138b78882890161343d565b92505060806138c88882890161343d565b9150509295509295909350565b6138de816132b0565b82525050565b5f82825260208201905092915050565b5f6138fe82613592565b61390881856138e4565b93506139188185602086016135ac565b613921816132f3565b840191505092915050565b6139358161324f565b82525050565b61394481613451565b82525050565b5f61010083015f8301516139605f8601826138d5565b506020830151848203602086015261397882826138f4565b915050604083015161398d604086018261392c565b5060608301516139a0606086018261392c565b5060808301516139b3608086018261393b565b5060a08301516139c660a086018261392c565b5060c08301516139d960c086018261392c565b5060e08301516139ec60e086018261392c565b508091505092915050565b5f6020820190508181035f830152613a0f818461394a565b905092915050565b5f5f60408385031215613a2d57613a2c613289565b5b5f613a3a858286016132d7565b9250506020613a4b8582860161343d565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f613a8983836138d5565b60208301905092915050565b5f602082019050919050565b5f613aab82613a55565b613ab58185613a5f565b9350613ac083613a6f565b805f5b83811015613af0578151613ad78882613a7e565b9750613ae283613a95565b925050600181019050613ac3565b5085935050505092915050565b5f6020820190508181035f830152613b158184613aa1565b905092915050565b5f67ffffffffffffffff821115613b3757613b36613303565b5b602082029050602081019050919050565b5f5ffd5b5f613b5e613b5984613b1d565b613361565b90508083825260208201905060208402830185811115613b8157613b80613b48565b5b835b81811015613baa5780613b9688826132d7565b845260208401935050602081019050613b83565b5050509392505050565b5f82601f830112613bc857613bc76132eb565b5b8135613bd8848260208601613b4c565b91505092915050565b5f5f5f5f5f60a08688031215613bfa57613bf9613289565b5b5f613c07888289016132d7565b9550506020613c18888289016132d7565b9450506040613c29888289016132d7565b935050606086013567ffffffffffffffff811115613c4a57613c4961328d565b5b613c5688828901613bb4565b9250506080613c67888289016132d7565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cab8261324f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cdd57613cdc613c74565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d2c57607f821691505b602082108103613d3f57613d3e613ce8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613da17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d66565b613dab8683613d66565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613de6613de1613ddc8461324f565b613dc3565b61324f565b9050919050565b5f819050919050565b613dff83613dcc565b613e13613e0b82613ded565b848454613d72565b825550505050565b5f5f905090565b613e2a613e1b565b613e35818484613df6565b505050565b5b81811015613e5857613e4d5f82613e22565b600181019050613e3b565b5050565b601f821115613e9d57613e6e81613d45565b613e7784613d57565b81016020851015613e86578190505b613e9a613e9285613d57565b830182613e3a565b50505b505050565b5f82821c905092915050565b5f613ebd5f1984600802613ea2565b1980831691505092915050565b5f613ed58383613eae565b9150826002028217905092915050565b613eee82613592565b67ffffffffffffffff811115613f0757613f06613303565b5b613f118254613d15565b613f1c828285613e5c565b5f60209050601f831160018114613f4d575f8415613f3b578287015190505b613f458582613eca565b865550613fac565b601f198416613f5b86613d45565b5f5b82811015613f8257848901518255600182019150602085019450602081019050613f5d565b86831015613f9f5784890151613f9b601f891682613eae565b8355505b6001600288020188555050505b505050505050565b5f60c0820190508181035f830152613fcc81896135ba565b9050613fdb6020830188613258565b613fe860408301876135f2565b613ff56060830186613258565b6140026080830185613258565b61400f60a0830184613258565b979650505050505050565b7f6d696e744e4654730000000000000000000000000000000000000000000000005f82015250565b5f61404e60088361359c565b91506140598261401a565b602082019050919050565b5f610100820190506140785f83018a61353f565b818103602083015261408981614042565b9050614098604083018961353f565b6140a5606083018861353f565b6140b26080830187613258565b81810360a08301526140c481866135ba565b90506140d360c0830185613258565b6140e060e0830184613258565b98975050505050505050565b5f819050919050565b6140fe816140ec565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f61412882614104565b614132818561410e565b93506141428185602086016135ac565b61414b816132f3565b840191505092915050565b5f6040820190506141695f8301856140f5565b818103602083015261417b818461411e565b90509392505050565b5f6060820190506141975f83018661353f565b6141a46020830185613258565b81810360408301526141b681846135ba565b9050949350505050565b5f6040820190506141d35f830185613258565b81810360208301526141e581846135ba565b90509392505050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f61422461421f61421a846141ee565b613dc3565b6141f7565b9050919050565b6142348161420a565b82525050565b5f60208201905061424d5f83018461422b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61428a8261324f565b91506142958361324f565b92508282039050818111156142ad576142ac613c74565b5b92915050565b5f815190506142c1816132c1565b92915050565b5f602082840312156142dc576142db613289565b5b5f6142e9848285016142b3565b91505092915050565b5f6142fc8261324f565b91506143078361324f565b92508282026143158161324f565b9150828204841483151761432c5761432b613c74565b5b5092915050565b5f61433d8261324f565b91506143488361324f565b92508282019050808211156143605761435f613c74565b5b92915050565b5f815461437281613d15565b61437c818661359c565b9450600182165f811461439657600181146143ac576143de565b60ff1983168652811515602002860193506143de565b6143b585613d45565b5f5b838110156143d6578154818901526001820191506020810190506143b7565b808801955050505b50505092915050565b5f6060820190506143fa5f83018661353f565b6144076020830185613258565b81810360408301526144198184614366565b9050949350505050565b5f60e0820190506144365f83018a613258565b614443602083018961353f565b6144506040830188613258565b61445d606083018761353f565b61446a6080830186613258565b61447760a083018561353f565b61448460c0830184613258565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6040820190506144d05f83018561353f565b6144dd6020830184613258565b9392505050565b5f819050919050565b5f63ffffffff82169050919050565b5f61451661451161450c846144e4565b613dc3565b6144ed565b9050919050565b614526816144fc565b82525050565b5f60a08201905061453f5f83018861353f565b61454c6020830187613258565b6145596040830186613258565b6145666060830185613258565b614573608083018461451d565b9695505050505050565b5f6080820190506145905f830187613258565b61459d602083018661353f565b6145aa6040830185613258565b6145b76060830184613258565b95945050505050565b5f815190506145ce81613427565b92915050565b5f602082840312156145e9576145e8613289565b5b5f6145f6848285016145c0565b91505092915050565b5f6060820190506146125f83018661353f565b61461f602083018561353f565b61462c6040830184613258565b949350505050565b5f5f5f5f6080858703121561464c5761464b613289565b5b5f614659878288016142b3565b945050602061466a878288016142b3565b935050604061467b878288016145c0565b925050606061468c878288016145c0565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6146cf8261324f565b91506146da8361324f565b9250826146ea576146e9614698565b5b828204905092915050565b5f81905092915050565b50565b5f61470d5f836146f5565b9150614718826146ff565b5f82019050919050565b5f61472c82614702565b915081905091905056fea26469706673582212201051bca658f5aeac1a662079b4345dc8414fc59a77c89349b01ec687dbc299d564736f6c634300081c0033