Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13505777 | 1198 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ItemInteroperableInterface
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-03 */ // 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 decimals() external view returns(uint256); 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 newValues) external returns(Header[] memory oldValues); function interoperableOf(uint256 itemId) external view returns(address); } // 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 { event Collection(address indexed from, address indexed to, bytes32 indexed collectionId); function interoperableInterfaceModel() external view returns(address); function uri() external view returns(string memory); function plainUri() external view returns(string memory); function dynamicUriResolver() external view returns(address); function hostInitializer() 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 setApprovalForAllByCollectionHost(bytes32 collectionId, address account, address operator, bool approved) external; 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 burnFrom(address account, 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 burnFrom(address account, uint256 amount) external override { require(account != address(0), "burn zero address"); IItemMainInterface(mainInterface).mintTransferOrBurn(false, abi.encode(msg.sender, account, 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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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
608060405234801561001057600080fd5b5061154e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063d2a5605e11610071578063d2a5605e14610241578063d505accf14610254578063dd62ed3e14610267578063e1c7392a1461027a578063e6daf9241461028257600080fd5b806379cc6790146101fa5780637ecebe001461020d57806395d89b4114610220578063a9059cbb14610228578063ca6158cb1461023b57600080fd5b806323b872dd116100f457806323b872dd146101a8578063313ce567146101bb5780633644e515146101ca57806342966c68146101d257806370a08231146101e757600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd146101675780631836b97d1461017d575b600080fd5b61012e610298565b60405161013b9190611380565b60405180910390f35b610157610152366004610fec565b610327565b604051901515815260200161013b565b61016f6103e0565b60405190815260200161013b565b600054610190906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101576101b6366004610efb565b610468565b6040516012815260200161013b565b61016f610475565b6101e56101e03660046112d3565b6104fd565b005b61016f6101f5366004610ede565b6105b1565b6101e5610208366004610fec565b610647565b61016f61021b366004610ede565b61074b565b61012e610764565b610157610236366004610fec565b6107f3565b3061016f565b6101e561024f3660046110fd565b610807565b6101e5610262366004610f75565b610a4d565b61016f610275366004610f3c565b610b20565b6101e5610bba565b61028a610be4565b60405161013b929190611393565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156102de57600080fd5b505afa1580156102f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261031a919081019061118b565b5050602001519392505050565b600080546001600160a01b0316634dc5ecb3338585306040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561039157600080fd5b505af11580156103a5573d6000803e3d6000fd5b50506040518481526001600160a01b03861692503391506000805160206114f98339815191529060200160405180910390a350600192915050565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561042457600080fd5b505afa158015610438573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610460919081019061118b565b949350505050565b6000610460848484610c6c565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b1580156104b957600080fd5b505afa1580156104cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104f5919081019061118b565b509392505050565b600080546001600160a01b031690630a19302690338082308760405160200161052a959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610556929190611365565b600060405180830381600087803b15801561057057600080fd5b505af1158015610584573d6000803e3d6000fd5b5050604051838152600092503391506000805160206114d98339815191529060200160405180910390a350565b600080546001600160a01b031662fdd58e83305b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160206040518083038186803b15801561060957600080fd5b505afa15801561061d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064191906112ec565b92915050565b6001600160a01b0382166106965760405162461bcd60e51b81526020600482015260116024820152706275726e207a65726f206164647265737360781b60448201526064015b60405180910390fd5b600080546001600160a01b031690630a1930269033858230876040516020016106c3959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016106ef929190611365565b600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b5050604051838152600092503391506000805160206114d98339815191529060200160405180910390a35050565b600080546001600160a01b031663502e1a1683306105c5565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e6919081019061118b565b5050604001519392505050565b6000610800338484610c6c565b9392505050565b6000546001600160a01b031633146108505760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161068d565b82156109ab576000808061086684860186611018565b92509250925060005b83518110156109a25787156109095782818151811061089057610890611494565b60200260200101516001600160a01b03168482815181106108b3576108b3611494565b60200260200101516001600160a01b03166000805160206114f98339815191528484815181106108e5576108e5611494565b60200260200101516040516108fc91815260200190565b60405180910390a3610990565b82818151811061091b5761091b611494565b60200260200101516001600160a01b031684828151811061093e5761093e611494565b60200260200101516001600160a01b03166000805160206114d983398151915284848151811061097057610970611494565b602002602001015160405161098791815260200190565b60405180910390a35b8061099a8161146b565b91505061086f565b50505050610a47565b600080806109bb84860186610efb565b9250925092508615610a0757816001600160a01b0316836001600160a01b03166000805160206114f9833981519152836040516109fa91815260200190565b60405180910390a3610a43565b816001600160a01b0316836001600160a01b03166000805160206114d983398151915283604051610a3a91815260200190565b60405180910390a35b5050505b50505050565b6000546001600160a01b03166359ded0fe306040516001600160e01b031960e084901b16815260048101919091526001600160a01b03808b16602483015289166044820152606481018890526084810187905260ff861660a482015260c4810185905260e4810184905261010401600060405180830381600087803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03166000805160206114f983398151915287604051610a3a91815260200190565b600080546001600160a01b031663598af9e78484306040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260640160206040518083038186803b158015610b8257600080fd5b505afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080091906112ec565b6000546001600160a01b031615610bd057600080fd5b600080546001600160a01b03191633179055565b60008054604080516339b6be4960e21b8152905160609384936001600160a01b03169263e6daf9249260048083019392829003018186803b158015610c2857600080fd5b505afa158015610c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c64919081019061126f565b915091509091565b60006001600160a01b038416610cc45760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161068d565b6001600160a01b038316610d1a5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161068d565b600080546001600160a01b031690630a193026903387873088604051602001610d47959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610d73929190611365565b600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b03166000805160206114d983398151915284604051610dd891815260200190565b60405180910390a35060019392505050565b600082601f830112610dfb57600080fd5b81356020610e10610e0b8361141b565b6113ea565b80838252828201915082860187848660051b8901011115610e3057600080fd5b60005b85811015610e58578135610e46816114c0565b84529284019290840190600101610e33565b5090979650505050505050565b80358015158114610e7557600080fd5b919050565b600082601f830112610e8b57600080fd5b815167ffffffffffffffff811115610ea557610ea56114aa565b610eb8601f8201601f19166020016113ea565b818152846020838601011115610ecd57600080fd5b61046082602083016020870161143f565b600060208284031215610ef057600080fd5b8135610800816114c0565b600080600060608486031215610f1057600080fd5b8335610f1b816114c0565b92506020840135610f2b816114c0565b929592945050506040919091013590565b60008060408385031215610f4f57600080fd5b8235610f5a816114c0565b91506020830135610f6a816114c0565b809150509250929050565b600080600080600080600060e0888a031215610f9057600080fd5b8735610f9b816114c0565b96506020880135610fab816114c0565b95506040880135945060608801359350608088013560ff81168114610fcf57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610fff57600080fd5b823561100a816114c0565b946020939093013593505050565b60008060006060848603121561102d57600080fd5b833567ffffffffffffffff8082111561104557600080fd5b61105187838801610dea565b945060209150818601358181111561106857600080fd5b61107488828901610dea565b94505060408601358181111561108957600080fd5b86019050601f8101871361109c57600080fd5b80356110aa610e0b8261141b565b8082825284820191508484018a868560051b87010111156110ca57600080fd5b600094505b838510156110ed5780358352600194909401939185019185016110cf565b5080955050505050509250925092565b6000806000806060858703121561111357600080fd5b61111c85610e65565b935061112a60208601610e65565b9250604085013567ffffffffffffffff8082111561114757600080fd5b818701915087601f83011261115b57600080fd5b81358181111561116a57600080fd5b88602082850101111561117c57600080fd5b95989497505060200194505050565b600080600080608085870312156111a157600080fd5b84519350602085015167ffffffffffffffff808211156111c057600080fd5b90860190608082890312156111d457600080fd5b6111dc6113c1565b82516111e7816114c0565b81526020830151828111156111fb57600080fd5b6112078a828601610e7a565b60208301525060408301518281111561121f57600080fd5b61122b8a828601610e7a565b60408301525060608301518281111561124357600080fd5b61124f8a828601610e7a565b60608381019190915260408a0151990151979a9199509095505050505050565b6000806040838503121561128257600080fd5b825167ffffffffffffffff8082111561129a57600080fd5b6112a686838701610e7a565b935060208501519150808211156112bc57600080fd5b506112c985828601610e7a565b9150509250929050565b6000602082840312156112e557600080fd5b5035919050565b6000602082840312156112fe57600080fd5b5051919050565b6000815180845261131d81602086016020860161143f565b601f01601f19169290920160200192915050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b82151581526040602082015260006104606040830184611305565b6020815260006108006020830184611305565b6040815260006113a66040830185611305565b82810360208401526113b88185611305565b95945050505050565b6040516080810167ffffffffffffffff811182821017156113e4576113e46114aa565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611413576114136114aa565b604052919050565b600067ffffffffffffffff821115611435576114356114aa565b5060051b60200190565b60005b8381101561145a578181015183820152602001611442565b83811115610a475750506000910152565b600060001982141561148d57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146114d557600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220d922c58b49c28044de048f0b8eb389b2db7621d53a1817ef78aab2939826328064736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063d2a5605e11610071578063d2a5605e14610241578063d505accf14610254578063dd62ed3e14610267578063e1c7392a1461027a578063e6daf9241461028257600080fd5b806379cc6790146101fa5780637ecebe001461020d57806395d89b4114610220578063a9059cbb14610228578063ca6158cb1461023b57600080fd5b806323b872dd116100f457806323b872dd146101a8578063313ce567146101bb5780633644e515146101ca57806342966c68146101d257806370a08231146101e757600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd146101675780631836b97d1461017d575b600080fd5b61012e610298565b60405161013b9190611380565b60405180910390f35b610157610152366004610fec565b610327565b604051901515815260200161013b565b61016f6103e0565b60405190815260200161013b565b600054610190906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101576101b6366004610efb565b610468565b6040516012815260200161013b565b61016f610475565b6101e56101e03660046112d3565b6104fd565b005b61016f6101f5366004610ede565b6105b1565b6101e5610208366004610fec565b610647565b61016f61021b366004610ede565b61074b565b61012e610764565b610157610236366004610fec565b6107f3565b3061016f565b6101e561024f3660046110fd565b610807565b6101e5610262366004610f75565b610a4d565b61016f610275366004610f3c565b610b20565b6101e5610bba565b61028a610be4565b60405161013b929190611393565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156102de57600080fd5b505afa1580156102f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261031a919081019061118b565b5050602001519392505050565b600080546001600160a01b0316634dc5ecb3338585306040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015260448301526064820152608401600060405180830381600087803b15801561039157600080fd5b505af11580156103a5573d6000803e3d6000fd5b50506040518481526001600160a01b03861692503391506000805160206114f98339815191529060200160405180910390a350600192915050565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b15801561042457600080fd5b505afa158015610438573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610460919081019061118b565b949350505050565b6000610460848484610c6c565b6000805460405163898e621960e01b81523060048201526001600160a01b039091169063898e62199060240160006040518083038186803b1580156104b957600080fd5b505afa1580156104cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104f5919081019061118b565b509392505050565b600080546001600160a01b031690630a19302690338082308760405160200161052a959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610556929190611365565b600060405180830381600087803b15801561057057600080fd5b505af1158015610584573d6000803e3d6000fd5b5050604051838152600092503391506000805160206114d98339815191529060200160405180910390a350565b600080546001600160a01b031662fdd58e83305b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440160206040518083038186803b15801561060957600080fd5b505afa15801561061d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064191906112ec565b92915050565b6001600160a01b0382166106965760405162461bcd60e51b81526020600482015260116024820152706275726e207a65726f206164647265737360781b60448201526064015b60405180910390fd5b600080546001600160a01b031690630a1930269033858230876040516020016106c3959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016106ef929190611365565b600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b5050604051838152600092503391506000805160206114d98339815191529060200160405180910390a35050565b600080546001600160a01b031663502e1a1683306105c5565b6000805460405163898e621960e01b8152306004820152606092916001600160a01b03169063898e62199060240160006040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e6919081019061118b565b5050604001519392505050565b6000610800338484610c6c565b9392505050565b6000546001600160a01b031633146108505760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161068d565b82156109ab576000808061086684860186611018565b92509250925060005b83518110156109a25787156109095782818151811061089057610890611494565b60200260200101516001600160a01b03168482815181106108b3576108b3611494565b60200260200101516001600160a01b03166000805160206114f98339815191528484815181106108e5576108e5611494565b60200260200101516040516108fc91815260200190565b60405180910390a3610990565b82818151811061091b5761091b611494565b60200260200101516001600160a01b031684828151811061093e5761093e611494565b60200260200101516001600160a01b03166000805160206114d983398151915284848151811061097057610970611494565b602002602001015160405161098791815260200190565b60405180910390a35b8061099a8161146b565b91505061086f565b50505050610a47565b600080806109bb84860186610efb565b9250925092508615610a0757816001600160a01b0316836001600160a01b03166000805160206114f9833981519152836040516109fa91815260200190565b60405180910390a3610a43565b816001600160a01b0316836001600160a01b03166000805160206114d983398151915283604051610a3a91815260200190565b60405180910390a35b5050505b50505050565b6000546001600160a01b03166359ded0fe306040516001600160e01b031960e084901b16815260048101919091526001600160a01b03808b16602483015289166044820152606481018890526084810187905260ff861660a482015260c4810185905260e4810184905261010401600060405180830381600087803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03166000805160206114f983398151915287604051610a3a91815260200190565b600080546001600160a01b031663598af9e78484306040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260640160206040518083038186803b158015610b8257600080fd5b505afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080091906112ec565b6000546001600160a01b031615610bd057600080fd5b600080546001600160a01b03191633179055565b60008054604080516339b6be4960e21b8152905160609384936001600160a01b03169263e6daf9249260048083019392829003018186803b158015610c2857600080fd5b505afa158015610c3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c64919081019061126f565b915091509091565b60006001600160a01b038416610cc45760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161068d565b6001600160a01b038316610d1a5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161068d565b600080546001600160a01b031690630a193026903387873088604051602001610d47959493929190611331565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610d73929190611365565b600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50505050826001600160a01b0316846001600160a01b03166000805160206114d983398151915284604051610dd891815260200190565b60405180910390a35060019392505050565b600082601f830112610dfb57600080fd5b81356020610e10610e0b8361141b565b6113ea565b80838252828201915082860187848660051b8901011115610e3057600080fd5b60005b85811015610e58578135610e46816114c0565b84529284019290840190600101610e33565b5090979650505050505050565b80358015158114610e7557600080fd5b919050565b600082601f830112610e8b57600080fd5b815167ffffffffffffffff811115610ea557610ea56114aa565b610eb8601f8201601f19166020016113ea565b818152846020838601011115610ecd57600080fd5b61046082602083016020870161143f565b600060208284031215610ef057600080fd5b8135610800816114c0565b600080600060608486031215610f1057600080fd5b8335610f1b816114c0565b92506020840135610f2b816114c0565b929592945050506040919091013590565b60008060408385031215610f4f57600080fd5b8235610f5a816114c0565b91506020830135610f6a816114c0565b809150509250929050565b600080600080600080600060e0888a031215610f9057600080fd5b8735610f9b816114c0565b96506020880135610fab816114c0565b95506040880135945060608801359350608088013560ff81168114610fcf57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610fff57600080fd5b823561100a816114c0565b946020939093013593505050565b60008060006060848603121561102d57600080fd5b833567ffffffffffffffff8082111561104557600080fd5b61105187838801610dea565b945060209150818601358181111561106857600080fd5b61107488828901610dea565b94505060408601358181111561108957600080fd5b86019050601f8101871361109c57600080fd5b80356110aa610e0b8261141b565b8082825284820191508484018a868560051b87010111156110ca57600080fd5b600094505b838510156110ed5780358352600194909401939185019185016110cf565b5080955050505050509250925092565b6000806000806060858703121561111357600080fd5b61111c85610e65565b935061112a60208601610e65565b9250604085013567ffffffffffffffff8082111561114757600080fd5b818701915087601f83011261115b57600080fd5b81358181111561116a57600080fd5b88602082850101111561117c57600080fd5b95989497505060200194505050565b600080600080608085870312156111a157600080fd5b84519350602085015167ffffffffffffffff808211156111c057600080fd5b90860190608082890312156111d457600080fd5b6111dc6113c1565b82516111e7816114c0565b81526020830151828111156111fb57600080fd5b6112078a828601610e7a565b60208301525060408301518281111561121f57600080fd5b61122b8a828601610e7a565b60408301525060608301518281111561124357600080fd5b61124f8a828601610e7a565b60608381019190915260408a0151990151979a9199509095505050505050565b6000806040838503121561128257600080fd5b825167ffffffffffffffff8082111561129a57600080fd5b6112a686838701610e7a565b935060208501519150808211156112bc57600080fd5b506112c985828601610e7a565b9150509250929050565b6000602082840312156112e557600080fd5b5035919050565b6000602082840312156112fe57600080fd5b5051919050565b6000815180845261131d81602086016020860161143f565b601f01601f19169290920160200192915050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b82151581526040602082015260006104606040830184611305565b6020815260006108006020830184611305565b6040815260006113a66040830185611305565b82810360208401526113b88185611305565b95945050505050565b6040516080810167ffffffffffffffff811182821017156113e4576113e46114aa565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611413576114136114aa565b604052919050565b600067ffffffffffffffff821115611435576114356114aa565b5060051b60200190565b60005b8381101561145a578181015183820152602001611442565b83811115610a475750506000910152565b600060001982141561148d57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146114d557600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220d922c58b49c28044de048f0b8eb389b2db7621d53a1817ef78aab2939826328064736f6c63430008060033
Deployed Bytecode Sourcemap
17152:4846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19730:188;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20932:256;;;;;;:::i;:::-;;:::i;:::-;;;10784:14:1;;10777:22;10759:41;;10747:2;10732:18;20932:256:0;10714:92:1;20383:173:0;;;:::i;:::-;;;11260:25:1;;;11248:2;11233:18;20383:173:0;11215:76:1;17228:37:0;;;;;-1:-1:-1;;;;;17228:37:0;;;;;;-1:-1:-1;;;;;8931:32:1;;;8913:51;;8901:2;8886:18;17228:37:0;8868:102:1;21359:171:0;;;;;;:::i;:::-;;:::i;20126:87::-;;;20203:2;14380:36:1;;14368:2;14353:18;20126:87:0;14335::1;17408:185:0;;;:::i;19138:248::-;;;;;;:::i;:::-;;:::i;:::-;;20564:165;;;;;;:::i;:::-;;:::i;19394:328::-;;;;;;:::i;:::-;;:::i;20221:154::-;;;;;;:::i;:::-;;:::i;19926:192::-;;;:::i;21196:155::-;;;;;;:::i;:::-;;:::i;17836:104::-;17926:4;17836:104;;17948:886;;;;;;:::i;:::-;;:::i;18842:288::-;;;;;;:::i;:::-;;:::i;20737:187::-;;;;;;:::i;:::-;;:::i;17274:126::-;;;:::i;17601:227::-;;;:::i;:::-;;;;;;;;:::i;19730:188::-;19807:20;19852:13;;19833:48;;-1:-1:-1;;;19833:48:0;;17926:4;19833:48;;;11260:25:1;19778:13:0;;19807:20;-1:-1:-1;;;;;19852:13:0;;19833:38;;11233:18:1;;19833:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19833:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;19899:11:0;;;;19730:188;-1:-1:-1;;;19730:188:0:o;20932:256::-;21008:4;21044:13;;-1:-1:-1;;;;;21044:13:0;21025:41;21067:10;21079:7;21088:6;17926:4;21025:80;;-1:-1:-1;;;;;;21025:80:0;;;;;;;-1:-1:-1;;;;;10175:15:1;;;21025:80:0;;;10157:34:1;10227:15;;;;10207:18;;;10200:43;10259:18;;;10252:34;10302:18;;;10295:34;10091:19;;21025:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21121:37:0;;11260:25:1;;;-1:-1:-1;;;;;21121:37:0;;;-1:-1:-1;21130:10:0;;-1:-1:-1;;;;;;;;;;;;21121:37:0;11248:2:1;11233:18;21121:37:0;;;;;;;-1:-1:-1;21176:4:0;20932:256;;;;:::o;20383:173::-;20438:24;20519:13;;20500:48;;-1:-1:-1;;;20500:48:0;;17926:4;20500:48;;;11260:25:1;-1:-1:-1;;;;;20519:13:0;;;;20500:38;;11233:18:1;;20500:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20500:48:0;;;;;;;;;;;;:::i;:::-;20475:73;20383:173;-1:-1:-1;;;;20383:173:0:o;21359:171::-;21458:4;21482:40;21496:6;21504:9;21515:6;21482:13;:40::i;17408:185::-;17468:28;17556:13;;17537:48;;-1:-1:-1;;;17537:48:0;;17926:4;17537:48;;;11260:25:1;-1:-1:-1;;;;;17556:13:0;;;;17537:38;;11233:18:1;;17537:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17537:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17509:76:0;17408:185;-1:-1:-1;;;17408:185:0:o;19138:248::-;19216:13;;;-1:-1:-1;;;;;19216:13:0;;19197:52;;19268:10;;19216:13;17926:4;19314:6;19257:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19197:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19338:40:0;;11260:25:1;;;19367:1:0;;-1:-1:-1;19347:10:0;;-1:-1:-1;;;;;;;;;;;;19338:40:0;11248:2:1;11233:18;19338:40:0;;;;;;;19138:248;:::o;20564:165::-;20632:7;20678:13;;-1:-1:-1;;;;;20678:13:0;20659:43;20703:7;17926:4;20712:8;20659:62;;-1:-1:-1;;;;;;20659:62:0;;;;;;;-1:-1:-1;;;;;10532:32:1;;;20659:62:0;;;10514:51:1;10581:18;;;10574:34;10487:18;;20659:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20652:69;20564:165;-1:-1:-1;;20564:165:0:o;19394:328::-;-1:-1:-1;;;;;19482:21:0;;19474:51;;;;-1:-1:-1;;;19474:51:0;;13165:2:1;19474:51:0;;;13147:21:1;13204:2;13184:18;;;13177:30;-1:-1:-1;;;13223:18:1;;;13216:47;13280:18;;19474:51:0;;;;;;;;;19555:13;;;-1:-1:-1;;;;;19555:13:0;;19536:52;;19607:10;19619:7;19555:13;17926:4;19650:6;19596:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19536:122;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19674:40:0;;11260:25:1;;;19703:1:0;;-1:-1:-1;19683:10:0;;-1:-1:-1;;;;;;;;;;;;19674:40:0;11248:2:1;11233:18;19674:40:0;;;;;;;19394:328;;:::o;20221:154::-;20283:7;20329:13;;-1:-1:-1;;;;;20329:13:0;20310:40;20351:5;17926:4;20358:8;17836:104;19926:192;20005:20;20050:13;;20031:48;;-1:-1:-1;;;20031:48:0;;17926:4;20031:48;;;11260:25:1;19976:13:0;;20005:20;-1:-1:-1;;;;;20050:13:0;;20031:38;;11233:18:1;;20031:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20031:48:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;20097:13:0;;;;19926:192;-1:-1:-1;;;19926:192:0:o;21196:155::-;21275:4;21299:44;21313:10;21325:9;21336:6;21299:13;:44::i;:::-;21292:51;21196:155;-1:-1:-1;;;21196:155:0:o;17948:886::-;18070:13;;-1:-1:-1;;;;;18070:13:0;18056:10;:27;18048:52;;;;-1:-1:-1;;;18048:52:0;;12108:2:1;18048:52:0;;;12090:21:1;12147:2;12127:18;;;12120:30;-1:-1:-1;;;12166:18:1;;;12159:42;12218:18;;18048:52:0;12080:162:1;18048:52:0;18114:7;18111:469;;;18139:22;;;18213:51;;;;18224:4;18213:51;:::i;:::-;18138:126;;;;;;18283:9;18279:269;18302:5;:12;18298:1;:16;18279:269;;;18343:10;18340:193;;;18402:3;18406:1;18402:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;18383:38:0;18392:5;18398:1;18392:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;18383:38:0;-1:-1:-1;;;;;;;;;;;18410:7:0;18418:1;18410:10;;;;;;;;:::i;:::-;;;;;;;18383:38;;;;11260:25:1;;11248:2;11233:18;;11215:76;18383:38:0;;;;;;;;18340:193;;;18494:3;18498:1;18494:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;18475:38:0;18484:5;18490:1;18484:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;18475:38:0;-1:-1:-1;;;;;;;;;;;18502:7:0;18510:1;18502:10;;;;;;;;:::i;:::-;;;;;;;18475:38;;;;11260:25:1;;11248:2;11233:18;;11215:76;18475:38:0;;;;;;;;18340:193;18316:3;;;;:::i;:::-;;;;18279:269;;;;18562:7;;;;;18111:469;18591:12;;;18635:45;;;;18646:4;18635:45;:::i;:::-;18590:90;;;;;;18694:10;18691:136;;;18741:2;-1:-1:-1;;;;;18726:26:0;18735:4;-1:-1:-1;;;;;18726:26:0;-1:-1:-1;;;;;;;;;;;18745:6:0;18726:26;;;;11260:25:1;;11248:2;11233:18;;11215:76;18726:26:0;;;;;;;;18691:136;;;18805:2;-1:-1:-1;;;;;18790:26:0;18799:4;-1:-1:-1;;;;;18790:26:0;-1:-1:-1;;;;;;;;;;;18809:6:0;18790:26;;;;11260:25:1;;11248:2;11233:18;;11215:76;18790:26:0;;;;;;;;18691:136;18037:797;;;17948:886;;;;;:::o;18842:288::-;19002:13;;-1:-1:-1;;;;;19002:13:0;18983:40;17926:4;18983:92;;-1:-1:-1;;;;;;18983:92:0;;;;;;;;;;13830:25:1;;;;-1:-1:-1;;;;;13929:15:1;;;13909:18;;;13902:43;13981:15;;13961:18;;;13954:43;14013:18;;;14006:34;;;14056:19;;;14049:35;;;14133:4;14121:17;;14100:19;;;14093:46;14155:19;;;14148:35;;;14199:19;;;14192:35;;;13802:19;;18983:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19107:7;-1:-1:-1;;;;;19091:31:0;19100:5;-1:-1:-1;;;;;19091:31:0;-1:-1:-1;;;;;;;;;;;19116:5:0;19091:31;;;;11260:25:1;;11248:2;11233:18;;11215:76;20737:187:0;20820:7;20866:13;;-1:-1:-1;;;;;20866:13:0;20847:43;20891:5;20898:7;17926:4;20847:69;;-1:-1:-1;;;;;;20847:69:0;;;;;;;-1:-1:-1;;;;;9766:15:1;;;20847:69:0;;;9748:34:1;9818:15;;;;9798:18;;;9791:43;9850:18;;;9843:34;9683:18;;20847:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17274:126::-;17352:1;17327:13;-1:-1:-1;;;;;17327:13:0;:27;17319:36;;;;;;17366:13;:26;;-1:-1:-1;;;;;;17366:26:0;17382:10;17366:26;;;17274:126::o;17601:227::-;17757:13;;;17738:82;;;-1:-1:-1;;;17738:82:0;;;;17690:13;;;;-1:-1:-1;;;;;17757:13:0;;17738:80;;:82;;;;;17757:13;17738:82;;;;;17757:13;17738:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17738:82:0;;;;;;;;;;;;:::i;:::-;17731:89;;;;17601:227;;:::o;21538:457::-;21628:4;-1:-1:-1;;;;;21653:20:0;;21645:63;;;;-1:-1:-1;;;21645:63:0;;12449:2:1;21645:63:0;;;12431:21:1;12488:2;12468:18;;;12461:30;12527:32;12507:18;;;12500:60;12577:18;;21645:63:0;12421:180:1;21645:63:0;-1:-1:-1;;;;;21727:23:0;;21719:64;;;;-1:-1:-1;;;21719:64:0;;12808:2:1;21719:64:0;;;12790:21:1;12847:2;12827:18;;;12820:30;12886;12866:18;;;12859:58;12934:18;;21719:64:0;12780:178:1;21719:64:0;21813:13;;;-1:-1:-1;;;;;21813:13:0;;21794:52;;21865:10;21877:6;21885:9;17926:4;21906:6;21854:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21794:120;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21947:9;-1:-1:-1;;;;;21930:35:0;21939:6;-1:-1:-1;;;;;21930:35:0;-1:-1:-1;;;;;;;;;;;21958:6:0;21930:35;;;;11260:25:1;;11248:2;11233:18;;11215:76;21930:35:0;;;;;;;;-1:-1:-1;21983:4:0;21538: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;8975:528::-;-1:-1:-1;;;;;9290:15:1;;;9272:34;;9342:15;;;9337:2;9322:18;;9315:43;9394:15;;;;9389:2;9374:18;;9367:43;9441:2;9426:18;;9419:34;;;;9484:3;9469:19;;9462:35;;;;9221:3;9206:19;;9188:315::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;14427:252::-;14499:2;14493:9;14541:3;14529:16;;14575:18;14560:34;;14596:22;;;14557:62;14554:2;;;14622:18;;:::i;:::-;14658:2;14651:22;14473:206;:::o;14684:275::-;14755:2;14749:9;14820:2;14801:13;;-1:-1:-1;;14797:27:1;14785:40;;14855:18;14840:34;;14876:22;;;14837:62;14834:2;;;14902:18;;:::i;:::-;14938:2;14931:22;14729:230;;-1:-1:-1;14729:230:1:o;14964:183::-;15024:4;15057:18;15049:6;15046:30;15043:2;;;15079:18;;:::i;:::-;-1:-1:-1;15124:1:1;15120:14;15136:4;15116:25;;15033:114::o;15152:258::-;15224:1;15234:113;15248:6;15245:1;15242:13;15234:113;;;15324:11;;;15318:18;15305:11;;;15298:39;15270:2;15263:10;15234:113;;;15365:6;15362:1;15359:13;15356:2;;;-1:-1:-1;;15400:1:1;15382:16;;15375:27;15205:205::o;15415:232::-;15454:3;-1:-1:-1;;15475:17:1;;15472:2;;;15534:10;15529:3;15525:20;15522:1;15515:31;15569:4;15566:1;15559:15;15597:4;15594:1;15587:15;15472:2;-1:-1:-1;15639:1:1;15628:13;;15462:185::o;15652:127::-;15713:10;15708:3;15704:20;15701:1;15694:31;15744:4;15741:1;15734:15;15768:4;15765:1;15758:15;15784:127;15845:10;15840:3;15836:20;15833:1;15826:31;15876:4;15873:1;15866:15;15900:4;15897:1;15890:15;15916:131;-1:-1:-1;;;;;15991:31:1;;15981:42;;15971:2;;16037:1;16034;16027:12;15971:2;15961:86;:::o
Swarm Source
ipfs://d922c58b49c28044de048f0b8eb389b2db7621d53a1817ef78aab29398263280
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.