Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
ItemInteroperableInterface
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-16 */ // File: node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin\contracts\token\ERC1155\IERC1155.sol // SPDX_License_Identifier: MIT pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: contracts\model\IERC1155Views.sol // SPDX_License_Identifier: MIT pragma solidity >=0.7.0; /** * @title IERC1155Views - An optional utility interface to improve the ERC-1155 Standard. * @dev This interface introduces some additional capabilities for ERC-1155 Tokens. */ interface IERC1155Views { /** * @dev Returns the total supply of the given token id * @param itemId the id of the token whose availability you want to know */ function totalSupply(uint256 itemId) external view returns (uint256); /** * @dev Returns the name of the given token id * @param itemId the id of the token whose name you want to know */ function name(uint256 itemId) external view returns (string memory); /** * @dev Returns the symbol of the given token id * @param itemId the id of the token whose symbol you want to know */ function symbol(uint256 itemId) external view returns (string memory); /** * @dev Returns the decimals of the given token id * @param itemId the id of the token whose decimals you want to know */ function decimals(uint256 itemId) external view returns (uint256); /** * @dev Returns the uri of the given token id * @param itemId the id of the token whose uri you want to know */ function uri(uint256 itemId) external view returns (string memory); } // File: contracts\model\Item.sol //SPDX_License_Identifier: MIT pragma solidity >=0.7.0; pragma abicoder v2; struct Header { address host; string name; string symbol; string uri; } struct CreateItem { Header header; bytes32 collectionId; uint256 id; address[] accounts; uint256[] amounts; } interface Item is IERC1155, IERC1155Views { event CollectionItem(bytes32 indexed fromCollectionId, bytes32 indexed toCollectionId, uint256 indexed itemId); function name() external view returns(string memory); function symbol() external view returns(string memory); function burn(address account, uint256 itemId, uint256 amount) external; function burnBatch(address account, uint256[] calldata itemIds, uint256[] calldata amounts) external; function burn(address account, uint256 itemId, uint256 amount, bytes calldata data) external; function burnBatch(address account, uint256[] calldata itemIds, uint256[] calldata amounts, bytes calldata data) external; function mintItems(CreateItem[] calldata items) external returns(uint256[] memory itemIds); function setItemsCollection(uint256[] calldata itemIds, bytes32[] calldata collectionIds) external returns(bytes32[] memory oldCollectionIds); function setItemsMetadata(uint256[] calldata itemIds, Header[] calldata amounts) external returns(Header[] memory oldValues); function interoperableOf(uint256 itemId) external view returns(address); } // File: node_modules\@ethereansos\swissknife\contracts\generic\model\ILazyInitCapableElement.sol // SPDX_License_Identifier: MIT pragma solidity >=0.7.0; interface ILazyInitCapableElement is IERC165 { function lazyInit(bytes calldata lazyInitData) external returns(bytes memory initResponse); function initializer() external view returns(address); event Host(address indexed from, address indexed to); function host() external view returns(address); function setHost(address newValue) external returns(address oldValue); function subjectIsAuthorizedFor(address subject, address location, bytes4 selector, bytes calldata payload, uint256 value) external view returns(bool); } // File: @ethereansos\swissknife\contracts\dynamicMetadata\model\IDynamicMetadataCapableElement.sol //SPDX_License_Identifier: MIT pragma solidity >=0.7.0; interface IDynamicMetadataCapableElement is ILazyInitCapableElement { function uri() external view returns(string memory); function plainUri() external view returns(string memory); function setUri(string calldata newValue) external returns (string memory oldValue); function dynamicUriResolver() external view returns(address); function setDynamicUriResolver(address newValue) external returns(address oldValue); } // File: contracts\model\IItemMainInterface.sol //SPDX_License_Identifier: MIT pragma solidity >=0.7.0; struct ItemData { bytes32 collectionId; Header header; bytes32 domainSeparator; uint256 totalSupply; mapping(address => uint256) balanceOf; mapping(address => mapping(address => uint256)) allowance; mapping(address => uint256) nonces; } interface IItemMainInterface is Item, IDynamicMetadataCapableElement { event Collection(address indexed from, address indexed to, bytes32 indexed collectionId); function interoperableInterfaceModel() external view returns(address); function collection(bytes32 collectionId) external view returns(address host, string memory name, string memory symbol, string memory uri); function collectionUri(bytes32 collectionId) external view returns(string memory); function createCollection(Header calldata _collection, CreateItem[] calldata items) external returns(bytes32 collectionId, uint256[] memory itemIds); function setCollectionsMetadata(bytes32[] calldata collectionIds, Header[] calldata values) external returns(Header[] memory oldValues); function item(uint256 itemId) external view returns(bytes32 collectionId, Header memory header, bytes32 domainSeparator, uint256 totalSupply); function mintTransferOrBurn(bool isMulti, bytes calldata data) external; function allowance(address account, address spender, uint256 itemId) external view returns(uint256); function approve(address account, address spender, uint256 amount, uint256 itemId) external; function TYPEHASH_PERMIT() external view returns (bytes32); function EIP712_PERMIT_DOMAINSEPARATOR_NAME_AND_VERSION() external view returns(string memory domainSeparatorName, string memory domainSeparatorVersion); function permit(uint256 itemId, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; function nonces(address owner, uint256 itemId) external view returns(uint256); } // File: @openzeppelin\contracts\token\ERC20\IERC20.sol // SPDX_License_Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); } // File: @openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol // SPDX_License_Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin\contracts\token\ERC20\extensions\draft-IERC20Permit.sol // SPDX_License_Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: contracts\model\IItemInteroperableInterface.sol //SPDX_License_Identifier: MIT pragma solidity >=0.7.0; interface IItemInteroperableInterface is IERC20, IERC20Metadata, IERC20Permit { function init() external; function mainInterface() external view returns(address); function itemId() external view returns(uint256); function emitEvent(bool forApprove, bool isMulti, bytes calldata data) external; function burn(uint256 amount) external; function EIP712_PERMIT_DOMAINSEPARATOR_NAME_AND_VERSION() external view returns(string memory name, string memory version); } // File: contracts\impl\ItemInteroperableInterface.sol //SPDX_License_Identifier: MIT pragma solidity >=0.7.0; contract ItemInteroperableInterface is IItemInteroperableInterface { address public override mainInterface; function init() override external { require(mainInterface == address(0)); mainInterface = msg.sender; } function DOMAIN_SEPARATOR() external override view returns (bytes32 domainSeparatorValue) { (,,domainSeparatorValue,) = IItemMainInterface(mainInterface).item(itemId()); } function EIP712_PERMIT_DOMAINSEPARATOR_NAME_AND_VERSION() external override view returns(string memory, string memory) { return IItemMainInterface(mainInterface).EIP712_PERMIT_DOMAINSEPARATOR_NAME_AND_VERSION(); } function itemId() override public view returns(uint256) { return uint160(address(this)); } function emitEvent(bool forApprove, bool isMulti, bytes calldata data) override external { require(msg.sender == mainInterface, "Unauthorized"); if(isMulti) { (address[] memory froms, address[] memory tos, uint256[] memory amounts) = abi.decode(data, (address[], address[], uint256[])); for(uint256 i = 0; i < froms.length; i++) { if(forApprove) { emit Approval(froms[i], tos[i], amounts[i]); } else { emit Transfer(froms[i], tos[i], amounts[i]); } } return; } (address from, address to, uint256 amount) = abi.decode(data, (address, address, uint256)); if(forApprove) { emit Approval(from, to, amount); } else { emit Transfer(from, to, amount); } } function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) override external { IItemMainInterface(mainInterface).permit(itemId(), owner, spender, value, deadline, v, r, s); emit Approval(owner, spender, value); } function burn(uint256 amount) override external { IItemMainInterface(mainInterface).mintTransferOrBurn(false, abi.encode(msg.sender, msg.sender, address(0), itemId(), amount)); emit Transfer(msg.sender, address(0), amount); } function name() override external view returns (string memory) { (, Header memory header,,) = IItemMainInterface(mainInterface).item(itemId()); return header.name; } function symbol() override external view returns (string memory) { (, Header memory header,,) = IItemMainInterface(mainInterface).item(itemId()); return header.symbol; } function decimals() override external pure returns (uint8) { return 18; } function nonces(address owner) external override view returns(uint256) { return IItemMainInterface(mainInterface).nonces(owner, itemId()); } function totalSupply() override external view returns (uint256 totalSupplyValue) { (,,, totalSupplyValue) = IItemMainInterface(mainInterface).item(itemId()); } function balanceOf(address account) override external view returns (uint256) { return IItemMainInterface(mainInterface).balanceOf(account, itemId()); } function allowance(address owner, address spender) override external view returns (uint256) { return IItemMainInterface(mainInterface).allowance(owner, spender, itemId()); } function approve(address spender, uint256 amount) override external returns(bool) { IItemMainInterface(mainInterface).approve(msg.sender, spender, amount, itemId()); emit Approval(msg.sender, spender, amount); return true; } function transfer(address recipient, uint256 amount) override external returns(bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) override external returns(bool) { return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) private returns(bool) { require(sender != address(0), "transfer from the zero address"); require(recipient != address(0), "transfer to the zero address"); IItemMainInterface(mainInterface).mintTransferOrBurn(false, abi.encode(msg.sender, sender, recipient, itemId(), amount)); emit Transfer(sender, recipient, amount); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"domainSeparatorValue","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_PERMIT_DOMAINSEPARATOR_NAME_AND_VERSION","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"forApprove","type":"bool"},{"internalType":"bool","name":"isMulti","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"emitEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"itemId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainInterface","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupplyValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611417806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80637ecebe00116100a2578063d2a5605e11610071578063d2a5605e14610223578063d505accf14610236578063dd62ed3e14610249578063e1c7392a1461025c578063e6daf9241461026457600080fd5b80637ecebe00146101ef57806395d89b4114610202578063a9059cbb1461020a578063ca6158cb1461021d57600080fd5b806323b872dd116100e957806323b872dd1461019d578063313ce567146101b05780633644e515146101bf57806342966c68146101c757806370a08231146101dc57600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631836b97d14610172575b600080fd5b61012361027a565b6040516101309190611249565b60405180910390f35b61014c610147366004610ee9565b610309565b6040519015158152602001610130565b6101646103c2565b604051908152602001610130565b600054610185906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b61014c6101ab366004610df8565b61044a565b60405160128152602001610130565b610164610457565b6101da6101d53660046111d0565b6104df565b005b6101646101ea366004610ddb565b61059f565b6101646101fd366004610ddb565b610635565b61012361064e565b61014c610218366004610ee9565b6106dd565b30610164565b6101da610231366004610ffa565b6106f1565b6101da610244366004610e72565b61093c565b610164610257366004610e39565b610a0f565b6101da610aa9565b61026c610ad3565b60405161013092919061125c565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102fc9190810190611088565b5050602001519392505050565b600080546001600160a01b0316634dc5ecb3338585306040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561037357600080fd5b505af1158015610387573d6000803e3d6000fd5b50506040518481526001600160a01b03861692503391506000805160206113c28339815191529060200160405180910390a350600192915050565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561040657600080fd5b505afa15801561041a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104429190810190611088565b949350505050565b6000610442848484610b5b565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561049b57600080fd5b505afa1580156104af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104d79190810190611088565b509392505050565b60008054604080513360208201819052818301526060810184905230608082015260a08082018690528251808303909101815260c082019283905263050c981360e11b9092526001600160a01b0390921692630a19302692610544929060c40161122e565b600060405180830381600087803b15801561055e57600080fd5b505af1158015610572573d6000803e3d6000fd5b5050604051838152600092503391506000805160206113a28339815191529060200160405180910390a350565b600080546001600160a01b031662fdd58e83305b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160206040518083038186803b1580156105f757600080fd5b505afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f91906111e9565b92915050565b600080546001600160a01b031663502e1a1683306105b3565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b15801561069457600080fd5b505afa1580156106a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106d09190810190611088565b5050604001519392505050565b60006106ea338484610b5b565b9392505050565b6000546001600160a01b0316331461073f5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b821561089a576000808061075584860186610f15565b92509250925060005b83518110156108915787156107f85782818151811061077f5761077f61135d565b60200260200101516001600160a01b03168482815181106107a2576107a261135d565b60200260200101516001600160a01b03166000805160206113c28339815191528484815181106107d4576107d461135d565b60200260200101516040516107eb91815260200190565b60405180910390a361087f565b82818151811061080a5761080a61135d565b60200260200101516001600160a01b031684828151811061082d5761082d61135d565b60200260200101516001600160a01b03166000805160206113a283398151915284848151811061085f5761085f61135d565b602002602001015160405161087691815260200190565b60405180910390a35b8061088981611334565b91505061075e565b50505050610936565b600080806108aa84860186610df8565b92509250925086156108f657816001600160a01b0316836001600160a01b03166000805160206113c2833981519152836040516108e991815260200190565b60405180910390a3610932565b816001600160a01b0316836001600160a01b03166000805160206113a28339815191528360405161092991815260200190565b60405180910390a35b5050505b50505050565b6000546001600160a01b03166359ded0fe306040516001600160e01b031960e084901b16815260048101919091526001600160a01b03808b16602483015289166044820152606481018890526084810187905260ff861660a482015260c4810185905260e4810184905261010401600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03166000805160206113c28339815191528760405161092991815260200190565b600080546001600160a01b031663598af9e78484306040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260640160206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906111e9565b6000546001600160a01b031615610abf57600080fd5b600080546001600160a01b03191633179055565b60008054604080516339b6be4960e21b8152905160609384936001600160a01b03169263e6daf9249260048083019392829003018186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b53919081019061116c565b915091509091565b60006001600160a01b038416610bb35760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610736565b6001600160a01b038316610c095760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610736565b60008054604080513360208201526001600160a01b0388811682840152878116606083015230608083015260a08083018890528351808403909101815260c083019384905263050c981360e11b90935290921692630a19302692610c70929060c40161122e565b600060405180830381600087803b158015610c8a57600080fd5b505af1158015610c9e573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b03166000805160206113a283398151915284604051610cd591815260200190565b60405180910390a35060019392505050565b600082601f830112610cf857600080fd5b81356020610d0d610d08836112e4565b6112b3565b80838252828201915082860187848660051b8901011115610d2d57600080fd5b60005b85811015610d55578135610d4381611389565b84529284019290840190600101610d30565b5090979650505050505050565b80358015158114610d7257600080fd5b919050565b600082601f830112610d8857600080fd5b815167ffffffffffffffff811115610da257610da2611373565b610db5601f8201601f19166020016112b3565b818152846020838601011115610dca57600080fd5b610442826020830160208701611308565b600060208284031215610ded57600080fd5b81356106ea81611389565b600080600060608486031215610e0d57600080fd5b8335610e1881611389565b92506020840135610e2881611389565b929592945050506040919091013590565b60008060408385031215610e4c57600080fd5b8235610e5781611389565b91506020830135610e6781611389565b809150509250929050565b600080600080600080600060e0888a031215610e8d57600080fd5b8735610e9881611389565b96506020880135610ea881611389565b95506040880135945060608801359350608088013560ff81168114610ecc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610efc57600080fd5b8235610f0781611389565b946020939093013593505050565b600080600060608486031215610f2a57600080fd5b833567ffffffffffffffff80821115610f4257600080fd5b610f4e87838801610ce7565b9450602091508186013581811115610f6557600080fd5b610f7188828901610ce7565b945050604086013581811115610f8657600080fd5b86019050601f81018713610f9957600080fd5b8035610fa7610d08826112e4565b8082825284820191508484018a868560051b8701011115610fc757600080fd5b600094505b83851015610fea578035835260019490940193918501918501610fcc565b5080955050505050509250925092565b6000806000806060858703121561101057600080fd5b61101985610d62565b935061102760208601610d62565b9250604085013567ffffffffffffffff8082111561104457600080fd5b818701915087601f83011261105857600080fd5b81358181111561106757600080fd5b88602082850101111561107957600080fd5b95989497505060200194505050565b6000806000806080858703121561109e57600080fd5b84519350602085015167ffffffffffffffff808211156110bd57600080fd5b90860190608082890312156110d157600080fd5b6110d961128a565b82516110e481611389565b81526020830151828111156110f857600080fd5b6111048a828601610d77565b60208301525060408301518281111561111c57600080fd5b6111288a828601610d77565b60408301525060608301518281111561114057600080fd5b61114c8a828601610d77565b60608381019190915260408a0151990151979a9199509095505050505050565b6000806040838503121561117f57600080fd5b825167ffffffffffffffff8082111561119757600080fd5b6111a386838701610d77565b935060208501519150808211156111b957600080fd5b506111c685828601610d77565b9150509250929050565b6000602082840312156111e257600080fd5b5035919050565b6000602082840312156111fb57600080fd5b5051919050565b6000815180845261121a816020860160208601611308565b601f01601f19169290920160200192915050565b82151581526040602082015260006104426040830184611202565b6020815260006106ea6020830184611202565b60408152600061126f6040830185611202565b82810360208401526112818185611202565b95945050505050565b6040516080810167ffffffffffffffff811182821017156112ad576112ad611373565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112dc576112dc611373565b604052919050565b600067ffffffffffffffff8211156112fe576112fe611373565b5060051b60200190565b60005b8381101561132357818101518382015260200161130b565b838111156109365750506000910152565b600060001982141561135657634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461139e57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122087b2fb6dc11af603f6e37d453b8c1f75e07a70b03217ffebaaf60817b2ff6a5f64736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80637ecebe00116100a2578063d2a5605e11610071578063d2a5605e14610223578063d505accf14610236578063dd62ed3e14610249578063e1c7392a1461025c578063e6daf9241461026457600080fd5b80637ecebe00146101ef57806395d89b4114610202578063a9059cbb1461020a578063ca6158cb1461021d57600080fd5b806323b872dd116100e957806323b872dd1461019d578063313ce567146101b05780633644e515146101bf57806342966c68146101c757806370a08231146101dc57600080fd5b806306fdde031461011b578063095ea7b31461013957806318160ddd1461015c5780631836b97d14610172575b600080fd5b61012361027a565b6040516101309190611249565b60405180910390f35b61014c610147366004610ee9565b610309565b6040519015158152602001610130565b6101646103c2565b604051908152602001610130565b600054610185906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b61014c6101ab366004610df8565b61044a565b60405160128152602001610130565b610164610457565b6101da6101d53660046111d0565b6104df565b005b6101646101ea366004610ddb565b61059f565b6101646101fd366004610ddb565b610635565b61012361064e565b61014c610218366004610ee9565b6106dd565b30610164565b6101da610231366004610ffa565b6106f1565b6101da610244366004610e72565b61093c565b610164610257366004610e39565b610a0f565b6101da610aa9565b61026c610ad3565b60405161013092919061125c565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156102c057600080fd5b505afa1580156102d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102fc9190810190611088565b5050602001519392505050565b600080546001600160a01b0316634dc5ecb3338585306040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561037357600080fd5b505af1158015610387573d6000803e3d6000fd5b50506040518481526001600160a01b03861692503391506000805160206113c28339815191529060200160405180910390a350600192915050565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561040657600080fd5b505afa15801561041a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104429190810190611088565b949350505050565b6000610442848484610b5b565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561049b57600080fd5b505afa1580156104af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104d79190810190611088565b509392505050565b60008054604080513360208201819052818301526060810184905230608082015260a08082018690528251808303909101815260c082019283905263050c981360e11b9092526001600160a01b0390921692630a19302692610544929060c40161122e565b600060405180830381600087803b15801561055e57600080fd5b505af1158015610572573d6000803e3d6000fd5b5050604051838152600092503391506000805160206113a28339815191529060200160405180910390a350565b600080546001600160a01b031662fdd58e83305b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160206040518083038186803b1580156105f757600080fd5b505afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f91906111e9565b92915050565b600080546001600160a01b031663502e1a1683306105b3565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b15801561069457600080fd5b505afa1580156106a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106d09190810190611088565b5050604001519392505050565b60006106ea338484610b5b565b9392505050565b6000546001600160a01b0316331461073f5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b821561089a576000808061075584860186610f15565b92509250925060005b83518110156108915787156107f85782818151811061077f5761077f61135d565b60200260200101516001600160a01b03168482815181106107a2576107a261135d565b60200260200101516001600160a01b03166000805160206113c28339815191528484815181106107d4576107d461135d565b60200260200101516040516107eb91815260200190565b60405180910390a361087f565b82818151811061080a5761080a61135d565b60200260200101516001600160a01b031684828151811061082d5761082d61135d565b60200260200101516001600160a01b03166000805160206113a283398151915284848151811061085f5761085f61135d565b602002602001015160405161087691815260200190565b60405180910390a35b8061088981611334565b91505061075e565b50505050610936565b600080806108aa84860186610df8565b92509250925086156108f657816001600160a01b0316836001600160a01b03166000805160206113c2833981519152836040516108e991815260200190565b60405180910390a3610932565b816001600160a01b0316836001600160a01b03166000805160206113a28339815191528360405161092991815260200190565b60405180910390a35b5050505b50505050565b6000546001600160a01b03166359ded0fe306040516001600160e01b031960e084901b16815260048101919091526001600160a01b03808b16602483015289166044820152606481018890526084810187905260ff861660a482015260c4810185905260e4810184905261010401600060405180830381600087803b1580156109c457600080fd5b505af11580156109d8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03166000805160206113c28339815191528760405161092991815260200190565b600080546001600160a01b031663598af9e78484306040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260640160206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906111e9565b6000546001600160a01b031615610abf57600080fd5b600080546001600160a01b03191633179055565b60008054604080516339b6be4960e21b8152905160609384936001600160a01b03169263e6daf9249260048083019392829003018186803b158015610b1757600080fd5b505afa158015610b2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b53919081019061116c565b915091509091565b60006001600160a01b038416610bb35760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610736565b6001600160a01b038316610c095760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610736565b60008054604080513360208201526001600160a01b0388811682840152878116606083015230608083015260a08083018890528351808403909101815260c083019384905263050c981360e11b90935290921692630a19302692610c70929060c40161122e565b600060405180830381600087803b158015610c8a57600080fd5b505af1158015610c9e573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b03166000805160206113a283398151915284604051610cd591815260200190565b60405180910390a35060019392505050565b600082601f830112610cf857600080fd5b81356020610d0d610d08836112e4565b6112b3565b80838252828201915082860187848660051b8901011115610d2d57600080fd5b60005b85811015610d55578135610d4381611389565b84529284019290840190600101610d30565b5090979650505050505050565b80358015158114610d7257600080fd5b919050565b600082601f830112610d8857600080fd5b815167ffffffffffffffff811115610da257610da2611373565b610db5601f8201601f19166020016112b3565b818152846020838601011115610dca57600080fd5b610442826020830160208701611308565b600060208284031215610ded57600080fd5b81356106ea81611389565b600080600060608486031215610e0d57600080fd5b8335610e1881611389565b92506020840135610e2881611389565b929592945050506040919091013590565b60008060408385031215610e4c57600080fd5b8235610e5781611389565b91506020830135610e6781611389565b809150509250929050565b600080600080600080600060e0888a031215610e8d57600080fd5b8735610e9881611389565b96506020880135610ea881611389565b95506040880135945060608801359350608088013560ff81168114610ecc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610efc57600080fd5b8235610f0781611389565b946020939093013593505050565b600080600060608486031215610f2a57600080fd5b833567ffffffffffffffff80821115610f4257600080fd5b610f4e87838801610ce7565b9450602091508186013581811115610f6557600080fd5b610f7188828901610ce7565b945050604086013581811115610f8657600080fd5b86019050601f81018713610f9957600080fd5b8035610fa7610d08826112e4565b8082825284820191508484018a868560051b8701011115610fc757600080fd5b600094505b83851015610fea578035835260019490940193918501918501610fcc565b5080955050505050509250925092565b6000806000806060858703121561101057600080fd5b61101985610d62565b935061102760208601610d62565b9250604085013567ffffffffffffffff8082111561104457600080fd5b818701915087601f83011261105857600080fd5b81358181111561106757600080fd5b88602082850101111561107957600080fd5b95989497505060200194505050565b6000806000806080858703121561109e57600080fd5b84519350602085015167ffffffffffffffff808211156110bd57600080fd5b90860190608082890312156110d157600080fd5b6110d961128a565b82516110e481611389565b81526020830151828111156110f857600080fd5b6111048a828601610d77565b60208301525060408301518281111561111c57600080fd5b6111288a828601610d77565b60408301525060608301518281111561114057600080fd5b61114c8a828601610d77565b60608381019190915260408a0151990151979a9199509095505050505050565b6000806040838503121561117f57600080fd5b825167ffffffffffffffff8082111561119757600080fd5b6111a386838701610d77565b935060208501519150808211156111b957600080fd5b506111c685828601610d77565b9150509250929050565b6000602082840312156111e257600080fd5b5035919050565b6000602082840312156111fb57600080fd5b5051919050565b6000815180845261121a816020860160208601611308565b601f01601f19169290920160200192915050565b82151581526040602082015260006104426040830184611202565b6020815260006106ea6020830184611202565b60408152600061126f6040830185611202565b82810360208401526112818185611202565b95945050505050565b6040516080810167ffffffffffffffff811182821017156112ad576112ad611373565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112dc576112dc611373565b604052919050565b600067ffffffffffffffff8211156112fe576112fe611373565b5060051b60200190565b60005b8381101561132357818101518382015260200161130b565b838111156109365750506000910152565b600060001982141561135657634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461139e57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122087b2fb6dc11af603f6e37d453b8c1f75e07a70b03217ffebaaf60817b2ff6a5f64736f6c63430008060033
Deployed Bytecode Sourcemap
18017:4510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20259:188;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21461:256;;;;;;:::i;:::-;;:::i;:::-;;;10784:14:1;;10777:22;10759:41;;10747:2;10732:18;21461:256:0;10714:92:1;20912:173:0;;;:::i;:::-;;;11260:25:1;;;11248:2;11233:18;20912:173:0;11215:76:1;18093:37:0;;;;;-1:-1:-1;;;;;18093:37:0;;;;;;-1:-1:-1;;;;;8931:32:1;;;8913:51;;8901:2;8886:18;18093:37:0;8868:102:1;21888:171:0;;;;;;:::i;:::-;;:::i;20655:87::-;;;20732:2;14034:36:1;;14022:2;14007:18;20655:87:0;13989::1;18273:185:0;;;:::i;20003:248::-;;;;;;:::i;:::-;;:::i;:::-;;21093:165;;;;;;:::i;:::-;;:::i;20750:154::-;;;;;;:::i;:::-;;:::i;20455:192::-;;;:::i;21725:155::-;;;;;;:::i;:::-;;:::i;18701:104::-;18791:4;18701:104;;18813:886;;;;;;:::i;:::-;;:::i;19707:288::-;;;;;;:::i;:::-;;:::i;21266:187::-;;;;;;:::i;:::-;;:::i;18139:126::-;;;:::i;18466:227::-;;;:::i;:::-;;;;;;;;:::i;20259:188::-;20336:20;20381:13;;20362:48;;-1:-1:-1;;;20362:48:0;;18791:4;20362:48;;;11260:25:1;20307:13:0;;20336:20;-1:-1:-1;;;;;20381:13:0;;20362:38;;11233:18:1;;20362:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20362:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;20428:11:0;;;;20259:188;-1:-1:-1;;;20259:188:0:o;21461:256::-;21537:4;21573:13;;-1:-1:-1;;;;;21573:13:0;21554:41;21596:10;21608:7;21617:6;18791:4;21554:80;;-1:-1:-1;;;;;;21554:80:0;;;;;;;-1:-1:-1;;;;;10175:15:1;;;21554:80:0;;;10157:34:1;10227:15;;;;10207:18;;;10200:43;10259:18;;;10252:34;10302:18;;;10295:34;10091:19;;21554:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21650:37:0;;11260:25:1;;;-1:-1:-1;;;;;21650:37:0;;;-1:-1:-1;21659:10:0;;-1:-1:-1;;;;;;;;;;;;21650:37:0;11248:2:1;11233:18;21650:37:0;;;;;;;-1:-1:-1;21705:4:0;21461:256;;;;:::o;20912:173::-;20967:24;21048:13;;21029:48;;-1:-1:-1;;;21029:48:0;;18791:4;21029:48;;;11260:25:1;-1:-1:-1;;;;;21048:13:0;;;;21029:38;;11233:18:1;;21029:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21029:48:0;;;;;;;;;;;;:::i;:::-;21004:73;20912:173;-1:-1:-1;;;;20912:173:0:o;21888:171::-;21987:4;22011:40;22025:6;22033:9;22044:6;22011:13;:40::i;18273:185::-;18333:28;18421:13;;18402:48;;-1:-1:-1;;;18402:48:0;;18791:4;18402:48;;;11260:25:1;-1:-1:-1;;;;;18421:13:0;;;;18402:38;;11233:18:1;;18402:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18402:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18374:76:0;18273:185;-1:-1:-1;;;18273:185:0:o;20003:248::-;20081:13;;;20122:64;;;20133:10;20122:64;;;9272:34:1;;;9322:18;;;9315:43;9374:18;;;9367:43;;;18791:4:0;9426:18:1;;;9419:34;9469:19;;;;9462:35;;;20122:64:0;;;;;;;;;;9206:19:1;;;20122:64:0;;;;-1:-1:-1;;;20062:125:0;;;-1:-1:-1;;;;;20081:13:0;;;;20062:52;;:125;;20122:64;20062:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20203:40:0;;11260:25:1;;;20232:1:0;;-1:-1:-1;20212:10:0;;-1:-1:-1;;;;;;;;;;;;20203:40:0;11248:2:1;11233:18;20203:40:0;;;;;;;20003:248;:::o;21093:165::-;21161:7;21207:13;;-1:-1:-1;;;;;21207:13:0;21188:43;21232:7;18791:4;21241:8;21188:62;;-1:-1:-1;;;;;;21188:62:0;;;;;;;-1:-1:-1;;;;;10532:32:1;;;21188:62:0;;;10514:51:1;10581:18;;;10574:34;10487:18;;21188:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21181:69;21093:165;-1:-1:-1;;21093:165:0:o;20750:154::-;20812:7;20858:13;;-1:-1:-1;;;;;20858:13:0;20839:40;20880:5;18791:4;20887:8;18701:104;20455:192;20534:20;20579:13;;20560:48;;-1:-1:-1;;;20560:48:0;;18791:4;20560:48;;;11260:25:1;20505:13:0;;20534:20;-1:-1:-1;;;;;20579:13:0;;20560:38;;11233:18:1;;20560:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20560:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;20626:13:0;;;;20455:192;-1:-1:-1;;;20455:192:0:o;21725:155::-;21804:4;21828:44;21842:10;21854:9;21865:6;21828:13;:44::i;:::-;21821:51;21725:155;-1:-1:-1;;;21725:155:0:o;18813:886::-;18935:13;;-1:-1:-1;;;;;18935:13:0;18921:10;:27;18913:52;;;;-1:-1:-1;;;18913:52:0;;12108:2:1;18913:52:0;;;12090:21:1;12147:2;12127:18;;;12120:30;-1:-1:-1;;;12166:18:1;;;12159:42;12218:18;;18913:52:0;;;;;;;;;18979:7;18976:469;;;19004:22;;;19078:51;;;;19089:4;19078:51;:::i;:::-;19003:126;;;;;;19148:9;19144:269;19167:5;:12;19163:1;:16;19144:269;;;19208:10;19205:193;;;19267:3;19271:1;19267:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19248:38:0;19257:5;19263:1;19257:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19248:38:0;-1:-1:-1;;;;;;;;;;;19275:7:0;19283:1;19275:10;;;;;;;;:::i;:::-;;;;;;;19248:38;;;;11260:25:1;;11248:2;11233:18;;11215:76;19248:38:0;;;;;;;;19205:193;;;19359:3;19363:1;19359:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19340:38:0;19349:5;19355:1;19349:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19340:38:0;-1:-1:-1;;;;;;;;;;;19367:7:0;19375:1;19367:10;;;;;;;;:::i;:::-;;;;;;;19340:38;;;;11260:25:1;;11248:2;11233:18;;11215:76;19340:38:0;;;;;;;;19205:193;19181:3;;;;:::i;:::-;;;;19144:269;;;;19427:7;;;;;18976:469;19456:12;;;19500:45;;;;19511:4;19500:45;:::i;:::-;19455:90;;;;;;19559:10;19556:136;;;19606:2;-1:-1:-1;;;;;19591:26:0;19600:4;-1:-1:-1;;;;;19591:26:0;-1:-1:-1;;;;;;;;;;;19610:6:0;19591:26;;;;11260:25:1;;11248:2;11233:18;;11215:76;19591:26:0;;;;;;;;19556:136;;;19670:2;-1:-1:-1;;;;;19655:26:0;19664:4;-1:-1:-1;;;;;19655:26:0;-1:-1:-1;;;;;;;;;;;19674:6:0;19655:26;;;;11260:25:1;;11248:2;11233:18;;11215:76;19655:26:0;;;;;;;;19556:136;18902:797;;;18813:886;;;;;:::o;19707:288::-;19867:13;;-1:-1:-1;;;;;19867:13:0;19848:40;18791:4;19848:92;;-1:-1:-1;;;;;;19848:92:0;;;;;;;;;;13484:25:1;;;;-1:-1:-1;;;;;13583:15:1;;;13563:18;;;13556:43;13635:15;;13615:18;;;13608:43;13667:18;;;13660:34;;;13710:19;;;13703:35;;;13787:4;13775:17;;13754:19;;;13747:46;13809:19;;;13802:35;;;13853:19;;;13846:35;;;13456:19;;19848:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19972:7;-1:-1:-1;;;;;19956:31:0;19965:5;-1:-1:-1;;;;;19956:31:0;-1:-1:-1;;;;;;;;;;;19981:5:0;19956:31;;;;11260:25:1;;11248:2;11233:18;;11215:76;21266:187:0;21349:7;21395:13;;-1:-1:-1;;;;;21395:13:0;21376:43;21420:5;21427:7;18791:4;21376:69;;-1:-1:-1;;;;;;21376:69:0;;;;;;;-1:-1:-1;;;;;9766:15:1;;;21376:69:0;;;9748:34:1;9818:15;;;;9798:18;;;9791:43;9850:18;;;9843:34;9683:18;;21376:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18139:126::-;18217:1;18192:13;-1:-1:-1;;;;;18192:13:0;:27;18184:36;;;;;;18231:13;:26;;-1:-1:-1;;;;;;18231:26:0;18247:10;18231:26;;;18139:126::o;18466:227::-;18622:13;;;18603:82;;;-1:-1:-1;;;18603:82:0;;;;18555:13;;;;-1:-1:-1;;;;;18622:13:0;;18603:80;;:82;;;;;18622:13;18603:82;;;;;18622:13;18603:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18603:82:0;;;;;;;;;;;;:::i;:::-;18596:89;;;;18466:227;;:::o;22067:457::-;22157:4;-1:-1:-1;;;;;22182:20:0;;22174:63;;;;-1:-1:-1;;;22174:63:0;;12449:2:1;22174:63:0;;;12431:21:1;12488:2;12468:18;;;12461:30;12527:32;12507:18;;;12500:60;12577:18;;22174:63:0;12421:180:1;22174:63:0;-1:-1:-1;;;;;22256:23:0;;22248:64;;;;-1:-1:-1;;;22248:64:0;;12808:2:1;22248:64:0;;;12790:21:1;12847:2;12827:18;;;12820:30;12886;12866:18;;;12859:58;12934:18;;22248:64:0;12780:178:1;22248:64:0;22342:13;;;22383:59;;;22394:10;22383:59;;;9272:34:1;-1:-1:-1;;;;;9342:15:1;;;9322:18;;;9315:43;9394:15;;;9374:18;;;9367:43;18791:4:0;9426:18:1;;;9419:34;9469:19;;;;9462:35;;;22383:59:0;;;;;;;;;;9206:19:1;;;22383:59:0;;;;-1:-1:-1;;;22323:120:0;;;22342:13;;;;22323:52;;:120;;22383:59;22323:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22476:9;-1:-1:-1;;;;;22459:35:0;22468:6;-1:-1:-1;;;;;22459:35:0;-1:-1:-1;;;;;;;;;;;22487:6:0;22459:35;;;;11260:25:1;;11248:2;11233:18;;11215:76;22459:35:0;;;;;;;;-1:-1:-1;22512:4:0;22067:457;;;;;:::o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;139:1;136;129:12;88:2;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:2;;;463:1;460;453:12;406:2;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;78:684;-1:-1:-1;;;;;;;78:684:1:o;767:160::-;832:20;;888:13;;881:21;871:32;;861:2;;917:1;914;907:12;861:2;813:114;;;:::o;932:497::-;986:5;1039:3;1032:4;1024:6;1020:17;1016:27;1006:2;;1057:1;1054;1047:12;1006:2;1086:6;1080:13;1112:18;1108:2;1105:26;1102:2;;;1134:18;;:::i;:::-;1178:55;1221:2;1202:13;;-1:-1:-1;;1198:27:1;1227:4;1194:38;1178:55;:::i;:::-;1258:2;1249:7;1242:19;1304:3;1297:4;1292:2;1284:6;1280:15;1276:26;1273:35;1270:2;;;1321:1;1318;1311:12;1270:2;1334:64;1395:2;1388:4;1379:7;1375:18;1368:4;1360:6;1356:17;1334:64;:::i;1434:247::-;1493:6;1546:2;1534:9;1525:7;1521:23;1517:32;1514:2;;;1562:1;1559;1552:12;1514:2;1601:9;1588:23;1620:31;1645:5;1620:31;:::i;1686:472::-;1779:6;1787;1795;1848:2;1836:9;1827:7;1823:23;1819:32;1816:2;;;1864:1;1861;1854:12;1816:2;1903:9;1890:23;1922:31;1947:5;1922:31;:::i;:::-;1972:5;-1:-1:-1;2029:2:1;2014:18;;2001:32;2042:33;2001:32;2042:33;:::i;:::-;1806:352;;2094:7;;-1:-1:-1;;;2148:2:1;2133:18;;;;2120:32;;1806:352::o;2163:388::-;2231:6;2239;2292:2;2280:9;2271:7;2267:23;2263:32;2260:2;;;2308:1;2305;2298:12;2260:2;2347:9;2334:23;2366:31;2391:5;2366:31;:::i;:::-;2416:5;-1:-1:-1;2473:2:1;2458:18;;2445:32;2486:33;2445:32;2486:33;:::i;:::-;2538:7;2528:17;;;2250:301;;;;;:::o;3017:829::-;3128:6;3136;3144;3152;3160;3168;3176;3229:3;3217:9;3208:7;3204:23;3200:33;3197:2;;;3246:1;3243;3236:12;3197:2;3285:9;3272:23;3304:31;3329:5;3304:31;:::i;:::-;3354:5;-1:-1:-1;3411:2:1;3396:18;;3383:32;3424:33;3383:32;3424:33;:::i;:::-;3476:7;-1:-1:-1;3530:2:1;3515:18;;3502:32;;-1:-1:-1;3581:2:1;3566:18;;3553:32;;-1:-1:-1;3637:3:1;3622:19;;3609:33;3686:4;3673:18;;3661:31;;3651:2;;3706:1;3703;3696:12;3651:2;3187:659;;;;-1:-1:-1;3187:659:1;;;;3729:7;3783:3;3768:19;;3755:33;;-1:-1:-1;3835:3:1;3820:19;;;3807:33;;3187:659;-1:-1:-1;;3187:659:1:o;3851:315::-;3919:6;3927;3980:2;3968:9;3959:7;3955:23;3951:32;3948:2;;;3996:1;3993;3986:12;3948:2;4035:9;4022:23;4054:31;4079:5;4054:31;:::i;:::-;4104:5;4156:2;4141:18;;;;4128:32;;-1:-1:-1;;;3938:228:1:o;4171:1375::-;4323:6;4331;4339;4392:2;4380:9;4371:7;4367:23;4363:32;4360:2;;;4408:1;4405;4398:12;4360:2;4448:9;4435:23;4477:18;4518:2;4510:6;4507:14;4504:2;;;4534:1;4531;4524:12;4504:2;4557:61;4610:7;4601:6;4590:9;4586:22;4557:61;:::i;:::-;4547:71;;4637:2;4627:12;;4692:2;4681:9;4677:18;4664:32;4721:2;4711:8;4708:16;4705:2;;;4737:1;4734;4727:12;4705:2;4760:63;4815:7;4804:8;4793:9;4789:24;4760:63;:::i;:::-;4750:73;;;4876:2;4865:9;4861:18;4848:32;4905:2;4895:8;4892:16;4889:2;;;4921:1;4918;4911:12;4889:2;4944:24;;;-1:-1:-1;4999:4:1;4991:13;;4987:27;-1:-1:-1;4977:2:1;;5028:1;5025;5018:12;4977:2;5064;5051:16;5087:60;5103:43;5143:2;5103:43;:::i;5087:60::-;5169:3;5193:2;5188:3;5181:15;5221:2;5216:3;5212:12;5205:19;;5252:2;5248;5244:11;5300:7;5295:2;5289;5286:1;5282:10;5278:2;5274:19;5270:28;5267:41;5264:2;;;5321:1;5318;5311:12;5264:2;5343:1;5334:10;;5353:163;5367:2;5364:1;5361:9;5353:163;;;5424:17;;5412:30;;5385:1;5378:9;;;;;5462:12;;;;5494;;5353:163;;;5357:3;5535:5;5525:15;;;;;;;4350:1196;;;;;:::o;5551:727::-;5633:6;5641;5649;5657;5710:2;5698:9;5689:7;5685:23;5681:32;5678:2;;;5726:1;5723;5716:12;5678:2;5749:26;5765:9;5749:26;:::i;:::-;5739:36;;5794:35;5825:2;5814:9;5810:18;5794:35;:::i;:::-;5784:45;;5880:2;5869:9;5865:18;5852:32;5903:18;5944:2;5936:6;5933:14;5930:2;;;5960:1;5957;5950:12;5930:2;5998:6;5987:9;5983:22;5973:32;;6043:7;6036:4;6032:2;6028:13;6024:27;6014:2;;6065:1;6062;6055:12;6014:2;6105;6092:16;6131:2;6123:6;6120:14;6117:2;;;6147:1;6144;6137:12;6117:2;6192:7;6187:2;6178:6;6174:2;6170:15;6166:24;6163:37;6160:2;;;6213:1;6210;6203:12;6160:2;5668:610;;;;-1:-1:-1;;6244:2:1;6236:11;;-1:-1:-1;;;5668:610:1:o;6283:1276::-;6403:6;6411;6419;6427;6480:3;6468:9;6459:7;6455:23;6451:33;6448:2;;;6497:1;6494;6487:12;6448:2;6526:9;6520:16;6510:26;;6580:2;6569:9;6565:18;6559:25;6603:18;6644:2;6636:6;6633:14;6630:2;;;6660:1;6657;6650:12;6630:2;6683:22;;;;6739:3;6721:16;;;6717:26;6714:2;;;6756:1;6753;6746:12;6714:2;6782:22;;:::i;:::-;6834:2;6828:9;6846:33;6871:7;6846:33;:::i;:::-;6888:22;;6949:2;6941:11;;6935:18;6965:16;;;6962:2;;;6994:1;6991;6984:12;6962:2;7030:56;7078:7;7067:8;7063:2;7059:17;7030:56;:::i;:::-;7025:2;7018:5;7014:14;7007:80;;7126:2;7122;7118:11;7112:18;7155:2;7145:8;7142:16;7139:2;;;7171:1;7168;7161:12;7139:2;7207:56;7255:7;7244:8;7240:2;7236:17;7207:56;:::i;:::-;7202:2;7195:5;7191:14;7184:80;;7303:2;7299;7295:11;7289:18;7332:2;7322:8;7319:16;7316:2;;;7348:1;7345;7338:12;7316:2;7384:56;7432:7;7421:8;7417:2;7413:17;7384:56;:::i;:::-;7379:2;7368:14;;;7361:80;;;;7505:2;7490:18;;7484:25;7534:18;;7528:25;6438:1121;;7372:5;;-1:-1:-1;6438:1121:1;;-1:-1:-1;;;;;;6438:1121:1:o;7564:562::-;7663:6;7671;7724:2;7712:9;7703:7;7699:23;7695:32;7692:2;;;7740:1;7737;7730:12;7692:2;7773:9;7767:16;7802:18;7843:2;7835:6;7832:14;7829:2;;;7859:1;7856;7849:12;7829:2;7882:61;7935:7;7926:6;7915:9;7911:22;7882:61;:::i;:::-;7872:71;;7989:2;7978:9;7974:18;7968:25;7952:41;;8018:2;8008:8;8005:16;8002:2;;;8034:1;8031;8024:12;8002:2;;8057:63;8112:7;8101:8;8090:9;8086:24;8057:63;:::i;:::-;8047:73;;;7682:444;;;;;:::o;8131:180::-;8190:6;8243:2;8231:9;8222:7;8218:23;8214:32;8211:2;;;8259:1;8256;8249:12;8211:2;-1:-1:-1;8282:23:1;;8201:110;-1:-1:-1;8201:110:1:o;8316:184::-;8386:6;8439:2;8427:9;8418:7;8414:23;8410:32;8407:2;;;8455:1;8452;8445:12;8407:2;-1:-1:-1;8478:16:1;;8397:103;-1:-1:-1;8397:103:1:o;8505:257::-;8546:3;8584:5;8578:12;8611:6;8606:3;8599:19;8627:63;8683:6;8676:4;8671:3;8667:14;8660:4;8653:5;8649:16;8627:63;:::i;:::-;8744:2;8723:15;-1:-1:-1;;8719:29:1;8710:39;;;;8751:4;8706:50;;8554:208;-1:-1:-1;;8554:208:1:o;10811:298::-;10994:6;10987:14;10980:22;10969:9;10962:41;11039:2;11034;11023:9;11019:18;11012:30;10943:4;11059:44;11099:2;11088:9;11084:18;11076:6;11059:44;:::i;11296:219::-;11445:2;11434:9;11427:21;11408:4;11465:44;11505:2;11494:9;11490:18;11482:6;11465:44;:::i;11520:381::-;11717:2;11706:9;11699:21;11680:4;11743:44;11783:2;11772:9;11768:18;11760:6;11743:44;:::i;:::-;11835:9;11827:6;11823:22;11818:2;11807:9;11803:18;11796:50;11863:32;11888:6;11880;11863:32;:::i;:::-;11855:40;11689:212;-1:-1:-1;;;;;11689:212:1:o;14081:252::-;14153:2;14147:9;14195:3;14183:16;;14229:18;14214:34;;14250:22;;;14211:62;14208:2;;;14276:18;;:::i;:::-;14312:2;14305:22;14127:206;:::o;14338:275::-;14409:2;14403:9;14474:2;14455:13;;-1:-1:-1;;14451:27:1;14439:40;;14509:18;14494:34;;14530:22;;;14491:62;14488:2;;;14556:18;;:::i;:::-;14592:2;14585:22;14383:230;;-1:-1:-1;14383:230:1:o;14618:183::-;14678:4;14711:18;14703:6;14700:30;14697:2;;;14733:18;;:::i;:::-;-1:-1:-1;14778:1:1;14774:14;14790:4;14770:25;;14687:114::o;14806:258::-;14878:1;14888:113;14902:6;14899:1;14896:13;14888:113;;;14978:11;;;14972:18;14959:11;;;14952:39;14924:2;14917:10;14888:113;;;15019:6;15016:1;15013:13;15010:2;;;-1:-1:-1;;15054:1:1;15036:16;;15029:27;14859:205::o;15069:232::-;15108:3;-1:-1:-1;;15129:17:1;;15126:2;;;15188:10;15183:3;15179:20;15176:1;15169:31;15223:4;15220:1;15213:15;15251:4;15248:1;15241:15;15126:2;-1:-1:-1;15293:1:1;15282:13;;15116:185::o;15306:127::-;15367:10;15362:3;15358:20;15355:1;15348:31;15398:4;15395:1;15388:15;15422:4;15419:1;15412:15;15438:127;15499:10;15494:3;15490:20;15487:1;15480:31;15530:4;15527:1;15520:15;15554:4;15551:1;15544:15;15570:131;-1:-1:-1;;;;;15645:31:1;;15635:42;;15625:2;;15691:1;15688;15681:12;15625:2;15615:86;:::o
Swarm Source
ipfs://87b2fb6dc11af603f6e37d453b8c1f75e07a70b03217ffebaaf60817b2ff6a5f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.