Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell NFT Using B... | 14072253 | 1036 days ago | IN | 0 ETH | 0.02784744 | ||||
Buy NFT Using Se... | 13976358 | 1051 days ago | IN | 0.0369 ETH | 0.01672308 | ||||
Buy NFT Using Se... | 13975766 | 1051 days ago | IN | 0.025 ETH | 0.01454359 | ||||
Buy NFT Using Se... | 13975766 | 1051 days ago | IN | 0.025 ETH | 0.01734766 | ||||
Set Fee | 13947119 | 1056 days ago | IN | 0 ETH | 0.00541606 | ||||
Set Project Allo... | 13947119 | 1056 days ago | IN | 0 ETH | 0.00541849 | ||||
Set Fee | 13947051 | 1056 days ago | IN | 0 ETH | 0.00634415 | ||||
Set Project Allo... | 13947051 | 1056 days ago | IN | 0 ETH | 0.00639372 | ||||
Set Fee | 13935015 | 1058 days ago | IN | 0 ETH | 0.00574842 | ||||
Set Fee | 13935015 | 1058 days ago | IN | 0 ETH | 0.00906964 | ||||
Set Project Allo... | 13935010 | 1058 days ago | IN | 0 ETH | 0.0094703 | ||||
Set Project Allo... | 13916793 | 1060 days ago | IN | 0 ETH | 0.00371045 | ||||
Set Fee | 13916793 | 1060 days ago | IN | 0 ETH | 0.00370878 | ||||
Accept Ownership | 13916790 | 1060 days ago | IN | 0 ETH | 0.00237286 | ||||
Transfer Ownersh... | 13897490 | 1063 days ago | IN | 0 ETH | 0.00602844 | ||||
Buy NFT Using Se... | 13897473 | 1063 days ago | IN | 0.089 ETH | 0.01403557 | ||||
Set Project Allo... | 13889433 | 1065 days ago | IN | 0 ETH | 0.00312368 | ||||
Set Fee | 13889433 | 1065 days ago | IN | 0 ETH | 0.00308279 | ||||
Set Project Allo... | 13885409 | 1065 days ago | IN | 0 ETH | 0.00353497 | ||||
Set Fee | 13885409 | 1065 days ago | IN | 0 ETH | 0.00353429 | ||||
Set Fee | 13245518 | 1166 days ago | IN | 0 ETH | 0.00250745 | ||||
Cancel Offchain ... | 13245168 | 1166 days ago | IN | 0 ETH | 0.00348512 | ||||
Sell NFT Using B... | 13245053 | 1166 days ago | IN | 0 ETH | 0.01128568 | ||||
Set Fee | 13244396 | 1166 days ago | IN | 0 ETH | 0.0036213 | ||||
Set Project Allo... | 13244388 | 1166 days ago | IN | 0 ETH | 0.00391662 |
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
BlockStore
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-17 */ pragma solidity ^0.8.0; /** NFT BlockStore Made with <3 by InfernalToast */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md /// Note: the ERC-165 identifier for this interface is 0x80ac58cd interface ERC721 /* is ERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "" /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external payable; /// @notice Set or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external payable; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets. /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators. /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface ERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } interface ERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the /// recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return /// of other than the magic value MUST result in the transaction being reverted. /// @notice The contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4); } interface ProjectBasedNFT { function tokenIdToProjectId(uint256 tokenId) external returns(uint256); } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ECRecovery { /** * @dev Recover signer address from a message by using their signature * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address. * @param sig bytes signature, the signature is generated using web3.eth.sign() */ function recover(bytes32 hash, bytes memory sig) internal pure returns (address) { bytes32 r; bytes32 s; uint8 v; //Check the signature length if (sig.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } // Version of signature should be 27 or 28, but 0 and 1 are also possible versions if (v < 27) { v += 27; } // If the version is correct return the signer address if (v != 27 && v != 28) { return (address(0)); } else { return ecrecover(hash, v, r, s); } } } /* An NFT exchange for ERC721 tokens Supports offchain sell orders Supports offchain buy orders */ contract BlockStore is Owned, ECRecovery { mapping (address => mapping(bytes32 => uint)) public burnedNonces; mapping(address => uint256) public _fee_pct; mapping(address => bool) public _allowedNFTContractAddress; address constant internal NATIVE_ETH = 0x0000000000000000000000000000000000000010; mapping (address => uint256) userSellOrderNonce; constructor( ) public { } function setFee( address projectContract, uint fee_pct ) public onlyOwner { require(fee_pct >= 0 && fee_pct <=1000); _fee_pct[projectContract] = fee_pct; } function setProjectAllowed( address projectContract, bool allow ) public onlyOwner { _allowedNFTContractAddress[projectContract] = allow; } //Do not allow ETH to enter receive() external payable { revert(); } fallback() external payable { revert(); } function getChainID() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } event nftSale(address sellerAddress, address buyerAddress, address nftContractAddress, uint256 nftTokenId, address currencyTokenAddress, uint256 currencyTokenAmount); event nonceBurned(address indexed signer, bytes32 nonce); struct OffchainOrder { address orderCreator; bool isSellOrder; //if false then its a buy order address nftContractAddress; uint256 nftTokenId; address currencyTokenAddress; //if 0x10 that means eth uint256 currencyTokenAmount; bytes32 nonce;//only used for sell orders and is random, used by front end to group offchain orders together uint256 expires; } bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256( "EIP712Domain(string contractName,string version,uint256 chainId,address verifyingContract)" ); function getBidDomainTypehash() public pure returns (bytes32) { return EIP712DOMAIN_TYPEHASH; } function getEIP712DomainHash(string memory contractName, string memory version, uint256 chainId, address verifyingContract) public pure returns (bytes32) { return keccak256(abi.encode( EIP712DOMAIN_TYPEHASH, keccak256(bytes(contractName)), keccak256(bytes(version)), chainId, verifyingContract )); } bytes32 constant ORDER_TYPEHASH = keccak256( "OffchainOrder(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress,uint256 currencyTokenAmount,bytes32 nonce,uint256 expires)" ); function getOrderTypehash() public pure returns (bytes32) { return ORDER_TYPEHASH; } function getOrderHash(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress, uint256 currencyTokenAmount,bytes32 nonce,uint256 expires) public pure returns (bytes32) { return keccak256(abi.encode( ORDER_TYPEHASH, orderCreator, isSellOrder, nftContractAddress, nftTokenId, currencyTokenAddress, currencyTokenAmount, nonce, expires )); } function getOrderTypedDataHash(address orderCreator,bool isSellOrder,address nftContractAddress,uint256 nftTokenId,address currencyTokenAddress, uint256 currencyTokenAmount,bytes32 nonce,uint256 expires) public view returns (bytes32) { bytes32 digest = keccak256(abi.encodePacked( "\x19\x01", getEIP712DomainHash('BlockStore','1',getChainID(),address(this)), getOrderHash(orderCreator,isSellOrder,nftContractAddress,nftTokenId,currencyTokenAddress,currencyTokenAmount,nonce,expires) )); return digest; } //require pre-approval from the buyer in the form of a personal sign of an offchain buy order function sellNFTUsingBuyOrder(address buyer, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory buyerSignature) public returns (bool){ require(_allowedNFTContractAddress[nftContractAddress],'Project not allowed'); //require personalsign from buyer to be submitted by seller bytes32 sigHash = getOrderTypedDataHash(buyer,false,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires); require(buyer == recover(sigHash,buyerSignature) , 'Invalid signature'); require(block.number < expires || expires == 0, 'bid expired'); require(burnedNonces[buyer][nonce] == 0, 'nonce already burned'); burnedNonces[buyer][nonce] = 0x1; ERC721(nftContractAddress).safeTransferFrom(msg.sender, buyer, nftTokenId); _transferCurrencyForSale(buyer,msg.sender,currencyToken,currencyAmount,_fee_pct[nftContractAddress]); emit nftSale(msg.sender, buyer, nftContractAddress, nftTokenId, currencyToken, currencyAmount); emit nonceBurned(buyer, nonce); return true; } function buyNFTUsingSellOrder(address seller, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory sellerSignature) payable public returns (bool){ require(_allowedNFTContractAddress[nftContractAddress],'Project not allowed'); //require personalsign from seller to be submitted by buyer bytes32 sigHash = getOrderTypedDataHash(seller,true,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires); require(seller == recover(sigHash,sellerSignature), 'Invalid signature'); require(block.number < expires || expires == 0, 'bid expired'); require(burnedNonces[seller][nonce] == 0, 'nonce already burned'); burnedNonces[seller][nonce] = 0x1; ERC721(nftContractAddress).safeTransferFrom(seller, msg.sender, nftTokenId); _transferCurrencyForSale(msg.sender,seller,currencyToken,currencyAmount,_fee_pct[nftContractAddress]); emit nftSale( seller, msg.sender, nftContractAddress, nftTokenId, currencyToken, currencyAmount); emit nonceBurned(seller, nonce); return true; } function _transferCurrencyForSale(address from, address to, address currencyToken, uint256 currencyAmount, uint256 feePct) internal returns (bool){ uint256 feeAmount = (currencyAmount * feePct)/(10000); if(currencyToken == NATIVE_ETH){ require(msg.value == currencyAmount,'incorrect payment value'); payable(to).transfer( currencyAmount - (feeAmount) ); payable(owner).transfer( feeAmount ); }else{ require(msg.value == 0,'incorrect payment value'); require( IERC20(currencyToken).transferFrom(from, to, currencyAmount - (feeAmount) ), 'unable to pay' ); require( IERC20(currencyToken).transferFrom(from, owner, feeAmount ), 'unable to pay' ); } return true; } function cancelOffchainOrder(address orderCreator, bool isSellOrder, address nftContractAddress, uint256 nftTokenId, address currencyToken, uint256 currencyAmount, bytes32 nonce, uint256 expires, bytes memory offchainSignature ) public returns (bool){ bytes32 sigHash = getOrderTypedDataHash(orderCreator,isSellOrder,nftContractAddress,nftTokenId,currencyToken,currencyAmount,nonce,expires); address recoveredSignatureSigner = recover(sigHash,offchainSignature); require(orderCreator == recoveredSignatureSigner, 'Invalid signature'); require(msg.sender == recoveredSignatureSigner, 'Not signature owner'); require(burnedNonces[orderCreator][nonce] == 0, 'Nonce already burned'); burnedNonces[orderCreator][nonce] = 0x2; emit nonceBurned(orderCreator, nonce); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sellerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"buyerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"nftContractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"currencyTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"}],"name":"nftSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"nonceBurned","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_allowedNFTContractAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_fee_pct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"burnedNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"sellerSignature","type":"bytes"}],"name":"buyNFTUsingSellOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"offchainSignature","type":"bytes"}],"name":"cancelOffchainOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBidDomainTypehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"}],"name":"getEIP712DomainHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyTokenAddress","type":"address"},{"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"orderCreator","type":"address"},{"internalType":"bool","name":"isSellOrder","type":"bool"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyTokenAddress","type":"address"},{"internalType":"uint256","name":"currencyTokenAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"getOrderTypedDataHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrderTypehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftTokenId","type":"uint256"},{"internalType":"address","name":"currencyToken","type":"address"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"bytes","name":"buyerSignature","type":"bytes"}],"name":"sellNFTUsingBuyOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectContract","type":"address"},{"internalType":"uint256","name":"fee_pct","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"projectContract","type":"address"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setProjectAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612824806100606000396000f3fe60806040526004361061010d5760003560e01c8063564b81ef11610095578063d327c1eb11610064578063d327c1eb146103ba578063d4ee1d90146103f7578063e55156b514610422578063e96f91541461044b578063f2fde38b1461047457610117565b8063564b81ef1461031057806359df7fcb1461033b57806379ba5097146103785780638da5cb5b1461038f57610117565b80632d0ab88b116100dc5780632d0ab88b146102105780632fa7872e146102405780633550b2001461027d578063366061d5146102a85780633f7ef831146102e557610117565b806308d74c251461011c5780631744936914610159578063241ecc7b146101965780632c94902f146101d357610117565b3661011757600080fd5b600080fd5b34801561012857600080fd5b50610143600480360381019061013e9190611a09565b61049d565b60405161015091906120b7565b60405180910390f35b34801561016557600080fd5b50610180600480360381019061017b9190611a36565b6104bd565b60405161018d91906120b7565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611b48565b610869565b6040516101ca91906120d2565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611b48565b610932565b60405161020791906120d2565b60405180910390f35b61022a60048036038101906102259190611a36565b610999565b60405161023791906120b7565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611bfe565b610d45565b60405161027491906120b7565b60405180910390f35b34801561028957600080fd5b50610292610f8d565b60405161029f91906120d2565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611a09565b610fb5565b6040516102dc9190612312565b60405180910390f35b3480156102f157600080fd5b506102fa610fcd565b60405161030791906120d2565b60405180910390f35b34801561031c57600080fd5b50610325610ff5565b6040516103329190612312565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611ce4565b611002565b60405161036f9190612312565b60405180910390f35b34801561038457600080fd5b5061038d611027565b005b34801561039b57600080fd5b506103a46111c3565b6040516103b19190612004565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611d91565b6111e7565b6040516103ee91906120d2565b60405180910390f35b34801561040357600080fd5b5061040c611250565b6040516104199190612004565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611d24565b611276565b005b34801561045757600080fd5b50610472600480360381019061046d9190611b08565b611332565b005b34801561048057600080fd5b5061049b60048036038101906104969190611a09565b6113e5565b005b60046020528060005260406000206000915054906101000a900460ff1681565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290612232565b60405180910390fd5b600061055e8a60008b8b8b8b8b8b610869565b905061056a8184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612252565b60405180910390fd5b834310806105e55750600084145b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054146106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e338c8b6040518463ffffffff1660e01b815260040161074a93929190612080565b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506107c88a338989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a338b8b8b8b8b6040516108029695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d428660405161085091906120d2565b60405180910390a2600191505098975050505050505050565b6000806108e96040518060400160405280600a81526020017f426c6f636b53746f7265000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506108e3610ff5565b306111e7565b6108f98b8b8b8b8b8b8b8b610932565b60405160200161090a929190611fcd565b6040516020818303038152906040528051906020012090508091505098975050505050505050565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d8989898989898989604051602001610975999897969594939291906120ed565b60405160208183030381529060405280519060200120905098975050505050505050565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612232565b60405180910390fd5b6000610a3a8a60018b8b8b8b8b8b610869565b9050610a468184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90612252565b60405180910390fd5b83431080610ac15750600084145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205414610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e8b338b6040518463ffffffff1660e01b8152600401610c2693929190612080565b600060405180830381600087803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50505050610ca4338b8989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a8a338b8b8b8b604051610cde9695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4286604051610d2c91906120d2565b60405180910390a2600191505098975050505050505050565b600080610d588b8b8b8b8b8b8b8b610869565b90506000610d668285611481565b90508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612252565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90612292565b60405180910390fd5b6000600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000205414610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90612272565b60405180910390fd5b60028060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020819055508b73ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4287604051610f7291906120d2565b60405180910390a26001925050509998505050505050505050565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a631232905090565b60036020528060005260406000206000915090505481565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d905090565b6000804690508091505090565b6002602052816000526040600020602052806000526040600020600091509150505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a63123285805190602001208580519060200120858560405160200161123095949392919061217a565b604051602081830303815290604052805190602001209050949350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ce57600080fd5b600081101580156112e157506103e88111155b6112ea57600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080604185511461149c576000935050505061154e565b6020850151925060408501519150606085015160001a9050601b8160ff1610156114d057601b816114cd91906123d0565b90505b601b8160ff16141580156114e85750601c8160ff1614155b156114f9576000935050505061154e565b6001868285856040516000815260200160405260405161151c94939291906121cd565b6020604051602081039080840390855afa15801561153e573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008061271083856115669190612438565b6115709190612407565b9050601073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116a7578334146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612212565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc828661160f9190612492565b9081150290604051600060405180830381858888f1935050505015801561163a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116a1573d6000803e3d6000fd5b506118b2565b600034146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190612212565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd888884886117149190612492565b6040518463ffffffff1660e01b815260040161173293929190612080565b602060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190611d64565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906122d2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161182093929190612080565b602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190611d64565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906122d2565b60405180910390fd5b5b600191505095945050505050565b60006118d36118ce84612352565b61232d565b9050828152602081018484840111156118ef576118ee612601565b5b6118fa848285612525565b509392505050565b600061191561191084612383565b61232d565b90508281526020810184848401111561193157611930612601565b5b61193c848285612525565b509392505050565b60008135905061195381612792565b92915050565b600081359050611968816127a9565b92915050565b60008151905061197d816127a9565b92915050565b600081359050611992816127c0565b92915050565b600082601f8301126119ad576119ac6125fc565b5b81356119bd8482602086016118c0565b91505092915050565b600082601f8301126119db576119da6125fc565b5b81356119eb848260208601611902565b91505092915050565b600081359050611a03816127d7565b92915050565b600060208284031215611a1f57611a1e61260b565b5b6000611a2d84828501611944565b91505092915050565b600080600080600080600080610100898b031215611a5757611a5661260b565b5b6000611a658b828c01611944565b9850506020611a768b828c01611944565b9750506040611a878b828c016119f4565b9650506060611a988b828c01611944565b9550506080611aa98b828c016119f4565b94505060a0611aba8b828c01611983565b93505060c0611acb8b828c016119f4565b92505060e089013567ffffffffffffffff811115611aec57611aeb612606565b5b611af88b828c01611998565b9150509295985092959890939650565b60008060408385031215611b1f57611b1e61260b565b5b6000611b2d85828601611944565b9250506020611b3e85828601611959565b9150509250929050565b600080600080600080600080610100898b031215611b6957611b6861260b565b5b6000611b778b828c01611944565b9850506020611b888b828c01611959565b9750506040611b998b828c01611944565b9650506060611baa8b828c016119f4565b9550506080611bbb8b828c01611944565b94505060a0611bcc8b828c016119f4565b93505060c0611bdd8b828c01611983565b92505060e0611bee8b828c016119f4565b9150509295985092959890939650565b60008060008060008060008060006101208a8c031215611c2157611c2061260b565b5b6000611c2f8c828d01611944565b9950506020611c408c828d01611959565b9850506040611c518c828d01611944565b9750506060611c628c828d016119f4565b9650506080611c738c828d01611944565b95505060a0611c848c828d016119f4565b94505060c0611c958c828d01611983565b93505060e0611ca68c828d016119f4565b9250506101008a013567ffffffffffffffff811115611cc857611cc7612606565b5b611cd48c828d01611998565b9150509295985092959850929598565b60008060408385031215611cfb57611cfa61260b565b5b6000611d0985828601611944565b9250506020611d1a85828601611983565b9150509250929050565b60008060408385031215611d3b57611d3a61260b565b5b6000611d4985828601611944565b9250506020611d5a858286016119f4565b9150509250929050565b600060208284031215611d7a57611d7961260b565b5b6000611d888482850161196e565b91505092915050565b60008060008060808587031215611dab57611daa61260b565b5b600085013567ffffffffffffffff811115611dc957611dc8612606565b5b611dd5878288016119c6565b945050602085013567ffffffffffffffff811115611df657611df5612606565b5b611e02878288016119c6565b9350506040611e13878288016119f4565b9250506060611e2487828801611944565b91505092959194509250565b611e39816124c6565b82525050565b611e48816124d8565b82525050565b611e57816124e4565b82525050565b611e6e611e69826124e4565b612565565b82525050565b6000611e816017836123b4565b9150611e8c82612621565b602082019050919050565b6000611ea46002836123c5565b9150611eaf8261264a565b600282019050919050565b6000611ec76013836123b4565b9150611ed282612673565b602082019050919050565b6000611eea6011836123b4565b9150611ef58261269c565b602082019050919050565b6000611f0d6014836123b4565b9150611f18826126c5565b602082019050919050565b6000611f306013836123b4565b9150611f3b826126ee565b602082019050919050565b6000611f53600b836123b4565b9150611f5e82612717565b602082019050919050565b6000611f76600d836123b4565b9150611f8182612740565b602082019050919050565b6000611f996014836123b4565b9150611fa482612769565b602082019050919050565b611fb88161250e565b82525050565b611fc781612518565b82525050565b6000611fd882611e97565b9150611fe48285611e5d565b602082019150611ff48284611e5d565b6020820191508190509392505050565b60006020820190506120196000830184611e30565b92915050565b600060c0820190506120346000830189611e30565b6120416020830188611e30565b61204e6040830187611e30565b61205b6060830186611faf565b6120686080830185611e30565b61207560a0830184611faf565b979650505050505050565b60006060820190506120956000830186611e30565b6120a26020830185611e30565b6120af6040830184611faf565b949350505050565b60006020820190506120cc6000830184611e3f565b92915050565b60006020820190506120e76000830184611e4e565b92915050565b600061012082019050612103600083018c611e4e565b612110602083018b611e30565b61211d604083018a611e3f565b61212a6060830189611e30565b6121376080830188611faf565b61214460a0830187611e30565b61215160c0830186611faf565b61215e60e0830185611e4e565b61216c610100830184611faf565b9a9950505050505050505050565b600060a08201905061218f6000830188611e4e565b61219c6020830187611e4e565b6121a96040830186611e4e565b6121b66060830185611faf565b6121c36080830184611e30565b9695505050505050565b60006080820190506121e26000830187611e4e565b6121ef6020830186611fbe565b6121fc6040830185611e4e565b6122096060830184611e4e565b95945050505050565b6000602082019050818103600083015261222b81611e74565b9050919050565b6000602082019050818103600083015261224b81611eba565b9050919050565b6000602082019050818103600083015261226b81611edd565b9050919050565b6000602082019050818103600083015261228b81611f00565b9050919050565b600060208201905081810360008301526122ab81611f23565b9050919050565b600060208201905081810360008301526122cb81611f46565b9050919050565b600060208201905081810360008301526122eb81611f69565b9050919050565b6000602082019050818103600083015261230b81611f8c565b9050919050565b60006020820190506123276000830184611faf565b92915050565b6000612337612348565b90506123438282612534565b919050565b6000604051905090565b600067ffffffffffffffff82111561236d5761236c6125cd565b5b61237682612610565b9050602081019050919050565b600067ffffffffffffffff82111561239e5761239d6125cd565b5b6123a782612610565b9050602081019050919050565b600082825260208201905092915050565b600081905092915050565b60006123db82612518565b91506123e683612518565b92508260ff038211156123fc576123fb61256f565b5b828201905092915050565b60006124128261250e565b915061241d8361250e565b92508261242d5761242c61259e565b5b828204905092915050565b60006124438261250e565b915061244e8361250e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124875761248661256f565b5b828202905092915050565b600061249d8261250e565b91506124a88361250e565b9250828210156124bb576124ba61256f565b5b828203905092915050565b60006124d1826124ee565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b61253d82612610565b810181811067ffffffffffffffff8211171561255c5761255b6125cd565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e636f7272656374207061796d656e742076616c7565000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f50726f6a656374206e6f7420616c6c6f77656400000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f4e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b7f4e6f74207369676e6174757265206f776e657200000000000000000000000000600082015250565b7f6269642065787069726564000000000000000000000000000000000000000000600082015250565b7f756e61626c6520746f2070617900000000000000000000000000000000000000600082015250565b7f6e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b61279b816124c6565b81146127a657600080fd5b50565b6127b2816124d8565b81146127bd57600080fd5b50565b6127c9816124e4565b81146127d457600080fd5b50565b6127e08161250e565b81146127eb57600080fd5b5056fea2646970667358221220158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a264736f6c63430008070033
Deployed Bytecode
0x60806040526004361061010d5760003560e01c8063564b81ef11610095578063d327c1eb11610064578063d327c1eb146103ba578063d4ee1d90146103f7578063e55156b514610422578063e96f91541461044b578063f2fde38b1461047457610117565b8063564b81ef1461031057806359df7fcb1461033b57806379ba5097146103785780638da5cb5b1461038f57610117565b80632d0ab88b116100dc5780632d0ab88b146102105780632fa7872e146102405780633550b2001461027d578063366061d5146102a85780633f7ef831146102e557610117565b806308d74c251461011c5780631744936914610159578063241ecc7b146101965780632c94902f146101d357610117565b3661011757600080fd5b600080fd5b34801561012857600080fd5b50610143600480360381019061013e9190611a09565b61049d565b60405161015091906120b7565b60405180910390f35b34801561016557600080fd5b50610180600480360381019061017b9190611a36565b6104bd565b60405161018d91906120b7565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611b48565b610869565b6040516101ca91906120d2565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611b48565b610932565b60405161020791906120d2565b60405180910390f35b61022a60048036038101906102259190611a36565b610999565b60405161023791906120b7565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611bfe565b610d45565b60405161027491906120b7565b60405180910390f35b34801561028957600080fd5b50610292610f8d565b60405161029f91906120d2565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611a09565b610fb5565b6040516102dc9190612312565b60405180910390f35b3480156102f157600080fd5b506102fa610fcd565b60405161030791906120d2565b60405180910390f35b34801561031c57600080fd5b50610325610ff5565b6040516103329190612312565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611ce4565b611002565b60405161036f9190612312565b60405180910390f35b34801561038457600080fd5b5061038d611027565b005b34801561039b57600080fd5b506103a46111c3565b6040516103b19190612004565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611d91565b6111e7565b6040516103ee91906120d2565b60405180910390f35b34801561040357600080fd5b5061040c611250565b6040516104199190612004565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611d24565b611276565b005b34801561045757600080fd5b50610472600480360381019061046d9190611b08565b611332565b005b34801561048057600080fd5b5061049b60048036038101906104969190611a09565b6113e5565b005b60046020528060005260406000206000915054906101000a900460ff1681565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290612232565b60405180910390fd5b600061055e8a60008b8b8b8b8b8b610869565b905061056a8184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612252565b60405180910390fd5b834310806105e55750600084145b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002054146106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e338c8b6040518463ffffffff1660e01b815260040161074a93929190612080565b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b505050506107c88a338989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a338b8b8b8b8b6040516108029695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d428660405161085091906120d2565b60405180910390a2600191505098975050505050505050565b6000806108e96040518060400160405280600a81526020017f426c6f636b53746f7265000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506108e3610ff5565b306111e7565b6108f98b8b8b8b8b8b8b8b610932565b60405160200161090a929190611fcd565b6040516020818303038152906040528051906020012090508091505098975050505050505050565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d8989898989898989604051602001610975999897969594939291906120ed565b60405160208183030381529060405280519060200120905098975050505050505050565b6000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90612232565b60405180910390fd5b6000610a3a8a60018b8b8b8b8b8b610869565b9050610a468184611481565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90612252565b60405180910390fd5b83431080610ac15750600084145b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906122b2565b60405180910390fd5b6000600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205414610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906122f2565b60405180910390fd5b6001600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff166342842e0e8b338b6040518463ffffffff1660e01b8152600401610c2693929190612080565b600060405180830381600087803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50505050610ca4338b8989600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611554565b507f28781f4ba8c1b5643c2e49f77530bf25db9bfed4aaeb6b27d30456977fd3b02a8a338b8b8b8b604051610cde9695949392919061201f565b60405180910390a18973ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4286604051610d2c91906120d2565b60405180910390a2600191505098975050505050505050565b600080610d588b8b8b8b8b8b8b8b610869565b90506000610d668285611481565b90508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612252565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90612292565b60405180910390fd5b6000600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000205414610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90612272565b60405180910390fd5b60028060008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020819055508b73ffffffffffffffffffffffffffffffffffffffff167f65c40e8c2798748a8eeda0920702070a8f53275c176cf4ab24bd745857163d4287604051610f7291906120d2565b60405180910390a26001925050509998505050505050505050565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a631232905090565b60036020528060005260406000206000915090505481565b60007f54b3c1756bc0bbf0aeee3b068a490af815c4e2aec2b74fe30299af5c8128512d905090565b6000804690508091505090565b6002602052816000526040600020602052806000526040600020600091509150505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f192cc950ea91249f00438da639925266abcf45b8888b1cc8337025000a63123285805190602001208580519060200120858560405160200161123095949392919061217a565b604051602081830303815290604052805190602001209050949350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ce57600080fd5b600081101580156112e157506103e88111155b6112ea57600080fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138a57600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080604185511461149c576000935050505061154e565b6020850151925060408501519150606085015160001a9050601b8160ff1610156114d057601b816114cd91906123d0565b90505b601b8160ff16141580156114e85750601c8160ff1614155b156114f9576000935050505061154e565b6001868285856040516000815260200160405260405161151c94939291906121cd565b6020604051602081039080840390855afa15801561153e573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008061271083856115669190612438565b6115709190612407565b9050601073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116a7578334146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612212565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc828661160f9190612492565b9081150290604051600060405180830381858888f1935050505015801561163a573d6000803e3d6000fd5b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116a1573d6000803e3d6000fd5b506118b2565b600034146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190612212565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd888884886117149190612492565b6040518463ffffffff1660e01b815260040161173293929190612080565b602060405180830381600087803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117849190611d64565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906122d2565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd8860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b815260040161182093929190612080565b602060405180830381600087803b15801561183a57600080fd5b505af115801561184e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118729190611d64565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906122d2565b60405180910390fd5b5b600191505095945050505050565b60006118d36118ce84612352565b61232d565b9050828152602081018484840111156118ef576118ee612601565b5b6118fa848285612525565b509392505050565b600061191561191084612383565b61232d565b90508281526020810184848401111561193157611930612601565b5b61193c848285612525565b509392505050565b60008135905061195381612792565b92915050565b600081359050611968816127a9565b92915050565b60008151905061197d816127a9565b92915050565b600081359050611992816127c0565b92915050565b600082601f8301126119ad576119ac6125fc565b5b81356119bd8482602086016118c0565b91505092915050565b600082601f8301126119db576119da6125fc565b5b81356119eb848260208601611902565b91505092915050565b600081359050611a03816127d7565b92915050565b600060208284031215611a1f57611a1e61260b565b5b6000611a2d84828501611944565b91505092915050565b600080600080600080600080610100898b031215611a5757611a5661260b565b5b6000611a658b828c01611944565b9850506020611a768b828c01611944565b9750506040611a878b828c016119f4565b9650506060611a988b828c01611944565b9550506080611aa98b828c016119f4565b94505060a0611aba8b828c01611983565b93505060c0611acb8b828c016119f4565b92505060e089013567ffffffffffffffff811115611aec57611aeb612606565b5b611af88b828c01611998565b9150509295985092959890939650565b60008060408385031215611b1f57611b1e61260b565b5b6000611b2d85828601611944565b9250506020611b3e85828601611959565b9150509250929050565b600080600080600080600080610100898b031215611b6957611b6861260b565b5b6000611b778b828c01611944565b9850506020611b888b828c01611959565b9750506040611b998b828c01611944565b9650506060611baa8b828c016119f4565b9550506080611bbb8b828c01611944565b94505060a0611bcc8b828c016119f4565b93505060c0611bdd8b828c01611983565b92505060e0611bee8b828c016119f4565b9150509295985092959890939650565b60008060008060008060008060006101208a8c031215611c2157611c2061260b565b5b6000611c2f8c828d01611944565b9950506020611c408c828d01611959565b9850506040611c518c828d01611944565b9750506060611c628c828d016119f4565b9650506080611c738c828d01611944565b95505060a0611c848c828d016119f4565b94505060c0611c958c828d01611983565b93505060e0611ca68c828d016119f4565b9250506101008a013567ffffffffffffffff811115611cc857611cc7612606565b5b611cd48c828d01611998565b9150509295985092959850929598565b60008060408385031215611cfb57611cfa61260b565b5b6000611d0985828601611944565b9250506020611d1a85828601611983565b9150509250929050565b60008060408385031215611d3b57611d3a61260b565b5b6000611d4985828601611944565b9250506020611d5a858286016119f4565b9150509250929050565b600060208284031215611d7a57611d7961260b565b5b6000611d888482850161196e565b91505092915050565b60008060008060808587031215611dab57611daa61260b565b5b600085013567ffffffffffffffff811115611dc957611dc8612606565b5b611dd5878288016119c6565b945050602085013567ffffffffffffffff811115611df657611df5612606565b5b611e02878288016119c6565b9350506040611e13878288016119f4565b9250506060611e2487828801611944565b91505092959194509250565b611e39816124c6565b82525050565b611e48816124d8565b82525050565b611e57816124e4565b82525050565b611e6e611e69826124e4565b612565565b82525050565b6000611e816017836123b4565b9150611e8c82612621565b602082019050919050565b6000611ea46002836123c5565b9150611eaf8261264a565b600282019050919050565b6000611ec76013836123b4565b9150611ed282612673565b602082019050919050565b6000611eea6011836123b4565b9150611ef58261269c565b602082019050919050565b6000611f0d6014836123b4565b9150611f18826126c5565b602082019050919050565b6000611f306013836123b4565b9150611f3b826126ee565b602082019050919050565b6000611f53600b836123b4565b9150611f5e82612717565b602082019050919050565b6000611f76600d836123b4565b9150611f8182612740565b602082019050919050565b6000611f996014836123b4565b9150611fa482612769565b602082019050919050565b611fb88161250e565b82525050565b611fc781612518565b82525050565b6000611fd882611e97565b9150611fe48285611e5d565b602082019150611ff48284611e5d565b6020820191508190509392505050565b60006020820190506120196000830184611e30565b92915050565b600060c0820190506120346000830189611e30565b6120416020830188611e30565b61204e6040830187611e30565b61205b6060830186611faf565b6120686080830185611e30565b61207560a0830184611faf565b979650505050505050565b60006060820190506120956000830186611e30565b6120a26020830185611e30565b6120af6040830184611faf565b949350505050565b60006020820190506120cc6000830184611e3f565b92915050565b60006020820190506120e76000830184611e4e565b92915050565b600061012082019050612103600083018c611e4e565b612110602083018b611e30565b61211d604083018a611e3f565b61212a6060830189611e30565b6121376080830188611faf565b61214460a0830187611e30565b61215160c0830186611faf565b61215e60e0830185611e4e565b61216c610100830184611faf565b9a9950505050505050505050565b600060a08201905061218f6000830188611e4e565b61219c6020830187611e4e565b6121a96040830186611e4e565b6121b66060830185611faf565b6121c36080830184611e30565b9695505050505050565b60006080820190506121e26000830187611e4e565b6121ef6020830186611fbe565b6121fc6040830185611e4e565b6122096060830184611e4e565b95945050505050565b6000602082019050818103600083015261222b81611e74565b9050919050565b6000602082019050818103600083015261224b81611eba565b9050919050565b6000602082019050818103600083015261226b81611edd565b9050919050565b6000602082019050818103600083015261228b81611f00565b9050919050565b600060208201905081810360008301526122ab81611f23565b9050919050565b600060208201905081810360008301526122cb81611f46565b9050919050565b600060208201905081810360008301526122eb81611f69565b9050919050565b6000602082019050818103600083015261230b81611f8c565b9050919050565b60006020820190506123276000830184611faf565b92915050565b6000612337612348565b90506123438282612534565b919050565b6000604051905090565b600067ffffffffffffffff82111561236d5761236c6125cd565b5b61237682612610565b9050602081019050919050565b600067ffffffffffffffff82111561239e5761239d6125cd565b5b6123a782612610565b9050602081019050919050565b600082825260208201905092915050565b600081905092915050565b60006123db82612518565b91506123e683612518565b92508260ff038211156123fc576123fb61256f565b5b828201905092915050565b60006124128261250e565b915061241d8361250e565b92508261242d5761242c61259e565b5b828204905092915050565b60006124438261250e565b915061244e8361250e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124875761248661256f565b5b828202905092915050565b600061249d8261250e565b91506124a88361250e565b9250828210156124bb576124ba61256f565b5b828203905092915050565b60006124d1826124ee565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b61253d82612610565b810181811067ffffffffffffffff8211171561255c5761255b6125cd565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e636f7272656374207061796d656e742076616c7565000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f50726f6a656374206e6f7420616c6c6f77656400000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f4e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b7f4e6f74207369676e6174757265206f776e657200000000000000000000000000600082015250565b7f6269642065787069726564000000000000000000000000000000000000000000600082015250565b7f756e61626c6520746f2070617900000000000000000000000000000000000000600082015250565b7f6e6f6e636520616c7265616479206275726e6564000000000000000000000000600082015250565b61279b816124c6565b81146127a657600080fd5b50565b6127b2816124d8565b81146127bd57600080fd5b50565b6127c9816124e4565b81146127d457600080fd5b50565b6127e08161250e565b81146127eb57600080fd5b5056fea2646970667358221220158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a264736f6c63430008070033
Deployed Bytecode Sourcemap
12950:8251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13841:8;;;12950:8251;13896:8;;;13137:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17083:1218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16356:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15787:558;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18309:1248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20323:863;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14912:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13089:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13916:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13006:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11557:206;;;;;;;;;;;;;:::i;:::-;;11133:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15025:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11162:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13431:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13613:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11443:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13137:58;;;;;;;;;;;;;;;;;;;;;;:::o;17083:1218::-;17300:4;17324:26;:46;17351:18;17324:46;;;;;;;;;;;;;;;;;;;;;;;;;17316:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;17473:15;17491:107;17513:5;17519;17525:18;17544:10;17555:13;17569:14;17584:5;17590:7;17491:21;:107::i;:::-;17473:125;;17637:31;17645:7;17653:14;17637:7;:31::i;:::-;17627:41;;:5;:41;;;17619:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17742:7;17727:12;:22;:38;;;;17764:1;17753:7;:12;17727:38;17719:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17830:1;17800:12;:19;17813:5;17800:19;;;;;;;;;;;;;;;:26;17820:5;17800:26;;;;;;;;;;;;:31;17792:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17894:3;17865:12;:19;17878:5;17865:19;;;;;;;;;;;;;;;:26;17885:5;17865:26;;;;;;;;;;;:32;;;;17930:18;17923:43;;;17967:10;17979:5;17986:10;17923:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18014:100;18039:5;18045:10;18056:13;18070:14;18085:8;:28;18094:18;18085:28;;;;;;;;;;;;;;;;18014:24;:100::i;:::-;;18144:90;18152:10;18164:5;18172:18;18192:10;18204:13;18219:14;18144:90;;;;;;;;;;;:::i;:::-;;;;;;;;18260:5;18248:25;;;18267:5;18248:25;;;;;;:::i;:::-;;;;;;;;18291:4;18284:11;;;17083:1218;;;;;;;;;;:::o;16356:619::-;16581:7;16610:14;16705:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16742:12;:10;:12::i;:::-;16763:4;16705:19;:64::i;:::-;16790:123;16803:12;16816:11;16828:18;16847:10;16858:20;16879:19;16899:5;16905:7;16790:12;:123::i;:::-;16637:293;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16627:304;;;;;;16610:321;;16955:6;16948:13;;;16356:619;;;;;;;;;;:::o;15787:558::-;16003:7;15455:210;16100:12;16129:11;16157:18;16192:10;16219:20;16256:19;16292:5;16314:7;16042:292;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16032:303;;;;;;16025:310;;15787:558;;;;;;;;;;:::o;18309:1248::-;18536:4;18560:26;:46;18587:18;18560:46;;;;;;;;;;;;;;;;;;;;;;;;;18552:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18711:15;18729:107;18751:6;18758:4;18763:18;18782:10;18793:13;18807:14;18822:5;18828:7;18729:21;:107::i;:::-;18711:125;;18882:32;18890:7;18898:15;18882:7;:32::i;:::-;18872:42;;:6;:42;;;18864:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18985:7;18970:12;:22;:38;;;;19007:1;18996:7;:12;18970:38;18962:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:1;19048:12;:20;19061:6;19048:20;;;;;;;;;;;;;;;:27;19069:5;19048:27;;;;;;;;;;;;:32;19040:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19144:3;19114:12;:20;19127:6;19114:20;;;;;;;;;;;;;;;:27;19135:5;19114:27;;;;;;;;;;;:33;;;;19180:18;19173:43;;;19217:6;19225:10;19237;19173:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19265:101;19290:10;19301:6;19308:13;19322:14;19337:8;:28;19346:18;19337:28;;;;;;;;;;;;;;;;19265:24;:101::i;:::-;;19396:93;19406:6;19415:10;19427:18;19447:10;19459:13;19474:14;19396:93;;;;;;;;;;;:::i;:::-;;;;;;;;19515:6;19503:26;;;19523:5;19503:26;;;;;;:::i;:::-;;;;;;;;19547:4;19540:11;;;18309:1248;;;;;;;;;;:::o;20323:863::-;20568:4;20582:15;20600:120;20622:12;20635:11;20647:18;20666:10;20677:13;20691:14;20706:5;20712:7;20600:21;:120::i;:::-;20582:138;;20729:32;20764:34;20772:7;20780:17;20764:7;:34::i;:::-;20729:69;;20839:24;20823:40;;:12;:40;;;20815:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20916:24;20902:38;;:10;:38;;;20894:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21022:1;20985:12;:26;20998:12;20985:26;;;;;;;;;;;;;;;:33;21012:5;20985:33;;;;;;;;;;;;:38;20977:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21093:3;21057:12;:26;21070:12;21057:26;;;;;;;;;;;;;;;:33;21084:5;21057:33;;;;;;;;;;;:39;;;;21132:12;21120:32;;;21146:5;21120:32;;;;;;:::i;:::-;;;;;;;;21176:4;21169:11;;;;20323:863;;;;;;;;;;;:::o;14912:106::-;14965:7;14781:123;14983:28;;14912:106;:::o;13089:43::-;;;;;;;;;;;;;;;;;:::o;15680:95::-;15730:7;15455:210;15748:21;;15680:95;:::o;13916:139::-;13959:7;13975:10;14018:9;14012:15;;14047:2;14040:9;;;13916:139;:::o;13006:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11557:206::-;11626:8;;;;;;;;;;;11612:22;;:10;:22;;;11604:31;;;;;;11681:8;;;;;;;;;;;11653:37;;11674:5;;;;;;;;;;11653:37;;;;;;;;;;;;11711:8;;;;;;;;;;;11703:5;;:16;;;;;;;;;;;;;;;;;;11751:1;11732:8;;:21;;;;;;;;;;;;;;;;;;11557:206::o;11133:20::-;;;;;;;;;;;;:::o;15025:387::-;15170:7;14781:123;15284:12;15268:30;;;;;;15329:7;15313:25;;;;;;15353:7;15375:17;15207:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15197:207;;;;;;15190:214;;15025:387;;;;;;:::o;11162:23::-;;;;;;;;;;;;;:::o;13431:172::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;13532:1:::1;13521:7;:12;;:30;;;;;13547:4;13537:7;:14;;13521:30;13513:39;;;::::0;::::1;;13589:7;13561:8;:25;13570:15;13561:25;;;;;;;;;;;;;;;:35;;;;13431:172:::0;;:::o;13613:155::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;13756:5:::1;13710:26;:43;13737:15;13710:43;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;13613:155:::0;;:::o;11443:106::-;11403:5;;;;;;;;;;11389:19;;:10;:19;;;11381:28;;;;;;11530:9:::1;11519:8;;:20;;;;;;;;;;;;;;;;;;11443:106:::0;:::o;12084:731::-;12157:7;12173:9;12189;12205:7;12273:2;12259:3;:10;:16;12255:58;;12302:1;12286:19;;;;;;;12255:58;12412:2;12407:3;12403:12;12397:19;12392:24;;12444:2;12439:3;12435:12;12429:19;12424:24;;12484:2;12479:3;12475:12;12469:19;12466:1;12461:28;12456:33;;12600:2;12596:1;:6;;;12592:36;;;12618:2;12613:7;;;;;:::i;:::-;;;12592:36;12705:2;12700:1;:7;;;;:18;;;;;12716:2;12711:1;:7;;;;12700:18;12696:114;;;12745:1;12729:19;;;;;;;12696:114;12778:24;12788:4;12794:1;12797;12800;12778:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12771:31;;;;;12084:731;;;;;:::o;19565:744::-;19706:4;19718:17;19765:5;19756:6;19739:14;:23;;;;:::i;:::-;19738:33;;;;:::i;:::-;19718:53;;13241:42;19783:27;;:13;:27;;;19780:500;;;19843:14;19830:9;:27;19822:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19902:2;19894:20;;:52;19934:9;19916:14;:28;;;;:::i;:::-;19894:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19963:5;;;;;;;;;;19955:23;;:36;19980:9;19955:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:500;;;20033:1;20020:9;:14;20012:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20087:13;20080:34;;;20115:4;20121:2;20143:9;20125:14;:28;;;;:::i;:::-;20080:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20071:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20199:13;20192:34;;;20227:4;20233:5;;;;;;;;;;20240:9;20192:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20183:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;19780:500;20299:4;20292:11;;;19565:744;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:139::-;1314:5;1352:6;1339:20;1330:29;;1368:33;1395:5;1368:33;:::i;:::-;1268:139;;;;:::o;1426:338::-;1481:5;1530:3;1523:4;1515:6;1511:17;1507:27;1497:122;;1538:79;;:::i;:::-;1497:122;1655:6;1642:20;1680:78;1754:3;1746:6;1739:4;1731:6;1727:17;1680:78;:::i;:::-;1671:87;;1487:277;1426:338;;;;:::o;1784:340::-;1840:5;1889:3;1882:4;1874:6;1870:17;1866:27;1856:122;;1897:79;;:::i;:::-;1856:122;2014:6;2001:20;2039:79;2114:3;2106:6;2099:4;2091:6;2087:17;2039:79;:::i;:::-;2030:88;;1846:278;1784:340;;;;:::o;2130:139::-;2176:5;2214:6;2201:20;2192:29;;2230:33;2257:5;2230:33;:::i;:::-;2130:139;;;;:::o;2275:329::-;2334:6;2383:2;2371:9;2362:7;2358:23;2354:32;2351:119;;;2389:79;;:::i;:::-;2351:119;2509:1;2534:53;2579:7;2570:6;2559:9;2555:22;2534:53;:::i;:::-;2524:63;;2480:117;2275:329;;;;:::o;2610:1527::-;2741:6;2749;2757;2765;2773;2781;2789;2797;2846:3;2834:9;2825:7;2821:23;2817:33;2814:120;;;2853:79;;:::i;:::-;2814:120;2973:1;2998:53;3043:7;3034:6;3023:9;3019:22;2998:53;:::i;:::-;2988:63;;2944:117;3100:2;3126:53;3171:7;3162:6;3151:9;3147:22;3126:53;:::i;:::-;3116:63;;3071:118;3228:2;3254:53;3299:7;3290:6;3279:9;3275:22;3254:53;:::i;:::-;3244:63;;3199:118;3356:2;3382:53;3427:7;3418:6;3407:9;3403:22;3382:53;:::i;:::-;3372:63;;3327:118;3484:3;3511:53;3556:7;3547:6;3536:9;3532:22;3511:53;:::i;:::-;3501:63;;3455:119;3613:3;3640:53;3685:7;3676:6;3665:9;3661:22;3640:53;:::i;:::-;3630:63;;3584:119;3742:3;3769:53;3814:7;3805:6;3794:9;3790:22;3769:53;:::i;:::-;3759:63;;3713:119;3899:3;3888:9;3884:19;3871:33;3931:18;3923:6;3920:30;3917:117;;;3953:79;;:::i;:::-;3917:117;4058:62;4112:7;4103:6;4092:9;4088:22;4058:62;:::i;:::-;4048:72;;3842:288;2610:1527;;;;;;;;;;;:::o;4143:468::-;4208:6;4216;4265:2;4253:9;4244:7;4240:23;4236:32;4233:119;;;4271:79;;:::i;:::-;4233:119;4391:1;4416:53;4461:7;4452:6;4441:9;4437:22;4416:53;:::i;:::-;4406:63;;4362:117;4518:2;4544:50;4586:7;4577:6;4566:9;4562:22;4544:50;:::i;:::-;4534:60;;4489:115;4143:468;;;;;:::o;4617:1343::-;4736:6;4744;4752;4760;4768;4776;4784;4792;4841:3;4829:9;4820:7;4816:23;4812:33;4809:120;;;4848:79;;:::i;:::-;4809:120;4968:1;4993:53;5038:7;5029:6;5018:9;5014:22;4993:53;:::i;:::-;4983:63;;4939:117;5095:2;5121:50;5163:7;5154:6;5143:9;5139:22;5121:50;:::i;:::-;5111:60;;5066:115;5220:2;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5191:118;5348:2;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5319:118;5476:3;5503:53;5548:7;5539:6;5528:9;5524:22;5503:53;:::i;:::-;5493:63;;5447:119;5605:3;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5576:119;5734:3;5761:53;5806:7;5797:6;5786:9;5782:22;5761:53;:::i;:::-;5751:63;;5705:119;5863:3;5890:53;5935:7;5926:6;5915:9;5911:22;5890:53;:::i;:::-;5880:63;;5834:119;4617:1343;;;;;;;;;;;:::o;5966:1667::-;6103:6;6111;6119;6127;6135;6143;6151;6159;6167;6216:3;6204:9;6195:7;6191:23;6187:33;6184:120;;;6223:79;;:::i;:::-;6184:120;6343:1;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6314:117;6470:2;6496:50;6538:7;6529:6;6518:9;6514:22;6496:50;:::i;:::-;6486:60;;6441:115;6595:2;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6566:118;6723:2;6749:53;6794:7;6785:6;6774:9;6770:22;6749:53;:::i;:::-;6739:63;;6694:118;6851:3;6878:53;6923:7;6914:6;6903:9;6899:22;6878:53;:::i;:::-;6868:63;;6822:119;6980:3;7007:53;7052:7;7043:6;7032:9;7028:22;7007:53;:::i;:::-;6997:63;;6951:119;7109:3;7136:53;7181:7;7172:6;7161:9;7157:22;7136:53;:::i;:::-;7126:63;;7080:119;7238:3;7265:53;7310:7;7301:6;7290:9;7286:22;7265:53;:::i;:::-;7255:63;;7209:119;7395:3;7384:9;7380:19;7367:33;7427:18;7419:6;7416:30;7413:117;;;7449:79;;:::i;:::-;7413:117;7554:62;7608:7;7599:6;7588:9;7584:22;7554:62;:::i;:::-;7544:72;;7338:288;5966:1667;;;;;;;;;;;:::o;7639:474::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:53;8088:7;8079:6;8068:9;8064:22;8043:53;:::i;:::-;8033:63;;7988:118;7639:474;;;;;:::o;8119:::-;8187:6;8195;8244:2;8232:9;8223:7;8219:23;8215:32;8212:119;;;8250:79;;:::i;:::-;8212:119;8370:1;8395:53;8440:7;8431:6;8420:9;8416:22;8395:53;:::i;:::-;8385:63;;8341:117;8497:2;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8468:118;8119:474;;;;;:::o;8599:345::-;8666:6;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:61;8919:7;8910:6;8899:9;8895:22;8866:61;:::i;:::-;8856:71;;8812:125;8599:345;;;;:::o;8950:1125::-;9056:6;9064;9072;9080;9129:3;9117:9;9108:7;9104:23;9100:33;9097:120;;;9136:79;;:::i;:::-;9097:120;9284:1;9273:9;9269:17;9256:31;9314:18;9306:6;9303:30;9300:117;;;9336:79;;:::i;:::-;9300:117;9441:63;9496:7;9487:6;9476:9;9472:22;9441:63;:::i;:::-;9431:73;;9227:287;9581:2;9570:9;9566:18;9553:32;9612:18;9604:6;9601:30;9598:117;;;9634:79;;:::i;:::-;9598:117;9739:63;9794:7;9785:6;9774:9;9770:22;9739:63;:::i;:::-;9729:73;;9524:288;9851:2;9877:53;9922:7;9913:6;9902:9;9898:22;9877:53;:::i;:::-;9867:63;;9822:118;9979:2;10005:53;10050:7;10041:6;10030:9;10026:22;10005:53;:::i;:::-;9995:63;;9950:118;8950:1125;;;;;;;:::o;10081:118::-;10168:24;10186:5;10168:24;:::i;:::-;10163:3;10156:37;10081:118;;:::o;10205:109::-;10286:21;10301:5;10286:21;:::i;:::-;10281:3;10274:34;10205:109;;:::o;10320:118::-;10407:24;10425:5;10407:24;:::i;:::-;10402:3;10395:37;10320:118;;:::o;10444:157::-;10549:45;10569:24;10587:5;10569:24;:::i;:::-;10549:45;:::i;:::-;10544:3;10537:58;10444:157;;:::o;10607:366::-;10749:3;10770:67;10834:2;10829:3;10770:67;:::i;:::-;10763:74;;10846:93;10935:3;10846:93;:::i;:::-;10964:2;10959:3;10955:12;10948:19;;10607:366;;;:::o;10979:400::-;11139:3;11160:84;11242:1;11237:3;11160:84;:::i;:::-;11153:91;;11253:93;11342:3;11253:93;:::i;:::-;11371:1;11366:3;11362:11;11355:18;;10979:400;;;:::o;11385:366::-;11527:3;11548:67;11612:2;11607:3;11548:67;:::i;:::-;11541:74;;11624:93;11713:3;11624:93;:::i;:::-;11742:2;11737:3;11733:12;11726:19;;11385:366;;;:::o;11757:::-;11899:3;11920:67;11984:2;11979:3;11920:67;:::i;:::-;11913:74;;11996:93;12085:3;11996:93;:::i;:::-;12114:2;12109:3;12105:12;12098:19;;11757:366;;;:::o;12129:::-;12271:3;12292:67;12356:2;12351:3;12292:67;:::i;:::-;12285:74;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12129:366;;;:::o;12501:::-;12643:3;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12740:93;12829:3;12740:93;:::i;:::-;12858:2;12853:3;12849:12;12842:19;;12501:366;;;:::o;12873:::-;13015:3;13036:67;13100:2;13095:3;13036:67;:::i;:::-;13029:74;;13112:93;13201:3;13112:93;:::i;:::-;13230:2;13225:3;13221:12;13214:19;;12873:366;;;:::o;13245:::-;13387:3;13408:67;13472:2;13467:3;13408:67;:::i;:::-;13401:74;;13484:93;13573:3;13484:93;:::i;:::-;13602:2;13597:3;13593:12;13586:19;;13245:366;;;:::o;13617:::-;13759:3;13780:67;13844:2;13839:3;13780:67;:::i;:::-;13773:74;;13856:93;13945:3;13856:93;:::i;:::-;13974:2;13969:3;13965:12;13958:19;;13617:366;;;:::o;13989:118::-;14076:24;14094:5;14076:24;:::i;:::-;14071:3;14064:37;13989:118;;:::o;14113:112::-;14196:22;14212:5;14196:22;:::i;:::-;14191:3;14184:35;14113:112;;:::o;14231:663::-;14472:3;14494:148;14638:3;14494:148;:::i;:::-;14487:155;;14652:75;14723:3;14714:6;14652:75;:::i;:::-;14752:2;14747:3;14743:12;14736:19;;14765:75;14836:3;14827:6;14765:75;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14885:3;14878:10;;14231:663;;;;;:::o;14900:222::-;14993:4;15031:2;15020:9;15016:18;15008:26;;15044:71;15112:1;15101:9;15097:17;15088:6;15044:71;:::i;:::-;14900:222;;;;:::o;15128:775::-;15361:4;15399:3;15388:9;15384:19;15376:27;;15413:71;15481:1;15470:9;15466:17;15457:6;15413:71;:::i;:::-;15494:72;15562:2;15551:9;15547:18;15538:6;15494:72;:::i;:::-;15576;15644:2;15633:9;15629:18;15620:6;15576:72;:::i;:::-;15658;15726:2;15715:9;15711:18;15702:6;15658:72;:::i;:::-;15740:73;15808:3;15797:9;15793:19;15784:6;15740:73;:::i;:::-;15823;15891:3;15880:9;15876:19;15867:6;15823:73;:::i;:::-;15128:775;;;;;;;;;:::o;15909:442::-;16058:4;16096:2;16085:9;16081:18;16073:26;;16109:71;16177:1;16166:9;16162:17;16153:6;16109:71;:::i;:::-;16190:72;16258:2;16247:9;16243:18;16234:6;16190:72;:::i;:::-;16272;16340:2;16329:9;16325:18;16316:6;16272:72;:::i;:::-;15909:442;;;;;;:::o;16357:210::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16495:65;16557:1;16546:9;16542:17;16533:6;16495:65;:::i;:::-;16357:210;;;;:::o;16573:222::-;16666:4;16704:2;16693:9;16689:18;16681:26;;16717:71;16785:1;16774:9;16770:17;16761:6;16717:71;:::i;:::-;16573:222;;;;:::o;16801:1096::-;17112:4;17150:3;17139:9;17135:19;17127:27;;17164:71;17232:1;17221:9;17217:17;17208:6;17164:71;:::i;:::-;17245:72;17313:2;17302:9;17298:18;17289:6;17245:72;:::i;:::-;17327:66;17389:2;17378:9;17374:18;17365:6;17327:66;:::i;:::-;17403:72;17471:2;17460:9;17456:18;17447:6;17403:72;:::i;:::-;17485:73;17553:3;17542:9;17538:19;17529:6;17485:73;:::i;:::-;17568;17636:3;17625:9;17621:19;17612:6;17568:73;:::i;:::-;17651;17719:3;17708:9;17704:19;17695:6;17651:73;:::i;:::-;17734;17802:3;17791:9;17787:19;17778:6;17734:73;:::i;:::-;17817;17885:3;17874:9;17870:19;17861:6;17817:73;:::i;:::-;16801:1096;;;;;;;;;;;;:::o;17903:664::-;18108:4;18146:3;18135:9;18131:19;18123:27;;18160:71;18228:1;18217:9;18213:17;18204:6;18160:71;:::i;:::-;18241:72;18309:2;18298:9;18294:18;18285:6;18241:72;:::i;:::-;18323;18391:2;18380:9;18376:18;18367:6;18323:72;:::i;:::-;18405;18473:2;18462:9;18458:18;18449:6;18405:72;:::i;:::-;18487:73;18555:3;18544:9;18540:19;18531:6;18487:73;:::i;:::-;17903:664;;;;;;;;:::o;18573:545::-;18746:4;18784:3;18773:9;18769:19;18761:27;;18798:71;18866:1;18855:9;18851:17;18842:6;18798:71;:::i;:::-;18879:68;18943:2;18932:9;18928:18;18919:6;18879:68;:::i;:::-;18957:72;19025:2;19014:9;19010:18;19001:6;18957:72;:::i;:::-;19039;19107:2;19096:9;19092:18;19083:6;19039:72;:::i;:::-;18573:545;;;;;;;:::o;19124:419::-;19290:4;19328:2;19317:9;19313:18;19305:26;;19377:9;19371:4;19367:20;19363:1;19352:9;19348:17;19341:47;19405:131;19531:4;19405:131;:::i;:::-;19397:139;;19124:419;;;:::o;19549:::-;19715:4;19753:2;19742:9;19738:18;19730:26;;19802:9;19796:4;19792:20;19788:1;19777:9;19773:17;19766:47;19830:131;19956:4;19830:131;:::i;:::-;19822:139;;19549:419;;;:::o;19974:::-;20140:4;20178:2;20167:9;20163:18;20155:26;;20227:9;20221:4;20217:20;20213:1;20202:9;20198:17;20191:47;20255:131;20381:4;20255:131;:::i;:::-;20247:139;;19974:419;;;:::o;20399:::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20652:9;20646:4;20642:20;20638:1;20627:9;20623:17;20616:47;20680:131;20806:4;20680:131;:::i;:::-;20672:139;;20399:419;;;:::o;20824:::-;20990:4;21028:2;21017:9;21013:18;21005:26;;21077:9;21071:4;21067:20;21063:1;21052:9;21048:17;21041:47;21105:131;21231:4;21105:131;:::i;:::-;21097:139;;20824:419;;;:::o;21249:::-;21415:4;21453:2;21442:9;21438:18;21430:26;;21502:9;21496:4;21492:20;21488:1;21477:9;21473:17;21466:47;21530:131;21656:4;21530:131;:::i;:::-;21522:139;;21249:419;;;:::o;21674:::-;21840:4;21878:2;21867:9;21863:18;21855:26;;21927:9;21921:4;21917:20;21913:1;21902:9;21898:17;21891:47;21955:131;22081:4;21955:131;:::i;:::-;21947:139;;21674:419;;;:::o;22099:::-;22265:4;22303:2;22292:9;22288:18;22280:26;;22352:9;22346:4;22342:20;22338:1;22327:9;22323:17;22316:47;22380:131;22506:4;22380:131;:::i;:::-;22372:139;;22099:419;;;:::o;22524:222::-;22617:4;22655:2;22644:9;22640:18;22632:26;;22668:71;22736:1;22725:9;22721:17;22712:6;22668:71;:::i;:::-;22524:222;;;;:::o;22752:129::-;22786:6;22813:20;;:::i;:::-;22803:30;;22842:33;22870:4;22862:6;22842:33;:::i;:::-;22752:129;;;:::o;22887:75::-;22920:6;22953:2;22947:9;22937:19;;22887:75;:::o;22968:307::-;23029:4;23119:18;23111:6;23108:30;23105:56;;;23141:18;;:::i;:::-;23105:56;23179:29;23201:6;23179:29;:::i;:::-;23171:37;;23263:4;23257;23253:15;23245:23;;22968:307;;;:::o;23281:308::-;23343:4;23433:18;23425:6;23422:30;23419:56;;;23455:18;;:::i;:::-;23419:56;23493:29;23515:6;23493:29;:::i;:::-;23485:37;;23577:4;23571;23567:15;23559:23;;23281:308;;;:::o;23595:169::-;23679:11;23713:6;23708:3;23701:19;23753:4;23748:3;23744:14;23729:29;;23595:169;;;;:::o;23770:148::-;23872:11;23909:3;23894:18;;23770:148;;;;:::o;23924:237::-;23962:3;23981:18;23997:1;23981:18;:::i;:::-;23976:23;;24013:18;24029:1;24013:18;:::i;:::-;24008:23;;24103:1;24097:4;24093:12;24090:1;24087:19;24084:45;;;24109:18;;:::i;:::-;24084:45;24153:1;24150;24146:9;24139:16;;23924:237;;;;:::o;24167:185::-;24207:1;24224:20;24242:1;24224:20;:::i;:::-;24219:25;;24258:20;24276:1;24258:20;:::i;:::-;24253:25;;24297:1;24287:35;;24302:18;;:::i;:::-;24287:35;24344:1;24341;24337:9;24332:14;;24167:185;;;;:::o;24358:348::-;24398:7;24421:20;24439:1;24421:20;:::i;:::-;24416:25;;24455:20;24473:1;24455:20;:::i;:::-;24450:25;;24643:1;24575:66;24571:74;24568:1;24565:81;24560:1;24553:9;24546:17;24542:105;24539:131;;;24650:18;;:::i;:::-;24539:131;24698:1;24695;24691:9;24680:20;;24358:348;;;;:::o;24712:191::-;24752:4;24772:20;24790:1;24772:20;:::i;:::-;24767:25;;24806:20;24824:1;24806:20;:::i;:::-;24801:25;;24845:1;24842;24839:8;24836:34;;;24850:18;;:::i;:::-;24836:34;24895:1;24892;24888:9;24880:17;;24712:191;;;;:::o;24909:96::-;24946:7;24975:24;24993:5;24975:24;:::i;:::-;24964:35;;24909:96;;;:::o;25011:90::-;25045:7;25088:5;25081:13;25074:21;25063:32;;25011:90;;;:::o;25107:77::-;25144:7;25173:5;25162:16;;25107:77;;;:::o;25190:126::-;25227:7;25267:42;25260:5;25256:54;25245:65;;25190:126;;;:::o;25322:77::-;25359:7;25388:5;25377:16;;25322:77;;;:::o;25405:86::-;25440:7;25480:4;25473:5;25469:16;25458:27;;25405:86;;;:::o;25497:154::-;25581:6;25576:3;25571;25558:30;25643:1;25634:6;25629:3;25625:16;25618:27;25497:154;;;:::o;25657:281::-;25740:27;25762:4;25740:27;:::i;:::-;25732:6;25728:40;25870:6;25858:10;25855:22;25834:18;25822:10;25819:34;25816:62;25813:88;;;25881:18;;:::i;:::-;25813:88;25921:10;25917:2;25910:22;25700:238;25657:281;;:::o;25944:79::-;25983:7;26012:5;26001:16;;25944:79;;;:::o;26029:180::-;26077:77;26074:1;26067:88;26174:4;26171:1;26164:15;26198:4;26195:1;26188:15;26215:180;26263:77;26260:1;26253:88;26360:4;26357:1;26350:15;26384:4;26381:1;26374:15;26401:180;26449:77;26446:1;26439:88;26546:4;26543:1;26536:15;26570:4;26567:1;26560:15;26587:117;26696:1;26693;26686:12;26710:117;26819:1;26816;26809:12;26833:117;26942:1;26939;26932:12;26956:117;27065:1;27062;27055:12;27079:102;27120:6;27171:2;27167:7;27162:2;27155:5;27151:14;27147:28;27137:38;;27079:102;;;:::o;27187:173::-;27327:25;27323:1;27315:6;27311:14;27304:49;27187:173;:::o;27366:214::-;27506:66;27502:1;27494:6;27490:14;27483:90;27366:214;:::o;27586:169::-;27726:21;27722:1;27714:6;27710:14;27703:45;27586:169;:::o;27761:167::-;27901:19;27897:1;27889:6;27885:14;27878:43;27761:167;:::o;27934:170::-;28074:22;28070:1;28062:6;28058:14;28051:46;27934:170;:::o;28110:169::-;28250:21;28246:1;28238:6;28234:14;28227:45;28110:169;:::o;28285:161::-;28425:13;28421:1;28413:6;28409:14;28402:37;28285:161;:::o;28452:163::-;28592:15;28588:1;28580:6;28576:14;28569:39;28452:163;:::o;28621:170::-;28761:22;28757:1;28749:6;28745:14;28738:46;28621:170;:::o;28797:122::-;28870:24;28888:5;28870:24;:::i;:::-;28863:5;28860:35;28850:63;;28909:1;28906;28899:12;28850:63;28797:122;:::o;28925:116::-;28995:21;29010:5;28995:21;:::i;:::-;28988:5;28985:32;28975:60;;29031:1;29028;29021:12;28975:60;28925:116;:::o;29047:122::-;29120:24;29138:5;29120:24;:::i;:::-;29113:5;29110:35;29100:63;;29159:1;29156;29149:12;29100:63;29047:122;:::o;29175:::-;29248:24;29266:5;29248:24;:::i;:::-;29241:5;29238:35;29228:63;;29287:1;29284;29277:12;29228:63;29175:122;:::o
Swarm Source
ipfs://158c81f9697cca17395f4f8cb4a63acd62936987dff8307fb3bd3c3c751683a2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.