Polygon Sponsored slots available. Book your slot here!
Overview
Max Total Supply
3,180,000,000 GMEE
Holders
72,605 ( 0.006%)
Market
Price
$0.0153 @ 0.021695 POL (+15.47%)
Onchain Market Cap
$48,747,078.60
Circulating Supply Market Cap
$20,620,879.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
800 GMEEValue
$12.26 ( ~17.3509 POL) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PolygonGMEE
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-09-08 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/types/[email protected] // SPDX-License-Identifier: MIT // Partially derived from OpenZeppelin: // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol pragma solidity >=0.7.6 <0.8.0; /** * @dev Upgrades the address type to check if it is a contract. */ library AddressIsContract { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20Wrapper * Wraps ERC20 functions to support non-standard implementations which do not return a bool value. * Calls to the wrapped functions revert only if they throw or if they return false. */ library ERC20Wrapper { using AddressIsContract for address; function wrappedTransfer( IWrappedERC20 token, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function wrappedTransferFrom( IWrappedERC20 token, address from, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function wrappedApprove( IWrappedERC20 token, address spender, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal { address target = address(token); require(target.isContract(), "ERC20Wrapper: non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = target.call(callData); if (success) { if (data.length != 0) { require(abi.decode(data, (bool)), "ERC20Wrapper: operation failed"); } } else { // revert using a standard revert message if (data.length == 0) { revert("ERC20Wrapper: operation failed"); } // revert using the revert message coming from the call assembly { let size := mload(data) revert(add(32, data), size) } } } } interface IWrappedERC20 { function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function approve(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-core-1.1.1/contracts/metatx/[email protected] pragma solidity >=0.7.6 <0.8.0; /* * Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner. */ abstract contract ManagedIdentity { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { return msg.data; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC-173 Contract Ownership Standard * Note: the ERC-165 identifier for this interface is 0x7f5828d0 */ interface IERC173 { /** * Event emited when ownership of a contract changes. * @param previousOwner the previous owner. * @param newOwner the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * Get the address of the owner * @return The address of the owner. */ function owner() external view returns (address); /** * Set the address of the new owner of the contract * Set newOwner to address(0) to renounce any ownership. * @dev Emits an {OwnershipTransferred} event. * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership. */ function transferOwnership(address newOwner) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is ManagedIdentity, IERC173 { address internal _owner; /** * Initializes the contract, setting the deployer as the initial owner. * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event. */ constructor(address owner_) { _owner = owner_; emit OwnershipTransferred(address(0), owner_); } /** * Gets the address of the current contract owner. */ function owner() public view virtual override returns (address) { return _owner; } /** * See {IERC173-transferOwnership(address)} * @dev Reverts if the sender is not the current contract owner. * @param newOwner the address of the new owner. Use the zero address to renounce the ownership. */ function transferOwnership(address newOwner) public virtual override { _requireOwnership(_msgSender()); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Reverts if `account` is not the contract owner. * @param account the account to test. */ function _requireOwnership(address account) internal virtual { require(account == this.owner(), "Ownable: not the owner"); } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract Recoverable is ManagedIdentity, Ownable { using ERC20Wrapper for IWrappedERC20; /** * Extract ERC20 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC20 tokens * so that the extraction is limited to only amounts sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `tokens` and `amounts` do not have the same length. * @dev Reverts if one of `tokens` is does not implement the ERC20 transfer function. * @dev Reverts if one of the ERC20 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param tokens the list of ERC20 token addresses. * @param amounts the list of token amounts to transfer. */ function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IWrappedERC20(tokens[i]).wrappedTransfer(accounts[i], amounts[i]); } } /** * Extract ERC721 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC721 tokens * so that the extraction is limited to only tokens sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `contracts` and `amounts` do not have the same length. * @dev Reverts if one of `contracts` is does not implement the ERC721 transferFrom function. * @dev Reverts if one of the ERC721 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param contracts the list of ERC721 contract addresses. * @param tokenIds the list of token ids to transfer. */ function recoverERC721s( address[] calldata accounts, address[] calldata contracts, uint256[] calldata tokenIds ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == contracts.length && length == tokenIds.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IRecoverableERC721(contracts[i]).transferFrom(address(this), accounts[i], tokenIds[i]); } } } interface IRecoverableERC721 { /// See {IERC721-transferFrom(address,address,uint256)} function transferFrom( address from, address to, uint256 tokenId ) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/introspection/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165. */ 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 @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, basic interface * @dev See https://eips.ethereum.org/EIPS/eip-20 * Note: The ERC-165 identifier for this interface is 0x36372b07. */ interface IERC20 { /** * @dev Emitted when tokens are transferred, including zero value transfers. * @param _from The account where the transferred tokens are withdrawn from. * @param _to The account where the transferred tokens are deposited to. * @param _value The amount of tokens being transferred. */ event Transfer(address indexed _from, address indexed _to, uint256 _value); /** * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made. * @param _owner The account granting an allowance to `_spender`. * @param _spender The account being granted an allowance from `_owner`. * @param _value The allowance amount being granted. */ event Approval(address indexed _owner, address indexed _spender, uint256 _value); /** * @notice Returns the total token supply. * @return The total token supply. */ function totalSupply() external view returns (uint256); /** * @notice Returns the account balance of another account with address `owner`. * @param owner The account whose balance will be returned. * @return The account balance of another account with address `owner`. */ function balanceOf(address owner) external view returns (uint256); /** * Transfers `value` amount of tokens to address `to`. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender does not have enough balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transfer(address to, uint256 value) external returns (bool); /** * @notice Transfers `value` amount of tokens from address `from` to address `to` via the approval mechanism. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`. * @dev Reverts if `from` does not have at least `value` of balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param from The emitter account. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); /** * Sets `value` as the allowance from the caller to `spender`. * 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 * @dev Reverts if `spender` is the zero address. * @dev Emits the {IERC20-Approval} event. * @param spender The account being granted the allowance by the message caller. * @param value The allowance amount to grant. * @return True if the approval succeeds, false otherwise. */ function approve(address spender, uint256 value) external returns (bool); /** * Returns the amount which `spender` is allowed to spend on behalf of `owner`. * @param owner The account that has granted an allowance to `spender`. * @param spender The account that was granted an allowance by `owner`. * @return The amount which `spender` is allowed to spend on behalf of `owner`. */ function allowance(address owner, address spender) external view returns (uint256); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Detailed * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xa219a025. */ interface IERC20Detailed { /** * Returns the name of the token. E.g. "My Token". * @return The name of the token. */ function name() external view returns (string memory); /** * Returns the symbol of the token. E.g. "HIX". * @return The symbol of the token. */ function symbol() external view returns (string memory); /** * Returns the number of decimals used to display the balances. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it does not impact the arithmetic of the contract. * @return The number of decimals used to display the balances. */ function decimals() external view returns (uint8); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Allowance * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20Allowance { /** * Increases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender`'s allowance overflows. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being increased by the message caller. * @param value The allowance amount increase. * @return True if the allowance increase succeeds, false otherwise. */ function increaseAllowance(address spender, uint256 value) external returns (bool); /** * Decreases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender` has an allowance with the message caller for less than `value`. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being decreased by the message caller. * @param value The allowance amount decrease. * @return True if the allowance decrease succeeds, false otherwise. */ function decreaseAllowance(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Safe Transfers * Note: the ERC-165 identifier for this interface is 0x53f41a97. */ interface IERC20SafeTransfers { /** * Transfers tokens from the caller to `to`. If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than the sender's balance. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransfer( address to, uint256 amount, bytes calldata data ) external returns (bool); /** * Transfers tokens from `from` to another address, using the allowance mechanism. * If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than `from`'s balance. * @dev Reverts if the sender does not have at least `value` allowance by `from`. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param from The address which owns the tokens to be transferred. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Multi Transfers * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20BatchTransfers { /** * Moves multiple `amounts` tokens from the caller's account to each of `recipients`. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if the caller has an insufficient balance. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external returns (bool); /** * Moves multiple `amounts` tokens from an account to each of `recipients`, using the approval mechanism. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if `from` has an insufficient balance. * @dev Reverts if the sender does not have at least the sum of all `amounts` as allowance by `from`. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @dev Emits an {IERC20-Approval} event. * @param from The address which owns the tokens to be transferred. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata amounts ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC1046 optional extension: Metadata * See https://eips.ethereum.org/EIPS/eip-1046 * Note: the ERC-165 identifier for this interface is 0x3c130d90. */ interface IERC20Metadata { /** * Returns a distinct Uniform Resource Identifier (URI) for the token metadata. * @return a distinct Uniform Resource Identifier (URI) for the token metadata. */ function tokenURI() external view returns (string memory); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC2612 optional extension: permit – 712-signed approvals * @dev Interface for allowing ERC20 approvals to be made via ECDSA `secp256k1` signatures. * See https://eips.ethereum.org/EIPS/eip-2612 * Note: the ERC-165 identifier for this interface is 0x9d8ff7da. */ interface IERC20Permit { /** * Sets `value` as the allowance of `spender` over the tokens of `owner`, given `owner` account's signed permit. * @dev WARNING: The standard ERC-20 race condition for approvals applies to `permit()` as well: https://swcregistry.io/docs/SWC-114 * @dev Reverts if `owner` is the zero address. * @dev Reverts if the current blocktime is > `deadline`. * @dev Reverts if `r`, `s`, and `v` is not a valid `secp256k1` signature from `owner`. * @dev Emits an {IERC20-Approval} event. * @param owner The token owner granting the allowance to `spender`. * @param spender The token spender being granted the allowance by `owner`. * @param value The token amount of the allowance. * @param deadline The deadline from which the permit signature is no longer valid. * @param v Permit signature v parameter * @param r Permit signature r parameter. * @param s Permis signature s parameter. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * Returns the current permit nonce of `owner`. * @param owner the address to check the nonce of. * @return the current permit nonce of `owner`. */ function nonces(address owner) external view returns (uint256); /** * Returns the EIP-712 encoded hash struct of the domain-specific information for permits. * * @dev A common ERC-20 permit implementation choice for the `DOMAIN_SEPARATOR` is: * * keccak256( * abi.encode( * keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), * keccak256(bytes(name)), * keccak256(bytes(version)), * chainId, * address(this))) * * where * - `name` (string) is the ERC-20 token name. * - `version` (string) refers to the ERC-20 token contract version. * - `chainId` (uint256) is the chain ID to which the ERC-20 token contract is deployed to. * - `verifyingContract` (address) is the ERC-20 token contract address. * * @return the EIP-712 encoded hash struct of the domain-specific information for permits. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, Receiver * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0x4fc35859. */ interface IERC20Receiver { /** * Handles the receipt of ERC20 tokens. * @param sender The initiator of the transfer. * @param from The address which transferred the tokens. * @param value The amount of tokens transferred. * @param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address sender, address from, uint256 value, bytes calldata data ) external returns (bytes4); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Fungible Token Contract. */ abstract contract ERC20 is ManagedIdentity, IERC165, IERC20, IERC20Detailed, IERC20Metadata, IERC20Allowance, IERC20BatchTransfers, IERC20SafeTransfers, IERC20Permit { using AddressIsContract for address; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)") bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; uint256 public immutable deploymentChainId; // solhint-disable-next-line var-name-mixedcase bytes32 internal immutable _DOMAIN_SEPARATOR; mapping(address => uint256) public override nonces; string internal _name; string internal _symbol; uint8 internal immutable _decimals; string internal _tokenURI; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 internal _totalSupply; constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory tokenURI_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; _tokenURI = tokenURI_; uint256 chainId; assembly { chainId := chainid() } deploymentChainId = chainId; _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId, bytes(name_)); } // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() public view override returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } // recompute the domain separator in case of fork and chainid update return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId, bytes(_name)); } function _calculateDomainSeparator(uint256 chainId, bytes memory name_) private view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(name_), keccak256("1"), chainId, address(this) ) ); } /////////////////////////////////////////// ERC165 /////////////////////////////////////// /// @dev See {IERC165-supportsInterface}. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20).interfaceId || interfaceId == type(IERC20Detailed).interfaceId || interfaceId == type(IERC20Metadata).interfaceId || interfaceId == type(IERC20Allowance).interfaceId || interfaceId == type(IERC20BatchTransfers).interfaceId || interfaceId == type(IERC20SafeTransfers).interfaceId || interfaceId == type(IERC20Permit).interfaceId; } /////////////////////////////////////////// ERC20Detailed /////////////////////////////////////// /// @dev See {IERC20Detailed-name}. function name() external view override returns (string memory) { return _name; } /// @dev See {IERC20Detailed-symbol}. function symbol() external view override returns (string memory) { return _symbol; } /// @dev See {IERC20Detailed-decimals}. function decimals() external view override returns (uint8) { return _decimals; } /////////////////////////////////////////// ERC20Metadata /////////////////////////////////////// /// @dev See {IERC20Metadata-tokenURI}. function tokenURI() external view override returns (string memory) { return _tokenURI; } /////////////////////////////////////////// ERC20 /////////////////////////////////////// /// @dev See {IERC20-totalSupply}. function totalSupply() external view override returns (uint256) { return _totalSupply; } /// @dev See {IERC20-balanceOf}. function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } /// @dev See {IERC20-allowance}. function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /// @dev See {IERC20-approve}. function approve(address spender, uint256 value) external virtual override returns (bool) { _approve(_msgSender(), spender, value); return true; } /////////////////////////////////////////// ERC20 Allowance /////////////////////////////////////// /// @dev See {IERC20Allowance-increaseAllowance}. function increaseAllowance(address spender, uint256 addedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); address owner = _msgSender(); uint256 allowance_ = _allowances[owner][spender]; if (addedValue != 0) { uint256 newAllowance = allowance_ + addedValue; require(newAllowance > allowance_, "ERC20: allowance overflow"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); return true; } /// @dev See {IERC20Allowance-decreaseAllowance}. function decreaseAllowance(address spender, uint256 subtractedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); _decreaseAllowance(_msgSender(), spender, subtractedValue); return true; } /// @dev See {IERC20-transfer}. function transfer(address to, uint256 value) external virtual override returns (bool) { _transfer(_msgSender(), to, value); return true; } /// @dev See {IERC20-transferFrom}. function transferFrom( address from, address to, uint256 value ) external virtual override returns (bool) { _transferFrom(_msgSender(), from, to, value); return true; } /////////////////////////////////////////// ERC20MultiTransfer /////////////////////////////////////// /// @dev See {IERC20MultiTransfer-multiTransfer(address[],uint256[])}. function batchTransfer(address[] calldata recipients, uint256[] calldata values) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 balance = _balances[sender]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (sender != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(sender, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[sender] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } return true; } /// @dev See {IERC20MultiTransfer-multiTransferFrom(address,address[],uint256[])}. function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata values ) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 balance = _balances[from]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (from != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(from, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[from] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, totalValue); } return true; } /////////////////////////////////////////// ERC20SafeTransfers /////////////////////////////////////// /// @dev See {IERC20Safe-safeTransfer(address,uint256,bytes)}. function safeTransfer( address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transfer(sender, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, sender, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /// @dev See {IERC20Safe-safeTransferFrom(address,address,uint256,bytes)}. function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transferFrom(sender, from, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, from, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /////////////////////////////////////////// ERC20Permit /////////////////////////////////////// /// @dev See {IERC2612-permit(address,address,uint256,uint256,uint8,bytes32,bytes32)}. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external virtual override { require(owner != address(0), "ERC20: zero address owner"); require(block.timestamp <= deadline, "ERC20: expired permit"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)); bytes32 hash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct)); address signer = ecrecover(hash, v, r, s); require(signer == owner, "ERC20: invalid permit"); _approve(owner, spender, value); } /////////////////////////////////////////// Internal Functions /////////////////////////////////////// function _approve( address owner, address spender, uint256 value ) internal { require(spender != address(0), "ERC20: zero address spender"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } function _decreaseAllowance( address owner, address spender, uint256 subtractedValue ) internal { uint256 allowance_ = _allowances[owner][spender]; if (allowance_ != type(uint256).max && subtractedValue != 0) { // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717) uint256 newAllowance = allowance_ - subtractedValue; require(newAllowance < allowance_, "ERC20: insufficient allowance"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); } function _transfer( address from, address to, uint256 value ) internal virtual { require(to != address(0), "ERC20: to zero address"); if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); if (from != to) { _balances[from] = newBalance; _balances[to] += value; } } emit Transfer(from, to, value); } function _transferFrom( address sender, address from, address to, uint256 value ) internal { _transfer(from, to, value); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _mint(address to, uint256 value) internal virtual { require(to != address(0), "ERC20: zero address"); uint256 supply = _totalSupply; if (value != 0) { uint256 newSupply = supply + value; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } function _batchMint(address[] memory recipients, uint256[] memory values) internal virtual { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 totalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } if (totalValue != 0) { uint256 supply = _totalSupply; uint256 newSupply = supply + totalValue; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; } } function _burn(address from, uint256 value) internal virtual { if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; _totalSupply -= value; // will not underflow if balance does not } emit Transfer(from, address(0), value); } function _burnFrom(address from, uint256 value) internal virtual { _burn(from, value); address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _batchBurnFrom(address[] memory owners, uint256[] memory values) internal virtual { uint256 length = owners.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 totalValue; for (uint256 i; i != length; ++i) { address from = owners[i]; uint256 value = values[i]; if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; totalValue += value; // totalValue cannot overflow if the individual balances do not underflow } emit Transfer(from, address(0), value); if (from != sender) { _decreaseAllowance(from, sender, value); } } if (totalValue != 0) { _totalSupply -= totalValue; // _totalSupply cannot underfow as balances do not underflow } } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/bridging/[email protected] pragma solidity >=0.7.6 <0.8.0; interface IChildToken { function deposit(address user, bytes calldata depositData) external; } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract ERC20Receiver is IERC20Receiver, IERC165 { bytes4 internal constant _ERC20_RECEIVED = type(IERC20Receiver).interfaceId; bytes4 internal constant _ERC20_REJECTED = 0xffffffff; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20Receiver).interfaceId; } } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/bridging/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * Polygon (MATIC) bridging base child ERC20 for deployment on the child chain (Polygon/MATIC). */ abstract contract ChildERC20Base is IChildToken, ERC20Receiver { event Withdrawn(address account, uint256 value); // see https://github.com/maticnetwork/pos-portal/blob/master/contracts/child/ChildChainManager/ChildChainManager.sol address public childChainManager; /** * Constructor * @param childChainManager_ the Polygon/MATIC ChildChainManager proxy address. */ constructor(address childChainManager_) { childChainManager = childChainManager_; } function _requireDepositorRole(address account) internal view { require(account == childChainManager, "ChildERC20: only depositor"); } } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract ChildERC20 is ERC20, ChildERC20Base { constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory tokenURI_, address childChainManager ) ERC20(name_, symbol_, decimals_, tokenURI_) ChildERC20Base(childChainManager) {} function supportsInterface(bytes4 interfaceId) public view virtual override(ERC20, ERC20Receiver) returns (bool) { return ERC20.supportsInterface(interfaceId) || ERC20Receiver.supportsInterface(interfaceId); } /** * Called when tokens have been deposited on the root chain. * @dev Should handle deposit by un-escrowing the required amount for user. * @dev Reverts if not sent by the depositor (ChildChainManager). * @param user address for whom deposit has been done. * @param depositData abi encoded amount. */ function deposit(address user, bytes calldata depositData) public virtual override { _requireDepositorRole(_msgSender()); uint256 amount = abi.decode(depositData, (uint256)); _transfer(address(this), user, amount); } /** * Called when user wants to withdraw tokens back to the root chain. * @dev Should escrow user's tokens. This transaction will be verified when exiting on root chain. * @dev Emits a {Withdrawn} event. * @param amount amount of tokens to withdraw. */ function withdraw(uint256 amount) public virtual { address sender = _msgSender(); _transferFrom(sender, sender, address(this), amount); emit Withdrawn(sender, amount); } /** * Called when user wants to withdraw tokens back to the root chain (no pre-approval required). * @dev Should escrow user's tokens. This transaction will be verified when exiting on root chain. * @dev Reverts if the sender is not this contract. * @dev Emits a {Withdrawn} event. * _param operator The initiator of the transfer. * @param from The address which transferred the tokens. * @param amount The amount of tokens transferred. * _param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address, /*operator*/ address from, uint256 amount, bytes calldata /*data*/ ) public virtual override returns (bytes4) { require(_msgSender() == address(this), "ChildERC20: wrong sender"); emit Withdrawn(from, amount); return _ERC20_RECEIVED; } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingAppendedCallData { function _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) { // Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1 // The assembly code is more direct than the Solidity version using `abi.decode`. // solhint-disable-next-line no-inline-assembly assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } } function _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) { return msg.data[:msg.data.length - 20]; } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IERC2771 { function isTrustedForwarder(address forwarder) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IForwarderRegistry { function isForwarderFor(address, address) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingUniversalForwarding is UsingAppendedCallData, IERC2771 { IForwarderRegistry internal immutable _forwarderRegistry; address internal immutable _universalForwarder; constructor(IForwarderRegistry forwarderRegistry, address universalForwarder) { _universalForwarder = universalForwarder; _forwarderRegistry = forwarderRegistry; } function isTrustedForwarder(address forwarder) external view virtual override returns (bool) { return forwarder == _universalForwarder || forwarder == address(_forwarderRegistry); } function _msgSender() internal view virtual returns (address payable) { address payable msgSender = msg.sender; address payable sender = _lastAppendedDataAsSender(); if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return sender; } // if msg.sender is neither the registry nor the universal forwarder, // we have to check the last 20bytes of the call data intepreted as an address // and check if the msg.sender was registered as forewarder for that address // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(sender, msgSender)) { return sender; } return msgSender; } function _msgData() internal view virtual returns (bytes calldata) { address payable msgSender = msg.sender; if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return _msgDataAssuming20BytesAppendedData(); } // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(_lastAppendedDataAsSender(), msgSender)) { return _msgDataAssuming20BytesAppendedData(); } return msg.data; } } // File contracts/token/ERC20/PolygonGMEE.sol pragma solidity >=0.7.6 <0.8.0; contract PolygonGMEE is Recoverable, UsingUniversalForwarding, ChildERC20 { using ERC20Wrapper for IWrappedERC20; uint256 public escrowed; constructor( uint256 supply, address childChainManager, IForwarderRegistry forwarderRegistry, address universalForwarder ) ChildERC20("GAMEE", "GMEE", 18, "", childChainManager) UsingUniversalForwarding(forwarderRegistry, universalForwarder) Ownable(msg.sender) { _mint(address(this), supply); escrowed = supply; } function setTokenURI(string memory tokenURI_) external { _requireOwnership(_msgSender()); _tokenURI = tokenURI_; } function deposit(address user, bytes calldata depositData) public virtual override { escrowed -= abi.decode(depositData, (uint256)); super.deposit(user, depositData); } function withdraw(uint256 amount) public virtual override { escrowed += amount; super.withdraw(amount); } function onERC20Received( address operator, address from, uint256 amount, bytes calldata data ) public virtual override returns (bytes4) { escrowed += amount; return super.onERC20Received(operator, from, amount, data); } function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual override { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { address token = tokens[i]; uint256 amount = amounts[i]; if (token == address(this)) { uint256 recoverable = _balances[address(this)] - escrowed; require(amount <= recoverable, "Recov: insufficient balance"); } IWrappedERC20(token).wrappedTransfer(accounts[i], amount); } } function _msgSender() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (address payable) { return UsingUniversalForwarding._msgSender(); } function _msgData() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (bytes memory ret) { return UsingUniversalForwarding._msgData(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"address","name":"childChainManager","type":"address"},{"internalType":"contract IForwarderRegistry","name":"forwarderRegistry","type":"address"},{"internalType":"address","name":"universalForwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"value","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":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childChainManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"escrowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC20Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"recoverERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"recoverERC721s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101206040523480156200001257600080fd5b506040516200332838038062003328833981810160405260808110156200003857600080fd5b50805160208083015160408085015160609095015181518083018352600581526447414d454560d81b81860152825180840184526004815263474d454560e01b8187015283519586018452600080875280546001600160a01b031916339081178255945197989597959693959294919360129390928992839288928892889288928e928e928291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606091821b811660a05291901b1660805283516200011590600290602087019062000379565b5082516200012b90600390602086019062000379565b507fff0000000000000000000000000000000000000000000000000000000000000060f883901b166101005280516200016c90600490602084019062000379565b504660c08190526200017f8186620001c9565b60e0525050600880546001600160a01b0319166001600160a01b03959095169490941790935550620001bd96503095508a9450620002539350505050565b50505060095562000425565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b038216620002af576040805162461bcd60e51b815260206004820152601360248201527f45524332303a207a65726f206164647265737300000000000000000000000000604482015290519081900360640190fd5b6007548115620003335780820181811162000311576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20737570706c79206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b6007556001600160a01b03831660009081526005602052604090208054830190555b6040805183815290516001600160a01b038516916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003b15760008555620003fc565b82601f10620003cc57805160ff1916838001178555620003fc565b82800160010185558215620003fc579182015b82811115620003fc578251825591602001919060010190620003df565b506200040a9291506200040e565b5090565b5b808211156200040a57600081556001016200040f565b60805160601c60a05160601c60c05160e0516101005160f81c612ea66200048260003980610d0b525080610df3525080610d325280611c495250806113415280612a2652508061137c52806129eb5280612a7e5250612ea66000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063c8291d84116100a2578063dd62ed3e11610071578063dd62ed3e14610a7a578063e0df5b6f14610aa8578063eb79554914610b4e578063f2fde38b14610bd3576101f0565b8063c8291d8414610999578063cd0d0096146109a1578063cf2c52cb146109a9578063d505accf14610a29576101f0565b8063a457c2d7116100de578063a457c2d71461079d578063a9059cbb146107c9578063b88d4fde146107f5578063c3666c3614610885576101f0565b80637ecebe001461068957806388d695b2146106af5780638da5cb5b1461077157806395d89b4114610795576101f0565b80633644e515116101875780634fc35859116101565780634fc358591461047c578063572b6c051461052957806370a082311461054f57806373c8a95814610575576101f0565b80633644e5151461036e57806339509351146103765780633c130d90146103a25780634885b254146103aa576101f0565b806318160ddd116101c357806318160ddd146102f357806323b872dd146102fb5780632e1a7d4d14610331578063313ce56714610350576101f0565b806301522b1e146101f557806301ffc9a71461020f57806306fdde031461024a578063095ea7b3146102c7575b600080fd5b6101fd610bf9565b60408051918252519081900360200190f35b6102366004803603602081101561022557600080fd5b50356001600160e01b031916610bff565b604080519115158252519081900360200190f35b610252610c1f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028c578181015183820152602001610274565b50505050905090810190601f1680156102b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610236600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610cb3565b6101fd610cd0565b6102366004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610cd6565b61034e6004803603602081101561034757600080fd5b5035610cf5565b005b610358610d09565b6040805160ff9092168252519081900360200190f35b6101fd610d2d565b6102366004803603604081101561038c57600080fd5b506001600160a01b038135169060200135610e19565b610252610f87565b610236600480360360608110156103c057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103eb57600080fd5b8201836020820111156103fd57600080fd5b8035906020019184602083028401116401000000008311171561041f57600080fd5b91939092909160208101903564010000000081111561043d57600080fd5b82018360208201111561044f57600080fd5b8035906020019184602083028401116401000000008311171561047157600080fd5b509092509050610fe8565b61050c6004803603608081101561049257600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104cd57600080fd5b8201836020820111156104df57600080fd5b8035906020019184600183028401116401000000008311171561050157600080fd5b50909250905061131c565b604080516001600160e01b03199092168252519081900360200190f35b6102366004803603602081101561053f57600080fd5b50356001600160a01b031661133d565b6101fd6004803603602081101561056557600080fd5b50356001600160a01b03166113b6565b61034e6004803603606081101561058b57600080fd5b8101906020810181356401000000008111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460208302840111640100000000831117156105da57600080fd5b9193909290916020810190356401000000008111156105f857600080fd5b82018360208201111561060a57600080fd5b8035906020019184602083028401116401000000008311171561062c57600080fd5b91939092909160208101903564010000000081111561064a57600080fd5b82018360208201111561065c57600080fd5b8035906020019184602083028401116401000000008311171561067e57600080fd5b5090925090506113d1565b6101fd6004803603602081101561069f57600080fd5b50356001600160a01b0316611554565b610236600480360360408110156106c557600080fd5b8101906020810181356401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b91939092909160208101903564010000000081111561073257600080fd5b82018360208201111561074457600080fd5b8035906020019184602083028401116401000000008311171561076657600080fd5b509092509050611566565b610779611875565b604080516001600160a01b039092168252519081900360200190f35b610252611884565b610236600480360360408110156107b357600080fd5b506001600160a01b0381351690602001356118e5565b610236600480360360408110156107df57600080fd5b506001600160a01b038135169060200135611954565b6102366004803603608081101561080b57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561084657600080fd5b82018360208201111561085857600080fd5b8035906020019184600183028401116401000000008311171561087a57600080fd5b509092509050611968565b61034e6004803603606081101561089b57600080fd5b8101906020810181356401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460208302840111640100000000831117156108ea57600080fd5b91939092909160208101903564010000000081111561090857600080fd5b82018360208201111561091a57600080fd5b8035906020019184602083028401116401000000008311171561093c57600080fd5b91939092909160208101903564010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184602083028401116401000000008311171561098e57600080fd5b509092509050611af0565b610779611c38565b6101fd611c47565b61034e600480360360408110156109bf57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156109ea57600080fd5b8201836020820111156109fc57600080fd5b80359060200191846001830284011164010000000083111715610a1e57600080fd5b509092509050611c6b565b61034e600480360360e0811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c97565b6101fd60048036036040811015610a9057600080fd5b506001600160a01b0381358116916020013516611f16565b61034e60048036036020811015610abe57600080fd5b810190602081018135640100000000811115610ad957600080fd5b820183602082011115610aeb57600080fd5b80359060200191846001830284011164010000000083111715610b0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f41945050505050565b61023660048036036060811015610b6457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610b9457600080fd5b820183602082011115610ba657600080fd5b80359060200191846001830284011164010000000083111715610bc857600080fd5b509092509050611f63565b61034e60048036036020811015610be957600080fd5b50356001600160a01b03166120e9565b60095481565b6000610c0a8261215a565b80610c195750610c19826122f7565b92915050565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505090505b90565b6000610cc7610cc0612343565b8484612352565b50600192915050565b60075490565b6000610ceb610ce3612343565b85858561240f565b5060019392505050565b6009805482019055610d0681612444565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610df1576002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152610dec93859391929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b50505050506124a4565b610e13565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60006001600160a01b038316610e76576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e80612343565b6001600160a01b038082166000908152600660209081526040808320938916835292905220549091508315610f3157808401818111610f06576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600660209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60008382811461103f576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600560205260408120549080805b8481146112515760008a8a8381811061107157fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008989848181106110f957fe5b905060200201359050806000146111fc57848101858111611161576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b0316146111a0576001600160a01b03831660009081526005602052604090208054830190556111fa565b868211156111f5576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505060010161105c565b5081158015906112615750808214155b156112db578183038381106112bd576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260056020526040902090820190555b60006112e5612343565b9050806001600160a01b03168b6001600160a01b03161461130b5761130b8b828561252e565b5060019a9950505050505050505050565b60098054840190556000611333868686868661263d565b9695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610c1957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526005602052604090205490565b6113e16113dc612343565b6126f9565b8483811480156113f057508082145b611441576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57600086868381811061145957fe5b905060200201356001600160a01b03169050600085858481811061147957fe5b905060200201359050306001600160a01b0316826001600160a01b0316141561150757600954306000908152600560205260409020540380821115611505576040805162461bcd60e51b815260206004820152601b60248201527f5265636f763a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b505b6115408a8a8581811061151657fe5b905060200201356001600160a01b031682846001600160a01b03166127bd9092919063ffffffff16565b5050600101611444565b5050505050505050565b60016020526000908152604090205481565b6000838281146115bd576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006115c7612343565b6001600160a01b03811660009081526005602052604081205491925080805b8581146117db5760008b8b838181106115fb57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611675576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061168357fe5b90506020020135905080600014611786578481018581116116eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461172a576001600160a01b0383166000908152600560205260409020805483019055611784565b8682111561177f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016115e6565b5081158015906117eb5750808214155b1561186557818303838110611847576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902090820190555b5060019998505050505050505050565b6000546001600160a01b031690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60006001600160a01b038316611942576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610cc761194d612343565b848461252e565b6000610cc7611961612343565b848461283d565b600080611973612343565b90506119818188888861240f565b611993866001600160a01b03166129a4565b15611ae357634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b505050506040513d6020811015611a8557600080fd5b50516001600160e01b03191614611ae3576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611afb6113dc612343565b848381148015611b0a57508082145b611b5b576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57858582818110611b7157fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611b9c57fe5b905060200201356001600160a01b0316878786818110611bb857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611c1557600080fd5b505af1158015611c29573d6000803e3d6000fd5b50505050806001019050611b5e565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b81816020811015611c7b57600080fd5b506009805491359091039055611c928383836129aa565b505050565b6001600160a01b038716611cf2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611d47576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526001602081815260408084208054938401905580517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280820195909552948b166060850152608084018a905260a084019190915260c08084018990528451808503909101815260e09093019093528151919092012090611dd9610d2d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e8d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611eff576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611f0a8a8a8a612352565b50505050505050505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611f4c6113dc612343565b8051611f5f906004906020840190612dcf565b5050565b600080611f6e612343565b9050611f7b81878761283d565b611f8d866001600160a01b03166129a4565b156120dd57634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b50516001600160e01b031916146120dd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b6120f46113dc612343565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60006001600160e01b031982167f01ffc9a70000000000000000000000000000000000000000000000000000000014806121bd57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b806121f157506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b8061222557506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b8061225957506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061228d57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b806122c157506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610c195750506001600160e01b0319167f9d8ff7da000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610c195750506001600160e01b031916634fc3585960e01b1490565b600061234d6129db565b905090565b6001600160a01b0382166123ad576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61241a83838361283d565b836001600160a01b0316836001600160a01b03161461243e5761243e83858361252e565b50505050565b600061244e612343565b905061245c8182308561240f565b604080516001600160a01b03831681526020810184905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a15050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b03808416600090815260066020908152604080832093861683529290522054600019811480159061256557508115155b156125ec578181038181106125c1576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b600030612648612343565b6001600160a01b0316146126a3576040805162461bcd60e51b815260206004820152601860248201527f4368696c6445524332303a2077726f6e672073656e6465720000000000000000604482015290519081900360640190fd5b604080516001600160a01b03871681526020810186905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a150634fc3585960e01b95945050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561273257600080fd5b505afa158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b50516001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611c92908490612b3b565b6001600160a01b038216612898576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612954576001600160a01b03831660009081526005602052604090205481810381811061290e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612951576001600160a01b038086166000908152600560205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b6129ba6129b5612343565b612d43565b6000828260208110156129cc57600080fd5b5035905061243e30858361283d565b600033816129e7612da5565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480612a5a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612a68579150610cb09050565b6001600160a01b0382163214801590612b2757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b50515b15612b35579150610cb09050565b50905090565b81612b4e6001600160a01b0382166129a4565b612b9f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612bfa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bbd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c5c576040519150601f19603f3d011682016040523d82523d6000602084013e612c61565b606091505b50915091508115612ce057805115612cdb57808060200190516020811015612c8857600080fd5b5051612cdb576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612d3c565b8051612d33576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6008546001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601a60248201527f4368696c6445524332303a206f6e6c79206465706f7369746f72000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612e055760008555612e4b565b82601f10612e1e57805160ff1916838001178555612e4b565b82800160010185558215612e4b579182015b82811115612e4b578251825591602001919060010190612e30565b50612e57929150612e5b565b5090565b5b80821115612e575760008155600101612e5c56fea2646970667358221220b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa2464736f6c6343000706003300000000000000000000000000000000000000000a466f316cd997cbec000000000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063c8291d84116100a2578063dd62ed3e11610071578063dd62ed3e14610a7a578063e0df5b6f14610aa8578063eb79554914610b4e578063f2fde38b14610bd3576101f0565b8063c8291d8414610999578063cd0d0096146109a1578063cf2c52cb146109a9578063d505accf14610a29576101f0565b8063a457c2d7116100de578063a457c2d71461079d578063a9059cbb146107c9578063b88d4fde146107f5578063c3666c3614610885576101f0565b80637ecebe001461068957806388d695b2146106af5780638da5cb5b1461077157806395d89b4114610795576101f0565b80633644e515116101875780634fc35859116101565780634fc358591461047c578063572b6c051461052957806370a082311461054f57806373c8a95814610575576101f0565b80633644e5151461036e57806339509351146103765780633c130d90146103a25780634885b254146103aa576101f0565b806318160ddd116101c357806318160ddd146102f357806323b872dd146102fb5780632e1a7d4d14610331578063313ce56714610350576101f0565b806301522b1e146101f557806301ffc9a71461020f57806306fdde031461024a578063095ea7b3146102c7575b600080fd5b6101fd610bf9565b60408051918252519081900360200190f35b6102366004803603602081101561022557600080fd5b50356001600160e01b031916610bff565b604080519115158252519081900360200190f35b610252610c1f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028c578181015183820152602001610274565b50505050905090810190601f1680156102b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610236600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610cb3565b6101fd610cd0565b6102366004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610cd6565b61034e6004803603602081101561034757600080fd5b5035610cf5565b005b610358610d09565b6040805160ff9092168252519081900360200190f35b6101fd610d2d565b6102366004803603604081101561038c57600080fd5b506001600160a01b038135169060200135610e19565b610252610f87565b610236600480360360608110156103c057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103eb57600080fd5b8201836020820111156103fd57600080fd5b8035906020019184602083028401116401000000008311171561041f57600080fd5b91939092909160208101903564010000000081111561043d57600080fd5b82018360208201111561044f57600080fd5b8035906020019184602083028401116401000000008311171561047157600080fd5b509092509050610fe8565b61050c6004803603608081101561049257600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104cd57600080fd5b8201836020820111156104df57600080fd5b8035906020019184600183028401116401000000008311171561050157600080fd5b50909250905061131c565b604080516001600160e01b03199092168252519081900360200190f35b6102366004803603602081101561053f57600080fd5b50356001600160a01b031661133d565b6101fd6004803603602081101561056557600080fd5b50356001600160a01b03166113b6565b61034e6004803603606081101561058b57600080fd5b8101906020810181356401000000008111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460208302840111640100000000831117156105da57600080fd5b9193909290916020810190356401000000008111156105f857600080fd5b82018360208201111561060a57600080fd5b8035906020019184602083028401116401000000008311171561062c57600080fd5b91939092909160208101903564010000000081111561064a57600080fd5b82018360208201111561065c57600080fd5b8035906020019184602083028401116401000000008311171561067e57600080fd5b5090925090506113d1565b6101fd6004803603602081101561069f57600080fd5b50356001600160a01b0316611554565b610236600480360360408110156106c557600080fd5b8101906020810181356401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b91939092909160208101903564010000000081111561073257600080fd5b82018360208201111561074457600080fd5b8035906020019184602083028401116401000000008311171561076657600080fd5b509092509050611566565b610779611875565b604080516001600160a01b039092168252519081900360200190f35b610252611884565b610236600480360360408110156107b357600080fd5b506001600160a01b0381351690602001356118e5565b610236600480360360408110156107df57600080fd5b506001600160a01b038135169060200135611954565b6102366004803603608081101561080b57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561084657600080fd5b82018360208201111561085857600080fd5b8035906020019184600183028401116401000000008311171561087a57600080fd5b509092509050611968565b61034e6004803603606081101561089b57600080fd5b8101906020810181356401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460208302840111640100000000831117156108ea57600080fd5b91939092909160208101903564010000000081111561090857600080fd5b82018360208201111561091a57600080fd5b8035906020019184602083028401116401000000008311171561093c57600080fd5b91939092909160208101903564010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184602083028401116401000000008311171561098e57600080fd5b509092509050611af0565b610779611c38565b6101fd611c47565b61034e600480360360408110156109bf57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156109ea57600080fd5b8201836020820111156109fc57600080fd5b80359060200191846001830284011164010000000083111715610a1e57600080fd5b509092509050611c6b565b61034e600480360360e0811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c97565b6101fd60048036036040811015610a9057600080fd5b506001600160a01b0381358116916020013516611f16565b61034e60048036036020811015610abe57600080fd5b810190602081018135640100000000811115610ad957600080fd5b820183602082011115610aeb57600080fd5b80359060200191846001830284011164010000000083111715610b0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f41945050505050565b61023660048036036060811015610b6457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610b9457600080fd5b820183602082011115610ba657600080fd5b80359060200191846001830284011164010000000083111715610bc857600080fd5b509092509050611f63565b61034e60048036036020811015610be957600080fd5b50356001600160a01b03166120e9565b60095481565b6000610c0a8261215a565b80610c195750610c19826122f7565b92915050565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505090505b90565b6000610cc7610cc0612343565b8484612352565b50600192915050565b60075490565b6000610ceb610ce3612343565b85858561240f565b5060019392505050565b6009805482019055610d0681612444565b50565b7f000000000000000000000000000000000000000000000000000000000000001290565b6000467f00000000000000000000000000000000000000000000000000000000000000898114610df1576002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152610dec93859391929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b50505050506124a4565b610e13565b7f94f6b5784d9d00faef0270e46f4aaca03a079a8ab991bfe536e0825d1e30512c5b91505090565b60006001600160a01b038316610e76576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e80612343565b6001600160a01b038082166000908152600660209081526040808320938916835292905220549091508315610f3157808401818111610f06576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600660209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60008382811461103f576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600560205260408120549080805b8481146112515760008a8a8381811061107157fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008989848181106110f957fe5b905060200201359050806000146111fc57848101858111611161576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b0316146111a0576001600160a01b03831660009081526005602052604090208054830190556111fa565b868211156111f5576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505060010161105c565b5081158015906112615750808214155b156112db578183038381106112bd576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260056020526040902090820190555b60006112e5612343565b9050806001600160a01b03168b6001600160a01b03161461130b5761130b8b828561252e565b5060019a9950505050505050505050565b60098054840190556000611333868686868661263d565b9695505050505050565b60007f000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e32976001600160a01b0316826001600160a01b03161480610c1957507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526005602052604090205490565b6113e16113dc612343565b6126f9565b8483811480156113f057508082145b611441576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57600086868381811061145957fe5b905060200201356001600160a01b03169050600085858481811061147957fe5b905060200201359050306001600160a01b0316826001600160a01b0316141561150757600954306000908152600560205260409020540380821115611505576040805162461bcd60e51b815260206004820152601b60248201527f5265636f763a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b505b6115408a8a8581811061151657fe5b905060200201356001600160a01b031682846001600160a01b03166127bd9092919063ffffffff16565b5050600101611444565b5050505050505050565b60016020526000908152604090205481565b6000838281146115bd576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006115c7612343565b6001600160a01b03811660009081526005602052604081205491925080805b8581146117db5760008b8b838181106115fb57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611675576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061168357fe5b90506020020135905080600014611786578481018581116116eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461172a576001600160a01b0383166000908152600560205260409020805483019055611784565b8682111561177f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016115e6565b5081158015906117eb5750808214155b1561186557818303838110611847576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902090820190555b5060019998505050505050505050565b6000546001600160a01b031690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60006001600160a01b038316611942576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610cc761194d612343565b848461252e565b6000610cc7611961612343565b848461283d565b600080611973612343565b90506119818188888861240f565b611993866001600160a01b03166129a4565b15611ae357634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b505050506040513d6020811015611a8557600080fd5b50516001600160e01b03191614611ae3576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611afb6113dc612343565b848381148015611b0a57508082145b611b5b576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57858582818110611b7157fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611b9c57fe5b905060200201356001600160a01b0316878786818110611bb857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611c1557600080fd5b505af1158015611c29573d6000803e3d6000fd5b50505050806001019050611b5e565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000008981565b81816020811015611c7b57600080fd5b506009805491359091039055611c928383836129aa565b505050565b6001600160a01b038716611cf2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611d47576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526001602081815260408084208054938401905580517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280820195909552948b166060850152608084018a905260a084019190915260c08084018990528451808503909101815260e09093019093528151919092012090611dd9610d2d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e8d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611eff576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611f0a8a8a8a612352565b50505050505050505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611f4c6113dc612343565b8051611f5f906004906020840190612dcf565b5050565b600080611f6e612343565b9050611f7b81878761283d565b611f8d866001600160a01b03166129a4565b156120dd57634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b50516001600160e01b031916146120dd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b6120f46113dc612343565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60006001600160e01b031982167f01ffc9a70000000000000000000000000000000000000000000000000000000014806121bd57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b806121f157506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b8061222557506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b8061225957506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061228d57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b806122c157506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610c195750506001600160e01b0319167f9d8ff7da000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610c195750506001600160e01b031916634fc3585960e01b1490565b600061234d6129db565b905090565b6001600160a01b0382166123ad576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61241a83838361283d565b836001600160a01b0316836001600160a01b03161461243e5761243e83858361252e565b50505050565b600061244e612343565b905061245c8182308561240f565b604080516001600160a01b03831681526020810184905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a15050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b03808416600090815260066020908152604080832093861683529290522054600019811480159061256557508115155b156125ec578181038181106125c1576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b600030612648612343565b6001600160a01b0316146126a3576040805162461bcd60e51b815260206004820152601860248201527f4368696c6445524332303a2077726f6e672073656e6465720000000000000000604482015290519081900360640190fd5b604080516001600160a01b03871681526020810186905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a150634fc3585960e01b95945050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561273257600080fd5b505afa158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b50516001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611c92908490612b3b565b6001600160a01b038216612898576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612954576001600160a01b03831660009081526005602052604090205481810381811061290e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612951576001600160a01b038086166000908152600560205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b6129ba6129b5612343565b612d43565b6000828260208110156129cc57600080fd5b5035905061243e30858361283d565b600033816129e7612da5565b90507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b0316826001600160a01b03161480612a5a57507f000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e32976001600160a01b0316826001600160a01b0316145b15612a68579150610cb09050565b6001600160a01b0382163214801590612b2757507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b50515b15612b35579150610cb09050565b50905090565b81612b4e6001600160a01b0382166129a4565b612b9f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612bfa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bbd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c5c576040519150601f19603f3d011682016040523d82523d6000602084013e612c61565b606091505b50915091508115612ce057805115612cdb57808060200190516020811015612c8857600080fd5b5051612cdb576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612d3c565b8051612d33576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6008546001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601a60248201527f4368696c6445524332303a206f6e6c79206465706f7369746f72000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612e055760008555612e4b565b82601f10612e1e57805160ff1916838001178555612e4b565b82800160010185558215612e4b579182015b82811115612e4b578251825591602001919060010190612e30565b50612e57929150612e5b565b5090565b5b80821115612e575760008155600101612e5c56fea2646970667358221220b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa2464736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000a466f316cd997cbec000000000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297
-----Decoded View---------------
Arg [0] : supply (uint256): 3180000000000000000000000000
Arg [1] : childChainManager (address): 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa
Arg [2] : forwarderRegistry (address): 0xC5f6aC13b98F0E2b541C55C67A2C4946ae16D3F8
Arg [3] : universalForwarder (address): 0xe8F7fA0697b9b5eDCBF3B6BF30040c75130E3297
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000a466f316cd997cbec000000
Arg [1] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [2] : 000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8
Arg [3] : 000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297
Deployed Bytecode Sourcemap
54137:2491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54263:23;;;:::i;:::-;;;;;;;;;;;;;;;;48060:223;;;;;;;;;;;;;;;;-1:-1:-1;48060:223:0;-1:-1:-1;;;;;;48060:223:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31460:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32765:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32765:169:0;;;;;;;;:::i;32255:102::-;;;:::i;34341:223::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34341:223:0;;;;;;;;;;;;;;;;;:::i;55025:128::-;;;;;;;;;;;;;;;;-1:-1:-1;55025:128:0;;:::i;:::-;;31756:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29690:361;;;:::i;33104:638::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33104:638:0;;;;;;;;:::i;32008:102::-;;;:::i;36500:1801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36500:1801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36500:1801:0;;-1:-1:-1;36500:1801:0;-1:-1:-1;36500:1801:0;:::i;55161:284::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55161:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55161:284:0;;-1:-1:-1;55161:284:0;-1:-1:-1;55161:284:0;:::i;:::-;;;;-1:-1:-1;;;;;;55161:284:0;;;;;;;;;;;;;;52228:195;;;;;;;;;;;;;;;;-1:-1:-1;52228:195:0;-1:-1:-1;;;;;52228:195:0;;:::i;32403:121::-;;;;;;;;;;;;;;;;-1:-1:-1;32403:121:0;-1:-1:-1;;;;;32403:121:0;;:::i;55453:789::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55453:789:0;;-1:-1:-1;55453:789:0;-1:-1:-1;55453:789:0;:::i;28795:50::-;;;;;;;;;;;;;;;;-1:-1:-1;28795:50:0;-1:-1:-1;;;;;28795:50:0;;:::i;34758:1646::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34758:1646:0;;-1:-1:-1;34758:1646:0;-1:-1:-1;34758:1646:0;:::i;6688:96::-;;;:::i;:::-;;;;-1:-1:-1;;;;;6688:96:0;;;;;;;;;;;;;;31605:98;;;:::i;33805:281::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33805:281:0;;;;;;;;:::i;34131:161::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34131:161:0;;;;;;;;:::i;39025:485::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39025:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39025:485:0;;-1:-1:-1;39025:485:0;-1:-1:-1;39025:485:0;:::i;9867:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9867:522:0;;-1:-1:-1;9867:522:0;-1:-1:-1;9867:522:0;:::i;47175:32::-;;;:::i;28638:42::-;;;:::i;54826:191::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54826:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54826:191:0;;-1:-1:-1;54826:191:0;-1:-1:-1;54826:191:0;:::i;39713:727::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39713:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32570:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32570:151:0;;;;;;;;;;:::i;54681:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54681:137:0;;-1:-1:-1;54681:137:0;;-1:-1:-1;;;;;54681:137:0:i;38487:450::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38487:450:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38487:450:0;;-1:-1:-1;38487:450:0;-1:-1:-1;38487:450:0;:::i;7031:201::-;;;;;;;;;;;;;;;;-1:-1:-1;7031:201:0;-1:-1:-1;;;;;7031:201:0;;:::i;54263:23::-;;;;:::o;48060:223::-;48167:4;48191:36;48215:11;48191:23;:36::i;:::-;:84;;;;48231:44;48263:11;48231:31;:44::i;:::-;48184:91;48060:223;-1:-1:-1;;48060:223:0:o;31460:94::-;31541:5;31534:12;;;;;;;-1:-1:-1;;31534:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31508:13;;31534:12;;31541:5;;31534:12;;31541:5;31534:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:94;;:::o;32765:169::-;32849:4;32866:38;32875:12;:10;:12::i;:::-;32889:7;32898:5;32866:8;:38::i;:::-;-1:-1:-1;32922:4:0;32765:169;;;;:::o;32255:102::-;32337:12;;32255:102;:::o;34341:223::-;34473:4;34490:44;34504:12;:10;:12::i;:::-;34518:4;34524:2;34528:5;34490:13;:44::i;:::-;-1:-1:-1;34552:4:0;34341:223;;;;;:::o;55025:128::-;55094:8;:18;;;;;;55123:22;55106:6;55123:14;:22::i;:::-;55025:128;:::o;31756:94::-;31833:9;31756:94;:::o;29690:361::-;29748:7;29829:9;29955:17;29944:28;;:99;;30036:5;29995:48;;;;;;;;;;;;-1:-1:-1;;29995:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30021:7;;29995:48;;30036:5;;29995:48;;30036:5;29995:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;:48::i;:::-;29944:99;;;29975:17;29944:99;29937:106;;;29690:361;:::o;33104:638::-;33203:4;-1:-1:-1;;;;;33228:21:0;;33220:61;;;;;-1:-1:-1;;;33220:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33292:13;33308:12;:10;:12::i;:::-;-1:-1:-1;;;;;33352:18:0;;;33331;33352;;;:11;:18;;;;;;;;:27;;;;;;;;;;33292:28;;-1:-1:-1;33394:15:0;;33390:269;;33449:23;;;33495:25;;;33487:63;;;;;-1:-1:-1;;;33487:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33565:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;33595:12;-1:-1:-1;33390:269:0;33690:7;-1:-1:-1;;;;;33674:36:0;33683:5;-1:-1:-1;;;;;33674:36:0;;33699:10;33674:36;;;;;;;;;;;;;;;;;;-1:-1:-1;33730:4:0;;33104:638;-1:-1:-1;;;;33104:638:0:o;32008:102::-;32093:9;32086:16;;;;;;;;-1:-1:-1;;32086:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:13;;32086:16;;32093:9;;32086:16;;32093:9;32086:16;;;;;;;;;;;;;;;;;;;;;;;;36500:1801;36668:4;36702:10;36738:23;;;36730:62;;;;;-1:-1:-1;;;36730:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36823:15:0;;36805;36823;;;:9;:15;;;;;;;36805;;36921:810;36942:6;36937:1;:11;36921:810;;36970:10;36983;;36994:1;36983:13;;;;;;;;;;;;;-1:-1:-1;;;;;36983:13:0;36970:26;;37033:1;-1:-1:-1;;;;;37019:16:0;:2;-1:-1:-1;;;;;37019:16:0;;;37011:51;;;;;-1:-1:-1;;;37011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:13;37095:6;;37102:1;37095:9;;;;;;;;;;;;;37079:25;;37125:5;37134:1;37125:10;37121:552;;37180:18;;;37225:26;;;37217:61;;;;;-1:-1:-1;;;37217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:13;37297:26;;37354:2;-1:-1:-1;;;;;37346:10:0;:4;-1:-1:-1;;;;;37346:10:0;;37342:316;;-1:-1:-1;;;;;37381:13:0;;;;;;:9;:13;;;;;:22;;;;;;37342:316;;;37469:7;37460:5;:16;;37452:56;;;;;-1:-1:-1;;;37452:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37531:31;;;;37342:316;37121:552;;37709:2;-1:-1:-1;;;;;37694:25:0;37703:4;-1:-1:-1;;;;;37694:25:0;;37713:5;37694:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;36950:3:0;;36921:810;;;-1:-1:-1;37747:15:0;;;;;:55;;;37780:22;37766:10;:36;;37747:55;37743:384;;;37840:20;;;37883;;;37875:60;;;;;-1:-1:-1;;;37875:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38006:15:0;;;;;;:9;:15;;;;;38024:35;;;38006:53;;37743:384;38139:14;38156:12;:10;:12::i;:::-;38139:29;;38191:6;-1:-1:-1;;;;;38183:14:0;:4;-1:-1:-1;;;;;38183:14:0;;38179:91;;38214:44;38233:4;38239:6;38247:10;38214:18;:44::i;:::-;-1:-1:-1;38289:4:0;;36500:1801;-1:-1:-1;;;;;;;;;;36500:1801:0:o;55161:284::-;55350:8;:18;;;;;;55331:6;55386:51;55408:8;55418:4;55362:6;55432:4;;55386:21;:51::i;:::-;55379:58;55161:284;-1:-1:-1;;;;;;55161:284:0:o;52228:195::-;52315:4;52352:19;-1:-1:-1;;;;;52339:32:0;:9;-1:-1:-1;;;;;52339:32:0;;:76;;;;52396:18;-1:-1:-1;;;;;52375:40:0;:9;-1:-1:-1;;;;;52375:40:0;;52332:83;;52228:195;;;:::o;32403:121::-;-1:-1:-1;;;;;32498:18:0;32471:7;32498:18;;;:9;:18;;;;;;;32403:121::o;55453:789::-;55631:31;55649:12;:10;:12::i;:::-;55631:17;:31::i;:::-;55690:8;55724:23;;;:51;;;;-1:-1:-1;55751:24:0;;;55724:51;55716:90;;;;;-1:-1:-1;;;55716:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55822:9;55817:418;55842:6;55837:1;:11;55817:418;;55870:13;55886:6;;55893:1;55886:9;;;;;;;;;;;;;-1:-1:-1;;;;;55886:9:0;55870:25;;55910:14;55927:7;;55935:1;55927:10;;;;;;;;;;;;;55910:27;;55973:4;-1:-1:-1;;;;;55956:22:0;:5;-1:-1:-1;;;;;55956:22:0;;55952:200;;;56048:8;;56039:4;55999:19;56021:24;;;:9;:24;;;;;;:35;56083:21;;;;56075:61;;;;;-1:-1:-1;;;56075:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55952:200;;56166:57;56203:8;;56212:1;56203:11;;;;;;;;;;;;;-1:-1:-1;;;;;56203:11:0;56216:6;56180:5;-1:-1:-1;;;;;56166:36:0;;;:57;;;;;:::i;:::-;-1:-1:-1;;55850:3:0;;55817:418;;;;55453:789;;;;;;;:::o;28795:50::-;;;;;;;;;;;;;:::o;34758:1646::-;34874:4;34908:10;34944:23;;;34936:62;;;;;-1:-1:-1;;;34936:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35009:14;35026:12;:10;:12::i;:::-;-1:-1:-1;;;;;35067:17:0;;35049:15;35067:17;;;:9;:17;;;;;;35009:29;;-1:-1:-1;35049:15:0;;35167:810;35188:6;35183:1;:11;35167:810;;35216:10;35229;;35240:1;35229:13;;;;;;;;;;;;;-1:-1:-1;;;;;35229:13:0;35216:26;;35279:1;-1:-1:-1;;;;;35265:16:0;:2;-1:-1:-1;;;;;35265:16:0;;;35257:51;;;;;-1:-1:-1;;;35257:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35325:13;35341:6;;35348:1;35341:9;;;;;;;;;;;;;35325:25;;35369:5;35378:1;35369:10;35365:554;;35424:18;;;35469:26;;;35461:61;;;;;-1:-1:-1;;;35461:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35554:13;35541:26;;35600:2;-1:-1:-1;;;;;35590:12:0;:6;-1:-1:-1;;;;;35590:12:0;;35586:318;;-1:-1:-1;;;;;35627:13:0;;;;;;:9;:13;;;;;:22;;;;;;35586:318;;;35715:7;35706:5;:16;;35698:56;;;;;-1:-1:-1;;;35698:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35777:31;;;;35586:318;35365:554;;35955:2;-1:-1:-1;;;;;35938:27:0;35947:6;-1:-1:-1;;;;;35938:27:0;;35959:5;35938:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;35196:3:0;;35167:810;;;-1:-1:-1;35993:15:0;;;;;:55;;;36026:22;36012:10;:36;;35993:55;35989:386;;;36086:20;;;36129;;;36121:60;;;;;-1:-1:-1;;;36121:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36252:17:0;;;;;;:9;:17;;;;;36272:35;;;36252:55;;35989:386;-1:-1:-1;36392:4:0;;34758:1646;-1:-1:-1;;;;;;;;;34758:1646:0:o;6688:96::-;6743:7;6770:6;-1:-1:-1;;;;;6770:6:0;6688:96;:::o;31605:98::-;31688:7;31681:14;;;;;;;;-1:-1:-1;;31681:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31655:13;;31681:14;;31688:7;;31681:14;;31688:7;31681:14;;;;;;;;;;;;;;;;;;;;;;;;33805:281;33909:4;-1:-1:-1;;;;;33934:21:0;;33926:61;;;;;-1:-1:-1;;;33926:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33998:58;34017:12;:10;:12::i;:::-;34031:7;34040:15;33998:18;:58::i;34131:161::-;34211:4;34228:34;34238:12;:10;:12::i;:::-;34252:2;34256:5;34228:9;:34::i;39025:485::-;39192:4;39209:14;39226:12;:10;:12::i;:::-;39209:29;;39249:39;39263:6;39271:4;39277:2;39281:6;39249:13;:39::i;:::-;39303:15;:2;-1:-1:-1;;;;;39303:13:0;;:15::i;:::-;39299:182;;;-1:-1:-1;;;39343:98:0;;;39358:2;-1:-1:-1;;;;;39343:34:0;;39378:6;39386:4;39392:6;39400:4;;39343:62;;;;;;;;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39343:62:0;-1:-1:-1;;;;;;39343:98:0;;39335:134;;;;;-1:-1:-1;;;39335:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39498:4:0;;39025:485;-1:-1:-1;;;;;;39025:485:0:o;9867:522::-;10041:31;10059:12;:10;:12::i;10041:31::-;10100:8;10134:26;;;:55;;;;-1:-1:-1;10164:25:0;;;10134:55;10126:94;;;;;-1:-1:-1;;;10126:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10236:9;10231:151;10256:6;10251:1;:11;10231:151;;10303:9;;10313:1;10303:12;;;;;;;;;;;;;-1:-1:-1;;;;;10303:12:0;-1:-1:-1;;;;;10284:45:0;;10338:4;10345:8;;10354:1;10345:11;;;;;;;;;;;;;-1:-1:-1;;;;;10345:11:0;10358:8;;10367:1;10358:11;;;;;;;;;;;;;10284:86;;;;;;;;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:3;;;;;10231:151;;47175:32;;;-1:-1:-1;;;;;47175:32:0;;:::o;28638:42::-;;;:::o;54826:191::-;54943:11;;54932:34;;;;;;;;;;-1:-1:-1;54920:8:0;:46;;54932:34;;54920:46;;;;;54977:32;54991:4;54997:11;;54977:13;:32::i;:::-;54826:191;;;:::o;39713:727::-;-1:-1:-1;;;;;39940:19:0;;39932:57;;;;;-1:-1:-1;;;39932:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40027:8;40008:15;:27;;40000:61;;;;;-1:-1:-1;;;40000:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40154:13:0;;;40072:18;40154:13;;;:6;:13;;;;;;;;:15;;;;;;;40103:77;;28563:66;40103:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40093:88;;;;;;;;40246:18;:16;:18::i;:::-;40266:10;40217:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40207:71;;;;;;40192:86;;40289:14;40306:24;40316:4;40322:1;40325;40328;40306:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40289:41;;40359:5;-1:-1:-1;;;;;40349:15:0;:6;-1:-1:-1;;;;;40349:15:0;;40341:49;;;;;-1:-1:-1;;;40341:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:31;40410:5;40417:7;40426:5;40401:8;:31::i;:::-;39713:727;;;;;;;;;;:::o;32570:151::-;-1:-1:-1;;;;;32686:18:0;;;32659:7;32686:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32570:151::o;54681:137::-;54747:31;54765:12;:10;:12::i;54747:31::-;54789:21;;;;:9;;:21;;;;;:::i;:::-;;54681:137;:::o;38487:450::-;38627:4;38644:14;38661:12;:10;:12::i;:::-;38644:29;;38684;38694:6;38702:2;38706:6;38684:9;:29::i;:::-;38728:15;:2;-1:-1:-1;;;;;38728:13:0;;:15::i;:::-;38724:184;;;-1:-1:-1;;;38768:100:0;;;38783:2;-1:-1:-1;;;;;38768:34:0;;38803:6;38811;38819;38827:4;;38768:64;;;;;;;;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38768:64:0;-1:-1:-1;;;;;;38768:100:0;;38760:136;;;;;-1:-1:-1;;;38760:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38925:4:0;;38487:450;-1:-1:-1;;;;;38487:450:0:o;7031:201::-;7111:31;7129:12;:10;:12::i;7111:31::-;7153:6;:17;;;;-1:-1:-1;;;;;7153:17:0;;;;;;;;;7186:38;;7153:17;;7207:6;;;7186:38;;7153:6;7186:38;7031:201;:::o;30686:620::-;30771:4;-1:-1:-1;;;;;;30808:40:0;;30823:25;30808:40;;:96;;-1:-1:-1;;;;;;;30865:39:0;;30880:24;30865:39;30808:96;:160;;;-1:-1:-1;;;;;;;30921:47:0;;30936:32;30921:47;30808:160;:224;;;-1:-1:-1;;;;;;;30985:47:0;;31000:32;30985:47;30808:224;:289;;;-1:-1:-1;;;;;;;31049:48:0;;31064:33;31049:48;30808:289;:359;;;-1:-1:-1;;;;;;;31114:53:0;;31129:38;31114:53;30808:359;:428;;;-1:-1:-1;;;;;;;31184:52:0;;31199:37;31184:52;30808:428;:490;;;-1:-1:-1;;;;;;;;31253:45:0;31268:30;31253:45;;30686:620::o;46468:208::-;46553:4;-1:-1:-1;;;;;;46577:40:0;;46592:25;46577:40;;:91;;-1:-1:-1;;;;;;;;46621:47:0;-1:-1:-1;;;46621:47:0;;46468:208::o;56250:185::-;56355:15;56390:37;:35;:37::i;:::-;56383:44;;56250:185;:::o;40558:281::-;-1:-1:-1;;;;;40685:21:0;;40677:61;;;;;-1:-1:-1;;;40677:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40749:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;40800:31;;;;;;;;;;;;;;;;;40558:281;;;:::o;42132:273::-;42275:26;42285:4;42291:2;42295:5;42275:9;:26::i;:::-;42324:6;-1:-1:-1;;;;;42316:14:0;:4;-1:-1:-1;;;;;42316:14:0;;42312:86;;42347:39;42366:4;42372:6;42380:5;42347:18;:39::i;:::-;42132:273;;;;:::o;49178:201::-;49238:14;49255:12;:10;:12::i;:::-;49238:29;;49278:52;49292:6;49300;49316:4;49323:6;49278:13;:52::i;:::-;49346:25;;;-1:-1:-1;;;;;49346:25:0;;;;;;;;;;;;;;;;;;;;;;;49178:201;;:::o;30059:474::-;30372:16;;;;;;;30221:289;;;30254:95;30221:289;;;;;;;;;;;30411:14;30221:289;;;;;;;;;;;30486:4;30221:289;;;;;;;;;;;;;;;;;;;;;;;;;30193:332;;;;;;30059:474::o;40847:697::-;-1:-1:-1;;;;;41007:18:0;;;40986;41007;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;41051:31:0;;;;;:55;;-1:-1:-1;41086:20:0;;;41051:55;41047:438;;;41266:28;;;41317:25;;;41309:67;;;;;-1:-1:-1;;;41309:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41391:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;41421:12;-1:-1:-1;41047:438:0;41516:7;-1:-1:-1;;;;;41500:36:0;41509:5;-1:-1:-1;;;;;41500:36:0;;41525:10;41500:36;;;;;;;;;;;;;;;;;;40847:697;;;;:::o;50044:343::-;50222:6;50273:4;50249:12;:10;:12::i;:::-;-1:-1:-1;;;;;50249:29:0;;50241:66;;;;;-1:-1:-1;;;50241:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;50323:23;;;-1:-1:-1;;;;;50323:23:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;50044:343:0;;;;;;;:::o;7363:138::-;7454:4;-1:-1:-1;;;;;7454:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7454:12:0;-1:-1:-1;;;;;7443:23:0;;;;;;7435:58;;;;;-1:-1:-1;;;7435:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1919:229;2081:58;;;-1:-1:-1;;;;;2081:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2104:23;2081:58;;;2046:94;;2074:5;;2046:27;:94::i;41552:572::-;-1:-1:-1;;;;;41682:16:0;;41674:51;;;;;-1:-1:-1;;;41674:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41742:10;;41738:336;;-1:-1:-1;;;;;41787:15:0;;41769;41787;;;:9;:15;;;;;;41838;;;41876:20;;;41868:60;;;;;-1:-1:-1;;;41868:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41955:2;-1:-1:-1;;;;;41947:10:0;:4;-1:-1:-1;;;;;41947:10:0;;41943:120;;-1:-1:-1;;;;;41978:15:0;;;;;;;:9;:15;;;;;;:28;;;42025:13;;;;;;:22;;;;;;41943:120;41738:336;;;42106:2;-1:-1:-1;;;;;42091:25:0;42100:4;-1:-1:-1;;;;;42091:25:0;;42110:5;42091:25;;;;;;;;;;;;;;;;;;41552:572;;;:::o;1106:387::-;1429:20;1477:8;;;1106:387::o;48634:248::-;48728:35;48750:12;:10;:12::i;:::-;48728:21;:35::i;:::-;48774:14;48802:11;;48791:34;;;;;;;;;;-1:-1:-1;48791:34:0;;-1:-1:-1;48836:38:0;48854:4;48861;48791:34;48836:9;:38::i;52431:922::-;52484:15;52540:10;52484:15;52586:27;:25;:27::i;:::-;52561:52;;52649:18;-1:-1:-1;;;;;52628:40:0;:9;-1:-1:-1;;;;;52628:40:0;;:76;;;;52685:19;-1:-1:-1;;;;;52672:32:0;:9;-1:-1:-1;;;;;52672:32:0;;52628:76;52624:169;;;52775:6;-1:-1:-1;52768:13:0;;-1:-1:-1;52768:13:0;52624:169;-1:-1:-1;;;;;53197:22:0;;53210:9;53197:22;;;;:78;;;53223:18;-1:-1:-1;;;;;53223:33:0;;53257:6;53265:9;53223:52;;;;;;;;;;;;;-1:-1:-1;;;;;53223:52:0;;;;;;-1:-1:-1;;;;;53223:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53223:52:0;53197:78;53193:124;;;53299:6;-1:-1:-1;53292:13:0;;-1:-1:-1;53292:13:0;53193:124;-1:-1:-1;53336:9:0;-1:-1:-1;52431:922:0;:::o;2675:892::-;2801:5;2826:19;-1:-1:-1;;;;;2826:17:0;;;:19::i;:::-;2818:58;;;;;-1:-1:-1;;;2818:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2950:12;2964:17;2985:6;-1:-1:-1;;;;;2985:11:0;2997:8;2985:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:57;;;;3021:7;3017:543;;;3049:11;;:16;3045:124;;3105:4;3094:24;;;;;;;;;;;;;;;-1:-1:-1;3094:24:0;3086:67;;;;;-1:-1:-1;;;3086:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3017:543;;;3260:11;;3256:97;;3297:40;;;-1:-1:-1;;;3297:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3256:97;3484:4;3478:11;3529:4;3522;3518:2;3514:13;3507:27;3447:102;2675:892;;;;;:::o;47444:148::-;47536:17;;-1:-1:-1;;;;;47525:28:0;;;47536:17;;47525:28;47517:67;;;;;-1:-1:-1;;;47517:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;50562:526;51045:23;51049:14;51045:23;51032:37;51028:2;51024:46;;50999:82::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa24
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.