ETH Price: $3,503.92 (+3.05%)
Gas: 11 Gwei

Token

RangersProtocolGas (RPG)
 

Overview

Max Total Supply

21,000,000 RPG

Holders

97 (0.00%)

Market

Price

$1.81 @ 0.000516 ETH (-2.56%)

Onchain Market Cap

$37,940,242.67

Circulating Supply Market Cap

$16,813,200.47

Other Info

Token Contract (WITH 18 Decimals)

Balance
5 RPG

Value
$9.03 ( ~0.00257711650722912 Eth) [0.0000%]
0xd6b08dff3ddfbe6df922effad854d13e9d7b6e7e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Rangers Protocol is a future-oriented virtual world blockchain infrastructure incubated by MixMarvel, integrating cross-chain, NFT, EVM, and distributed network protocols and professionally supports NFT and complex applications.

Market

Volume (24H):$164,091.01
Market Capitalization:$16,813,200.47
Circulating Supply:9,306,140.00 RPG
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RPGToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-10
*/

// SPDX-License-Identifier: MIT
  // Sources flattened with hardhat v2.10.2 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


// File @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev 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, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * 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. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}


// File @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)

pragma solidity ^0.8.0;




/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}


// File contracts/RPGToken.sol


pragma solidity ^0.8.0;


contract RPGToken is ERC20, AccessControl {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
    uint8 immutable _decimals;
    uint256 immutable _cap;
    address public _mintcontract;

    mapping (address => bool) public transferBlacklist;
    mapping (address => bool) public receiveBlacklist;

    event AddTransferBlacklist(address addr);
    event RemoveTransferBlacklist(address addr);
    event AddReceiveBlacklist(address addr);
    event RemoveReceiveBlacklist(address addr);

    constructor( string memory name_, string memory symbol_ ,address mintcontract) ERC20(name_, symbol_) {
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _setupRole(MINTER_ROLE, msg.sender);
        _setupRole(OPERATOR_ROLE, msg.sender);
        _decimals = 18;
        _cap = 21000000 * (10**18);
        _mintcontract = mintcontract;
    }

    function cap() external view returns (uint256){
        return _cap;
    }

    function mint(address to, uint256 amount) public onlyMinter {
        require(super.totalSupply() + amount <= _cap, "Exceeding the upper limit");
        _mint(to, amount);
    }

	function ecosystemMint() payable external {
        
        (bool sucess, bytes memory s) = _mintcontract.call(abi.encodeWithSignature("GetMintInfo()"));
        require(sucess);
        (address to,uint256 amount) = abi.decode(s,(address,uint256));
        require(to != address(0),'no mint item');
        require(amount > 0        ,'amount err');
        
        require(super.totalSupply() + amount <= _cap, "Exceeding the upper limit");
        _mint(to, amount);
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public pure override returns (uint256) {
        return 21000000 * (10**18);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
    internal
    override
    {
        require(!transferBlacklist[from], "from in blacklist");
        require(!receiveBlacklist[to], "to in blacklist");
        super._beforeTokenTransfer(from, to, amount);
    }

  function addTransferBlacklist(address addr) external onlyOperator {
        transferBlacklist[addr] = true;
        emit AddTransferBlacklist(addr);
    }

    function removeTransferBlacklist(address addr) external onlyOperator {
       delete transferBlacklist[addr];
       emit RemoveTransferBlacklist(addr);
    }


    function addReceiveBlacklist(address addr) external onlyOperator {
        receiveBlacklist[addr] = true;
        emit AddReceiveBlacklist(addr);
    }

    function removeReceiveBlacklist(address addr) external onlyOperator {
        delete receiveBlacklist[addr];
        emit  RemoveReceiveBlacklist(addr);
    }

    function setMintRole(address to) external {
       grantRole(MINTER_ROLE, to);
   }

    function removeMintRole(address to) external {
       revokeRole(MINTER_ROLE, to);
   }

     function setOperatorRole(address to) external {
       grantRole(OPERATOR_ROLE, to);
   }

    function removeOperatorRole(address to) external {
       revokeRole(OPERATOR_ROLE, to);
   }
    
    /** modifier  */
    modifier onlyMinter() {
         require(hasRole(MINTER_ROLE, msg.sender), "not mint role");
        _;
    }

    modifier onlyOperator() {
         require(hasRole(OPERATOR_ROLE, msg.sender), "not operator role");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"mintcontract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"AddReceiveBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"AddTransferBlacklist","type":"event"},{"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":false,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveReceiveBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveTransferBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintcontract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addReceiveBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addTransferBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"ecosystemMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"receiveBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"removeMintRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"removeOperatorRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeReceiveBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeTransferBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setMintRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setOperatorRole","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c06040523480156200001157600080fd5b50604051620020b8380380620020b8833981016040819052620000349162000329565b8251839083906200004d906003906020850190620001d8565b50805162000063906004906020840190620001d8565b5062000075915060009050336200010d565b620000a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200010d565b620000cd7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336200010d565b600960f91b6080526a115eec47f6cf7e3500000060a052600680546001600160a01b0319166001600160a01b039290921691909117905550620004059050565b6200011982826200011d565b5050565b620001298282620001a9565b620001195760008281526005602090815260408083206001600160a01b03851684529091529020805460ff1916600117905562000165620001d4565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3390565b828054620001e690620003b2565b90600052602060002090601f0160209004810192826200020a576000855562000255565b82601f106200022557805160ff191683800117855562000255565b8280016001018555821562000255579182015b828111156200025557825182559160200191906001019062000238565b506200026392915062000267565b5090565b5b8082111562000263576000815560010162000268565b600082601f8301126200028f578081fd5b81516001600160401b0380821115620002ac57620002ac620003ef565b6040516020601f8401601f1916820181018381118382101715620002d457620002d4620003ef565b6040528382528584018101871015620002eb578485fd5b8492505b838310156200030e5785830181015182840182015291820191620002ef565b838311156200031f57848185840101525b5095945050505050565b6000806000606084860312156200033e578283fd5b83516001600160401b038082111562000355578485fd5b62000363878388016200027e565b9450602086015191508082111562000379578384fd5b5062000388868287016200027e565b604086015190935090506001600160a01b0381168114620003a7578182fd5b809150509250925092565b600281046001821680620003c757607f821691505b60208210811415620003e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a051611c7c6200043c60003960008181610825015281816109170152610a7d015260006108010152611c7c6000f3fe6080604052600436106101f95760003560e01c8063530dd0791161010d578063a9059cbb116100a0578063d53913931161006f578063d539139314610585578063d547741f1461059a578063dd62ed3e146105ba578063ecf86304146105da578063f5b541a6146105fa576101f9565b8063a9059cbb14610505578063b991217914610525578063c598c8ff14610545578063d363a8eb14610565576101f9565b80639478941c116100dc5780639478941c1461049b57806395d89b41146104bb578063a217fddf146104d0578063a457c2d7146104e5576101f9565b8063530dd0791461041b5780636614b24e1461043b57806370a082311461045b57806391d148541461047b576101f9565b80632f2ff15d11610190578063395093511161015f578063395093511461039157806340c10f19146103b157806342c45460146103d15780634c86f23b146103f35780634cf8a130146103fb576101f9565b80632f2ff15d1461031a578063313ce5671461033a578063355274ea1461035c57806336568abe14610371576101f9565b80631a809443116101cc5780631a809443146102985780631cf4e3ee146102b857806323b872dd146102da578063248a9ca3146102fa576101f9565b806301ffc9a7146101fe57806306fdde0314610234578063095ea7b31461025657806318160ddd14610276575b600080fd5b34801561020a57600080fd5b5061021e610219366004611641565b61060f565b60405161022b919061170e565b60405180910390f35b34801561024057600080fd5b5061024961063a565b60405161022b9190611722565b34801561026257600080fd5b5061021e6102713660046115da565b6106cc565b34801561028257600080fd5b5061028b6106e9565b60405161022b9190611719565b3480156102a457600080fd5b5061021e6102b3366004611519565b6106f8565b3480156102c457600080fd5b506102d86102d3366004611519565b61070d565b005b3480156102e657600080fd5b5061021e6102f536600461159a565b610728565b34801561030657600080fd5b5061028b610315366004611605565b6107c1565b34801561032657600080fd5b506102d861033536600461161d565b6107d6565b34801561034657600080fd5b5061034f6107ff565b60405161022b9190611b18565b34801561036857600080fd5b5061028b610823565b34801561037d57600080fd5b506102d861038c36600461161d565b610847565b34801561039d57600080fd5b5061021e6103ac3660046115da565b61088d565b3480156103bd57600080fd5b506102d86103cc3660046115da565b6108e1565b3480156103dd57600080fd5b506103e6610971565b60405161022b91906116fa565b6102d8610980565b34801561040757600080fd5b506102d8610416366004611519565b610add565b34801561042757600080fd5b506102d8610436366004611519565b610af5565b34801561044757600080fd5b5061021e610456366004611519565b610b0d565b34801561046757600080fd5b5061028b610476366004611519565b610b22565b34801561048757600080fd5b5061021e61049636600461161d565b610b3d565b3480156104a757600080fd5b506102d86104b6366004611519565b610b68565b3480156104c757600080fd5b50610249610b80565b3480156104dc57600080fd5b5061028b610b8f565b3480156104f157600080fd5b5061021e6105003660046115da565b610b94565b34801561051157600080fd5b5061021e6105203660046115da565b610c0d565b34801561053157600080fd5b506102d8610540366004611519565b610c21565b34801561055157600080fd5b506102d8610560366004611519565b610cb0565b34801561057157600080fd5b506102d8610580366004611519565b610d37565b34801561059157600080fd5b5061028b610dbe565b3480156105a657600080fd5b506102d86105b536600461161d565b610dd0565b3480156105c657600080fd5b5061028b6105d5366004611562565b610def565b3480156105e657600080fd5b506102d86105f5366004611519565b610e1a565b34801561060657600080fd5b5061028b610e9e565b60006001600160e01b03198216637965db0b60e01b1480610634575061063482610eb0565b92915050565b60606003805461064990611ba0565b80601f016020809104026020016040519081016040528092919081815260200182805461067590611ba0565b80156106c25780601f10610697576101008083540402835291602001916106c2565b820191906000526020600020905b8154815290600101906020018083116106a557829003601f168201915b5050505050905090565b60006106e06106d9610ec9565b8484610ecd565b50600192915050565b6a115eec47f6cf7e3500000090565b60086020526000908152604090205460ff1681565b610725600080516020611c2783398151915282610dd0565b50565b6000610735848484610f81565b6001600160a01b038416600090815260016020526040812081610756610ec9565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156107a25760405162461bcd60e51b8152600401610799906118a9565b60405180910390fd5b6107b6856107ae610ec9565b858403610ecd565b506001949350505050565b60009081526005602052604090206001015490565b6107df826107c1565b6107f0816107eb610ec9565b6110a5565b6107fa8383611109565b505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b61084f610ec9565b6001600160a01b0316816001600160a01b03161461087f5760405162461bcd60e51b815260040161079990611a67565b6108898282611190565b5050565b60006106e061089a610ec9565b8484600160006108a8610ec9565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546108dc9190611b26565b610ecd565b6108f9600080516020611c2783398151915233610b3d565b6109155760405162461bcd60e51b8152600401610799906118f1565b7f00000000000000000000000000000000000000000000000000000000000000008161093f611215565b6109499190611b26565b11156109675760405162461bcd60e51b815260040161079990611918565b610889828261121b565b6006546001600160a01b031681565b60065460408051600481526024810182526020810180516001600160e01b0316633e3b48f960e21b179052905160009283926001600160a01b03909116916109c89190611669565b6000604051808303816000865af19150503d8060008114610a05576040519150601f19603f3d011682016040523d82523d6000602084013e610a0a565b606091505b509150915081610a1957600080fd5b60008082806020019051810190610a309190611535565b90925090506001600160a01b038216610a5b5760405162461bcd60e51b8152600401610799906119d8565b60008111610a7b5760405162461bcd60e51b8152600401610799906119fe565b7f000000000000000000000000000000000000000000000000000000000000000081610aa5611215565b610aaf9190611b26565b1115610acd5760405162461bcd60e51b815260040161079990611918565b610ad7828261121b565b50505050565b610725600080516020611c07833981519152826107d6565b610725600080516020611c27833981519152826107d6565b60076020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610725600080516020611c0783398151915282610dd0565b60606004805461064990611ba0565b600081565b60008060016000610ba3610ec9565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610bef5760405162461bcd60e51b815260040161079990611a22565b610c03610bfa610ec9565b85858403610ecd565b5060019392505050565b60006106e0610c1a610ec9565b8484610f81565b610c39600080516020611c0783398151915233610b3d565b610c555760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526008602052604090819020805460ff19169055517f82ed7fa5e40c7e10684e7b194ed3b6018176aa90b3d9868fce84935dbe150c5a90610ca59083906116fa565b60405180910390a150565b610cc8600080516020611c0783398151915233610b3d565b610ce45760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526008602052604090819020805460ff19166001179055517f95a3703943639201698c3d8eace77e5d627e3ced845923dddcd72a69f582564b90610ca59083906116fa565b610d4f600080516020611c0783398151915233610b3d565b610d6b5760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526007602052604090819020805460ff19166001179055517f3af3b78cfb2908165b7e4ed46e4adacd1426d6d49b2115d603ea6d1b82a2d7c290610ca59083906116fa565b600080516020611c2783398151915281565b610dd9826107c1565b610de5816107eb610ec9565b6107fa8383611190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610e32600080516020611c0783398151915233610b3d565b610e4e5760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526007602052604090819020805460ff19169055517fb47551815379694a5b5e39a8d22ce4033b80f132dccf5c757ab2f880725207ed90610ca59083906116fa565b600080516020611c0783398151915281565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6001600160a01b038316610ef35760405162461bcd60e51b815260040161079990611994565b6001600160a01b038216610f195760405162461bcd60e51b8152600401610799906117f6565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f74908590611719565b60405180910390a3505050565b6001600160a01b038316610fa75760405162461bcd60e51b81526004016107999061194f565b6001600160a01b038216610fcd5760405162461bcd60e51b81526004016107999061178a565b610fd88383836112e3565b6001600160a01b038316600090815260208190526040902054818110156110115760405162461bcd60e51b815260040161079990611838565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611048908490611b26565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110929190611719565b60405180910390a3610ad78484846107fa565b6110af8282610b3d565b610889576110c7816001600160a01b03166014611360565b6110d2836020611360565b6040516020016110e3929190611685565b60408051601f198184030181529082905262461bcd60e51b825261079991600401611722565b6111138282610b3d565b6108895760008281526005602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561114c610ec9565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61119a8282610b3d565b156108895760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191690556111d1610ec9565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60025490565b6001600160a01b0382166112415760405162461bcd60e51b815260040161079990611ab6565b61124d600083836112e3565b806002600082825461125f9190611b26565b90915550506001600160a01b0382166000908152602081905260408120805483929061128c908490611b26565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112cf908590611719565b60405180910390a3610889600083836107fa565b6001600160a01b03831660009081526007602052604090205460ff161561131c5760405162461bcd60e51b81526004016107999061187e565b6001600160a01b03821660009081526008602052604090205460ff16156113555760405162461bcd60e51b8152600401610799906117cd565b6107fa8383836107fa565b6060600061136f836002611b3e565b61137a906002611b26565b67ffffffffffffffff8111156113a057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113ca576020820181803683370190505b509050600360fc1b816000815181106113f357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061143057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611454846002611b3e565b61145f906001611b26565b90505b60018111156114f3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114a157634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106114c557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936114ec81611b89565b9050611462565b5083156115125760405162461bcd60e51b815260040161079990611755565b9392505050565b60006020828403121561152a578081fd5b813561151281611bf1565b60008060408385031215611547578081fd5b825161155281611bf1565b6020939093015192949293505050565b60008060408385031215611574578182fd5b823561157f81611bf1565b9150602083013561158f81611bf1565b809150509250929050565b6000806000606084860312156115ae578081fd5b83356115b981611bf1565b925060208401356115c981611bf1565b929592945050506040919091013590565b600080604083850312156115ec578182fd5b82356115f781611bf1565b946020939093013593505050565b600060208284031215611616578081fd5b5035919050565b6000806040838503121561162f578182fd5b82359150602083013561158f81611bf1565b600060208284031215611652578081fd5b81356001600160e01b031981168114611512578182fd5b6000825161167b818460208701611b5d565b9190910192915050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516116bd816017850160208801611b5d565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516116ee816028840160208801611b5d565b01602801949350505050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6000602082528251806020840152611741816040850160208701611b5d565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600f908201526e1d1bc81a5b88189b1858dadb1a5cdd608a1b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b602080825260119082015270199c9bdb481a5b88189b1858dadb1a5cdd607a1b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252600d908201526c6e6f74206d696e7420726f6c6560981b604082015260600190565b60208082526019908201527f457863656564696e6720746865207570706572206c696d697400000000000000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252600c908201526b6e6f206d696e74206974656d60a01b604082015260600190565b6020808252600a908201526930b6b7bab73a1032b93960b11b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6020808252601190820152706e6f74206f70657261746f7220726f6c6560781b604082015260600190565b60ff91909116815260200190565b60008219821115611b3957611b39611bdb565b500190565b6000816000190483118215151615611b5857611b58611bdb565b500290565b60005b83811015611b78578181015183820152602001611b60565b83811115610ad75750506000910152565b600081611b9857611b98611bdb565b506000190190565b600281046001821680611bb457607f821691505b60208210811415611bd557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461072557600080fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220272eda6f43b74ce96906819e7e1e4bc1e42188fec80c9f2ed335ada513bf6f7764736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000068fddc1e4588ef3f13e31cdecac1c0acdf2f33e8000000000000000000000000000000000000000000000000000000000000001252616e6765727350726f746f636f6c476173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035250470000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c8063530dd0791161010d578063a9059cbb116100a0578063d53913931161006f578063d539139314610585578063d547741f1461059a578063dd62ed3e146105ba578063ecf86304146105da578063f5b541a6146105fa576101f9565b8063a9059cbb14610505578063b991217914610525578063c598c8ff14610545578063d363a8eb14610565576101f9565b80639478941c116100dc5780639478941c1461049b57806395d89b41146104bb578063a217fddf146104d0578063a457c2d7146104e5576101f9565b8063530dd0791461041b5780636614b24e1461043b57806370a082311461045b57806391d148541461047b576101f9565b80632f2ff15d11610190578063395093511161015f578063395093511461039157806340c10f19146103b157806342c45460146103d15780634c86f23b146103f35780634cf8a130146103fb576101f9565b80632f2ff15d1461031a578063313ce5671461033a578063355274ea1461035c57806336568abe14610371576101f9565b80631a809443116101cc5780631a809443146102985780631cf4e3ee146102b857806323b872dd146102da578063248a9ca3146102fa576101f9565b806301ffc9a7146101fe57806306fdde0314610234578063095ea7b31461025657806318160ddd14610276575b600080fd5b34801561020a57600080fd5b5061021e610219366004611641565b61060f565b60405161022b919061170e565b60405180910390f35b34801561024057600080fd5b5061024961063a565b60405161022b9190611722565b34801561026257600080fd5b5061021e6102713660046115da565b6106cc565b34801561028257600080fd5b5061028b6106e9565b60405161022b9190611719565b3480156102a457600080fd5b5061021e6102b3366004611519565b6106f8565b3480156102c457600080fd5b506102d86102d3366004611519565b61070d565b005b3480156102e657600080fd5b5061021e6102f536600461159a565b610728565b34801561030657600080fd5b5061028b610315366004611605565b6107c1565b34801561032657600080fd5b506102d861033536600461161d565b6107d6565b34801561034657600080fd5b5061034f6107ff565b60405161022b9190611b18565b34801561036857600080fd5b5061028b610823565b34801561037d57600080fd5b506102d861038c36600461161d565b610847565b34801561039d57600080fd5b5061021e6103ac3660046115da565b61088d565b3480156103bd57600080fd5b506102d86103cc3660046115da565b6108e1565b3480156103dd57600080fd5b506103e6610971565b60405161022b91906116fa565b6102d8610980565b34801561040757600080fd5b506102d8610416366004611519565b610add565b34801561042757600080fd5b506102d8610436366004611519565b610af5565b34801561044757600080fd5b5061021e610456366004611519565b610b0d565b34801561046757600080fd5b5061028b610476366004611519565b610b22565b34801561048757600080fd5b5061021e61049636600461161d565b610b3d565b3480156104a757600080fd5b506102d86104b6366004611519565b610b68565b3480156104c757600080fd5b50610249610b80565b3480156104dc57600080fd5b5061028b610b8f565b3480156104f157600080fd5b5061021e6105003660046115da565b610b94565b34801561051157600080fd5b5061021e6105203660046115da565b610c0d565b34801561053157600080fd5b506102d8610540366004611519565b610c21565b34801561055157600080fd5b506102d8610560366004611519565b610cb0565b34801561057157600080fd5b506102d8610580366004611519565b610d37565b34801561059157600080fd5b5061028b610dbe565b3480156105a657600080fd5b506102d86105b536600461161d565b610dd0565b3480156105c657600080fd5b5061028b6105d5366004611562565b610def565b3480156105e657600080fd5b506102d86105f5366004611519565b610e1a565b34801561060657600080fd5b5061028b610e9e565b60006001600160e01b03198216637965db0b60e01b1480610634575061063482610eb0565b92915050565b60606003805461064990611ba0565b80601f016020809104026020016040519081016040528092919081815260200182805461067590611ba0565b80156106c25780601f10610697576101008083540402835291602001916106c2565b820191906000526020600020905b8154815290600101906020018083116106a557829003601f168201915b5050505050905090565b60006106e06106d9610ec9565b8484610ecd565b50600192915050565b6a115eec47f6cf7e3500000090565b60086020526000908152604090205460ff1681565b610725600080516020611c2783398151915282610dd0565b50565b6000610735848484610f81565b6001600160a01b038416600090815260016020526040812081610756610ec9565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156107a25760405162461bcd60e51b8152600401610799906118a9565b60405180910390fd5b6107b6856107ae610ec9565b858403610ecd565b506001949350505050565b60009081526005602052604090206001015490565b6107df826107c1565b6107f0816107eb610ec9565b6110a5565b6107fa8383611109565b505050565b7f000000000000000000000000000000000000000000000000000000000000001290565b7f000000000000000000000000000000000000000000115eec47f6cf7e3500000090565b61084f610ec9565b6001600160a01b0316816001600160a01b03161461087f5760405162461bcd60e51b815260040161079990611a67565b6108898282611190565b5050565b60006106e061089a610ec9565b8484600160006108a8610ec9565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546108dc9190611b26565b610ecd565b6108f9600080516020611c2783398151915233610b3d565b6109155760405162461bcd60e51b8152600401610799906118f1565b7f000000000000000000000000000000000000000000115eec47f6cf7e350000008161093f611215565b6109499190611b26565b11156109675760405162461bcd60e51b815260040161079990611918565b610889828261121b565b6006546001600160a01b031681565b60065460408051600481526024810182526020810180516001600160e01b0316633e3b48f960e21b179052905160009283926001600160a01b03909116916109c89190611669565b6000604051808303816000865af19150503d8060008114610a05576040519150601f19603f3d011682016040523d82523d6000602084013e610a0a565b606091505b509150915081610a1957600080fd5b60008082806020019051810190610a309190611535565b90925090506001600160a01b038216610a5b5760405162461bcd60e51b8152600401610799906119d8565b60008111610a7b5760405162461bcd60e51b8152600401610799906119fe565b7f000000000000000000000000000000000000000000115eec47f6cf7e3500000081610aa5611215565b610aaf9190611b26565b1115610acd5760405162461bcd60e51b815260040161079990611918565b610ad7828261121b565b50505050565b610725600080516020611c07833981519152826107d6565b610725600080516020611c27833981519152826107d6565b60076020526000908152604090205460ff1681565b6001600160a01b031660009081526020819052604090205490565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610725600080516020611c0783398151915282610dd0565b60606004805461064990611ba0565b600081565b60008060016000610ba3610ec9565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610bef5760405162461bcd60e51b815260040161079990611a22565b610c03610bfa610ec9565b85858403610ecd565b5060019392505050565b60006106e0610c1a610ec9565b8484610f81565b610c39600080516020611c0783398151915233610b3d565b610c555760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526008602052604090819020805460ff19169055517f82ed7fa5e40c7e10684e7b194ed3b6018176aa90b3d9868fce84935dbe150c5a90610ca59083906116fa565b60405180910390a150565b610cc8600080516020611c0783398151915233610b3d565b610ce45760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526008602052604090819020805460ff19166001179055517f95a3703943639201698c3d8eace77e5d627e3ced845923dddcd72a69f582564b90610ca59083906116fa565b610d4f600080516020611c0783398151915233610b3d565b610d6b5760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526007602052604090819020805460ff19166001179055517f3af3b78cfb2908165b7e4ed46e4adacd1426d6d49b2115d603ea6d1b82a2d7c290610ca59083906116fa565b600080516020611c2783398151915281565b610dd9826107c1565b610de5816107eb610ec9565b6107fa8383611190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610e32600080516020611c0783398151915233610b3d565b610e4e5760405162461bcd60e51b815260040161079990611aed565b6001600160a01b03811660009081526007602052604090819020805460ff19169055517fb47551815379694a5b5e39a8d22ce4033b80f132dccf5c757ab2f880725207ed90610ca59083906116fa565b600080516020611c0783398151915281565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6001600160a01b038316610ef35760405162461bcd60e51b815260040161079990611994565b6001600160a01b038216610f195760405162461bcd60e51b8152600401610799906117f6565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f74908590611719565b60405180910390a3505050565b6001600160a01b038316610fa75760405162461bcd60e51b81526004016107999061194f565b6001600160a01b038216610fcd5760405162461bcd60e51b81526004016107999061178a565b610fd88383836112e3565b6001600160a01b038316600090815260208190526040902054818110156110115760405162461bcd60e51b815260040161079990611838565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611048908490611b26565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110929190611719565b60405180910390a3610ad78484846107fa565b6110af8282610b3d565b610889576110c7816001600160a01b03166014611360565b6110d2836020611360565b6040516020016110e3929190611685565b60408051601f198184030181529082905262461bcd60e51b825261079991600401611722565b6111138282610b3d565b6108895760008281526005602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561114c610ec9565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61119a8282610b3d565b156108895760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191690556111d1610ec9565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60025490565b6001600160a01b0382166112415760405162461bcd60e51b815260040161079990611ab6565b61124d600083836112e3565b806002600082825461125f9190611b26565b90915550506001600160a01b0382166000908152602081905260408120805483929061128c908490611b26565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112cf908590611719565b60405180910390a3610889600083836107fa565b6001600160a01b03831660009081526007602052604090205460ff161561131c5760405162461bcd60e51b81526004016107999061187e565b6001600160a01b03821660009081526008602052604090205460ff16156113555760405162461bcd60e51b8152600401610799906117cd565b6107fa8383836107fa565b6060600061136f836002611b3e565b61137a906002611b26565b67ffffffffffffffff8111156113a057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113ca576020820181803683370190505b509050600360fc1b816000815181106113f357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061143057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611454846002611b3e565b61145f906001611b26565b90505b60018111156114f3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114a157634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106114c557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936114ec81611b89565b9050611462565b5083156115125760405162461bcd60e51b815260040161079990611755565b9392505050565b60006020828403121561152a578081fd5b813561151281611bf1565b60008060408385031215611547578081fd5b825161155281611bf1565b6020939093015192949293505050565b60008060408385031215611574578182fd5b823561157f81611bf1565b9150602083013561158f81611bf1565b809150509250929050565b6000806000606084860312156115ae578081fd5b83356115b981611bf1565b925060208401356115c981611bf1565b929592945050506040919091013590565b600080604083850312156115ec578182fd5b82356115f781611bf1565b946020939093013593505050565b600060208284031215611616578081fd5b5035919050565b6000806040838503121561162f578182fd5b82359150602083013561158f81611bf1565b600060208284031215611652578081fd5b81356001600160e01b031981168114611512578182fd5b6000825161167b818460208701611b5d565b9190910192915050565b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516116bd816017850160208801611b5d565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516116ee816028840160208801611b5d565b01602801949350505050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6000602082528251806020840152611741816040850160208701611b5d565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600f908201526e1d1bc81a5b88189b1858dadb1a5cdd608a1b604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b602080825260119082015270199c9bdb481a5b88189b1858dadb1a5cdd607a1b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252600d908201526c6e6f74206d696e7420726f6c6560981b604082015260600190565b60208082526019908201527f457863656564696e6720746865207570706572206c696d697400000000000000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252600c908201526b6e6f206d696e74206974656d60a01b604082015260600190565b6020808252600a908201526930b6b7bab73a1032b93960b11b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6020808252601190820152706e6f74206f70657261746f7220726f6c6560781b604082015260600190565b60ff91909116815260200190565b60008219821115611b3957611b39611bdb565b500190565b6000816000190483118215151615611b5857611b58611bdb565b500290565b60005b83811015611b78578181015183820152602001611b60565b83811115610ad75750506000910152565b600081611b9857611b98611bdb565b506000190190565b600281046001821680611bb457607f821691505b60208210811415611bd557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461072557600080fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220272eda6f43b74ce96906819e7e1e4bc1e42188fec80c9f2ed335ada513bf6f7764736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000068fddc1e4588ef3f13e31cdecac1c0acdf2f33e8000000000000000000000000000000000000000000000000000000000000001252616e6765727350726f746f636f6c476173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035250470000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): RangersProtocolGas
Arg [1] : symbol_ (string): RPG
Arg [2] : mintcontract (address): 0x68FDDc1e4588EF3f13e31CdecaC1C0ACdF2f33E8

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000068fddc1e4588ef3f13e31cdecac1c0acdf2f33e8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 52616e6765727350726f746f636f6c4761730000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5250470000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31493:3582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26465:204;;;;;;;;;;-1:-1:-1;26465:204:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6781:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8948:169::-;;;;;;;;;;-1:-1:-1;8948:169:0;;;;;:::i;:::-;;:::i;33332:107::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31839:49::-;;;;;;;;;;-1:-1:-1;31839:49:0;;;;;:::i;:::-;;:::i;34506:89::-;;;;;;;;;;-1:-1:-1;34506:89:0;;;;;:::i;:::-;;:::i;:::-;;9599:492;;;;;;;;;;-1:-1:-1;9599:492:0;;;;;:::i;:::-;;:::i;27876:123::-;;;;;;;;;;-1:-1:-1;27876:123:0;;;;;:::i;:::-;;:::i;28261:147::-;;;;;;;;;;-1:-1:-1;28261:147:0;;;;;:::i;:::-;;:::i;33220:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32456:76::-;;;;;;;;;;;;;:::i;29309:218::-;;;;;;;;;;-1:-1:-1;29309:218:0;;;;;:::i;:::-;;:::i;10500:215::-;;;;;;;;;;-1:-1:-1;10500:215:0;;;;;:::i;:::-;;:::i;32540:181::-;;;;;;;;;;-1:-1:-1;32540:181:0;;;;;:::i;:::-;;:::i;31745:28::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32726:486::-;;;:::i;34604:91::-;;;;;;;;;;-1:-1:-1;34604:91:0;;;;;:::i;:::-;;:::i;34413:85::-;;;;;;;;;;-1:-1:-1;34413:85:0;;;;;:::i;:::-;;:::i;31782:50::-;;;;;;;;;;-1:-1:-1;31782:50:0;;;;;:::i;:::-;;:::i;8072:127::-;;;;;;;;;;-1:-1:-1;8072:127:0;;;;;:::i;:::-;;:::i;26761:139::-;;;;;;;;;;-1:-1:-1;26761:139:0;;;;;:::i;:::-;;:::i;34703:95::-;;;;;;;;;;-1:-1:-1;34703:95:0;;;;;:::i;:::-;;:::i;7000:104::-;;;;;;;;;;;;;:::i;25852:49::-;;;;;;;;;;;;;:::i;11218:413::-;;;;;;;;;;-1:-1:-1;11218:413:0;;;;;:::i;:::-;;:::i;8412:175::-;;;;;;;;;;-1:-1:-1;8412:175:0;;;;;:::i;:::-;;:::i;34244:161::-;;;;;;;;;;-1:-1:-1;34244:161:0;;;;;:::i;:::-;;:::i;34082:154::-;;;;;;;;;;-1:-1:-1;34082:154:0;;;;;:::i;:::-;;:::i;33746:157::-;;;;;;;;;;-1:-1:-1;33746:157:0;;;;;:::i;:::-;;:::i;31542:62::-;;;;;;;;;;;;;:::i;28653:149::-;;;;;;;;;;-1:-1:-1;28653:149:0;;;;;:::i;:::-;;:::i;8650:151::-;;;;;;;;;;-1:-1:-1;8650:151:0;;;;;:::i;:::-;;:::i;33911:161::-;;;;;;;;;;-1:-1:-1;33911:161:0;;;;;:::i;:::-;;:::i;31611:66::-;;;;;;;;;;;;;:::i;26465:204::-;26550:4;-1:-1:-1;;;;;;26574:47:0;;-1:-1:-1;;;26574:47:0;;:87;;;26625:36;26649:11;26625:23;:36::i;:::-;26567:94;26465:204;-1:-1:-1;;26465:204:0:o;6781:100::-;6835:13;6868:5;6861:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6781:100;:::o;8948:169::-;9031:4;9048:39;9057:12;:10;:12::i;:::-;9071:7;9080:6;9048:8;:39::i;:::-;-1:-1:-1;9105:4:0;8948:169;;;;:::o;33332:107::-;33412:19;33332:107;:::o;31839:49::-;;;;;;;;;;;;;;;:::o;34506:89::-;34561:27;-1:-1:-1;;;;;;;;;;;34585:2:0;34561:10;:27::i;:::-;34506:89;:::o;9599:492::-;9739:4;9756:36;9766:6;9774:9;9785:6;9756:9;:36::i;:::-;-1:-1:-1;;;;;9832:19:0;;9805:24;9832:19;;;:11;:19;;;;;9805:24;9852:12;:10;:12::i;:::-;-1:-1:-1;;;;;9832:33:0;-1:-1:-1;;;;;9832:33:0;;;;;;;;;;;;;9805:60;;9904:6;9884:16;:26;;9876:79;;;;-1:-1:-1;;;9876:79:0;;;;;;;:::i;:::-;;;;;;;;;9991:57;10000:6;10008:12;:10;:12::i;:::-;10041:6;10022:16;:25;9991:8;:57::i;:::-;-1:-1:-1;10079:4:0;;9599:492;-1:-1:-1;;;;9599:492:0:o;27876:123::-;27942:7;27969:12;;;:6;:12;;;;;:22;;;;27876:123::o;28261:147::-;28344:18;28357:4;28344:12;:18::i;:::-;26343:30;26354:4;26360:12;:10;:12::i;:::-;26343:10;:30::i;:::-;28375:25:::1;28386:4;28392:7;28375:10;:25::i;:::-;28261:147:::0;;;:::o;33220:100::-;33303:9;33220:100;:::o;32456:76::-;32520:4;32456:76;:::o;29309:218::-;29416:12;:10;:12::i;:::-;-1:-1:-1;;;;;29405:23:0;:7;-1:-1:-1;;;;;29405:23:0;;29397:83;;;;-1:-1:-1;;;29397:83:0;;;;;;;:::i;:::-;29493:26;29505:4;29511:7;29493:11;:26::i;:::-;29309:218;;:::o;10500:215::-;10588:4;10605:80;10614:12;:10;:12::i;:::-;10628:7;10674:10;10637:11;:25;10649:12;:10;:12::i;:::-;-1:-1:-1;;;;;10637:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;10637:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;10605:8;:80::i;32540:181::-;34874:32;-1:-1:-1;;;;;;;;;;;34895:10:0;34874:7;:32::i;:::-;34866:58;;;;-1:-1:-1;;;34866:58:0;;;;;;;:::i;:::-;32651:4:::1;32641:6;32619:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:36;;32611:74;;;;-1:-1:-1::0;;;32611:74:0::1;;;;;;;:::i;:::-;32696:17;32702:2;32706:6;32696:5;:17::i;31745:28::-:0;;;-1:-1:-1;;;;;31745:28:0;;:::o;32726:486::-;32821:13;;32840:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32840:40:0;-1:-1:-1;;;32840:40:0;;;32821:60;;32790:11;;;;-1:-1:-1;;;;;32821:13:0;;;;:60;;32840:40;32821:60;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32789:92;;;;32900:6;32892:15;;;;;;32919:10;32930:14;32959:1;32948:31;;;;;;;;;;;;:::i;:::-;32918:61;;-1:-1:-1;32918:61:0;-1:-1:-1;;;;;;32998:16:0;;32990:40;;;;-1:-1:-1;;;32990:40:0;;;;;;;:::i;:::-;33058:1;33049:6;:10;33041:40;;;;-1:-1:-1;;;33041:40:0;;;;;;;:::i;:::-;33142:4;33132:6;33110:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:36;;33102:74;;;;-1:-1:-1;;;33102:74:0;;;;;;;:::i;:::-;33187:17;33193:2;33197:6;33187:5;:17::i;:::-;32726:486;;;;:::o;34604:91::-;34660:28;-1:-1:-1;;;;;;;;;;;34685:2:0;34660:9;:28::i;34413:85::-;34465:26;-1:-1:-1;;;;;;;;;;;34488:2:0;34465:9;:26::i;31782:50::-;;;;;;;;;;;;;;;:::o;8072:127::-;-1:-1:-1;;;;;8173:18:0;8146:7;8173:18;;;;;;;;;;;;8072:127::o;26761:139::-;26839:4;26863:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;26863:29:0;;;;;;;;;;;;;;;26761:139::o;34703:95::-;34762:29;-1:-1:-1;;;;;;;;;;;34788:2:0;34762:10;:29::i;7000:104::-;7056:13;7089:7;7082:14;;;;;:::i;25852:49::-;25897:4;25852:49;:::o;11218:413::-;11311:4;11328:24;11355:11;:25;11367:12;:10;:12::i;:::-;-1:-1:-1;;;;;11355:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;11355:25:0;;;:34;;;;;;;;;;;-1:-1:-1;11408:35:0;;;;11400:85;;;;-1:-1:-1;;;11400:85:0;;;;;;;:::i;:::-;11521:67;11530:12;:10;:12::i;:::-;11544:7;11572:15;11553:16;:34;11521:8;:67::i;:::-;-1:-1:-1;11619:4:0;;11218:413;-1:-1:-1;;;11218:413:0:o;8412:175::-;8498:4;8515:42;8525:12;:10;:12::i;:::-;8539:9;8550:6;8515:9;:42::i;34244:161::-;34996:34;-1:-1:-1;;;;;;;;;;;35019:10:0;34996:7;:34::i;:::-;34988:64;;;;-1:-1:-1;;;34988:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34330:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;34323:29;;-1:-1:-1;;34323:29:0::1;::::0;;34369:28;::::1;::::0;::::1;::::0;34347:4;;34369:28:::1;:::i;:::-;;;;;;;;34244:161:::0;:::o;34082:154::-;34996:34;-1:-1:-1;;;;;;;;;;;35019:10:0;34996:7;:34::i;:::-;34988:64;;;;-1:-1:-1;;;34988:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34158:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;34158:29:0::1;34183:4;34158:29;::::0;;34203:25;::::1;::::0;::::1;::::0;34175:4;;34203:25:::1;:::i;33746:157::-:0;34996:34;-1:-1:-1;;;;;;;;;;;35019:10:0;34996:7;:34::i;:::-;34988:64;;;;-1:-1:-1;;;34988:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33823:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;:30;;-1:-1:-1;;33823:30:0::1;33849:4;33823:30;::::0;;33869:26;::::1;::::0;::::1;::::0;33841:4;;33869:26:::1;:::i;31542:62::-:0;-1:-1:-1;;;;;;;;;;;31542:62:0;:::o;28653:149::-;28737:18;28750:4;28737:12;:18::i;:::-;26343:30;26354:4;26360:12;:10;:12::i;26343:30::-;28768:26:::1;28780:4;28786:7;28768:11;:26::i;8650:151::-:0;-1:-1:-1;;;;;8766:18:0;;;8739:7;8766:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8650:151::o;33911:161::-;34996:34;-1:-1:-1;;;;;;;;;;;35019:10:0;34996:7;:34::i;:::-;34988:64;;;;-1:-1:-1;;;34988:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33997:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;33990:30;;-1:-1:-1;;33990:30:0::1;::::0;;34035:29;::::1;::::0;::::1;::::0;34015:4;;34035:29:::1;:::i;31611:66::-:0;-1:-1:-1;;;;;;;;;;;31611:66:0;:::o;23719:157::-;-1:-1:-1;;;;;;23828:40:0;;-1:-1:-1;;;23828:40:0;23719:157;;;:::o;4430:98::-;4510:10;4430:98;:::o;14902:380::-;-1:-1:-1;;;;;15038:19:0;;15030:68;;;;-1:-1:-1;;;15030:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15117:21:0;;15109:68;;;;-1:-1:-1;;;15109:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15190:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;15242:32;;;;;15220:6;;15242:32;:::i;:::-;;;;;;;;14902:380;;;:::o;12121:733::-;-1:-1:-1;;;;;12261:20:0;;12253:70;;;;-1:-1:-1;;;12253:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12342:23:0;;12334:71;;;;-1:-1:-1;;;12334:71:0;;;;;;;:::i;:::-;12418:47;12439:6;12447:9;12458:6;12418:20;:47::i;:::-;-1:-1:-1;;;;;12502:17:0;;12478:21;12502:17;;;;;;;;;;;12538:23;;;;12530:74;;;;-1:-1:-1;;;12530:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12640:17:0;;;:9;:17;;;;;;;;;;;12660:22;;;12640:42;;12704:20;;;;;;;;:30;;12676:6;;12640:9;12704:30;;12676:6;;12704:30;:::i;:::-;;;;;;;;12769:9;-1:-1:-1;;;;;12752:35:0;12761:6;-1:-1:-1;;;;;12752:35:0;;12780:6;12752:35;;;;;;:::i;:::-;;;;;;;;12800:46;12820:6;12828:9;12839:6;12800:19;:46::i;27190:497::-;27271:22;27279:4;27285:7;27271;:22::i;:::-;27266:414;;27459:41;27487:7;-1:-1:-1;;;;;27459:41:0;27497:2;27459:19;:41::i;:::-;27573:38;27601:4;27608:2;27573:19;:38::i;:::-;27364:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27364:270:0;;;;;;;;;;-1:-1:-1;;;27310:358:0;;;;;;;:::i;30810:238::-;30894:22;30902:4;30908:7;30894;:22::i;:::-;30889:152;;30933:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;30933:29:0;;;;;;;;;:36;;-1:-1:-1;;30933:36:0;30965:4;30933:36;;;31016:12;:10;:12::i;:::-;-1:-1:-1;;;;;30989:40:0;31007:7;-1:-1:-1;;;;;30989:40:0;31001:4;30989:40;;;;;;;;;;30810:238;;:::o;31180:239::-;31264:22;31272:4;31278:7;31264;:22::i;:::-;31260:152;;;31335:5;31303:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;31303:29:0;;;;;;;;;:37;;-1:-1:-1;;31303:37:0;;;31387:12;:10;:12::i;:::-;-1:-1:-1;;;;;31360:40:0;31378:7;-1:-1:-1;;;;;31360:40:0;31372:4;31360:40;;;;;;;;;;31180:239;;:::o;7901:108::-;7989:12;;7901:108;:::o;13141:399::-;-1:-1:-1;;;;;13225:21:0;;13217:65;;;;-1:-1:-1;;;13217:65:0;;;;;;;:::i;:::-;13295:49;13324:1;13328:7;13337:6;13295:20;:49::i;:::-;13373:6;13357:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13390:18:0;;:9;:18;;;;;;;;;;:28;;13412:6;;13390:9;:28;;13412:6;;13390:28;:::i;:::-;;;;-1:-1:-1;;13434:37:0;;-1:-1:-1;;;;;13434:37:0;;;13451:1;;13434:37;;;;13464:6;;13434:37;:::i;:::-;;;;;;;;13484:48;13512:1;13516:7;13525:6;13484:19;:48::i;33447:293::-;-1:-1:-1;;;;;33572:23:0;;;;;;:17;:23;;;;;;;;33571:24;33563:54;;;;-1:-1:-1;;;33563:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33637:20:0;;;;;;:16;:20;;;;;;;;33636:21;33628:49;;;;-1:-1:-1;;;33628:49:0;;;;;;;:::i;:::-;33688:44;33715:4;33721:2;33725:6;33688:26;:44::i;21465:451::-;21540:13;21566:19;21598:10;21602:6;21598:1;:10;:::i;:::-;:14;;21611:1;21598:14;:::i;:::-;21588:25;;;;;;-1:-1:-1;;;21588:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21588:25:0;;21566:47;;-1:-1:-1;;;21624:6:0;21631:1;21624:9;;;;;;-1:-1:-1;;;21624:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;21624:15:0;;;;;;;;;-1:-1:-1;;;21650:6:0;21657:1;21650:9;;;;;;-1:-1:-1;;;21650:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;21650:15:0;;;;;;;;-1:-1:-1;21681:9:0;21693:10;21697:6;21693:1;:10;:::i;:::-;:14;;21706:1;21693:14;:::i;:::-;21681:26;;21676:135;21713:1;21709;:5;21676:135;;;-1:-1:-1;;;21761:5:0;21769:3;21761:11;21748:25;;;;;-1:-1:-1;;;21748:25:0;;;;;;;;;;;;21736:6;21743:1;21736:9;;;;;;-1:-1:-1;;;21736:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;21736:37:0;;;;;;;;-1:-1:-1;21798:1:0;21788:11;;;;;21716:3;;;:::i;:::-;;;21676:135;;;-1:-1:-1;21829:10:0;;21821:55;;;;-1:-1:-1;;;21821:55:0;;;;;;;:::i;:::-;21901:6;21465:451;-1:-1:-1;;;21465:451:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:332::-;;;426:2;414:9;405:7;401:23;397:32;394:2;;;447:6;439;432:22;394:2;484:9;478:16;503:33;530:5;503:33;:::i;:::-;600:2;585:18;;;;579:25;555:5;;579:25;;-1:-1:-1;;;384:226:1:o;615:402::-;;;744:2;732:9;723:7;719:23;715:32;712:2;;;765:6;757;750:22;712:2;809:9;796:23;828:33;855:5;828:33;:::i;:::-;880:5;-1:-1:-1;937:2:1;922:18;;909:32;950:35;909:32;950:35;:::i;:::-;1004:7;994:17;;;702:315;;;;;:::o;1022:470::-;;;;1168:2;1156:9;1147:7;1143:23;1139:32;1136:2;;;1189:6;1181;1174:22;1136:2;1233:9;1220:23;1252:33;1279:5;1252:33;:::i;:::-;1304:5;-1:-1:-1;1361:2:1;1346:18;;1333:32;1374:35;1333:32;1374:35;:::i;:::-;1126:366;;1428:7;;-1:-1:-1;;;1482:2:1;1467:18;;;;1454:32;;1126:366::o;1497:327::-;;;1626:2;1614:9;1605:7;1601:23;1597:32;1594:2;;;1647:6;1639;1632:22;1594:2;1691:9;1678:23;1710:33;1737:5;1710:33;:::i;:::-;1762:5;1814:2;1799:18;;;;1786:32;;-1:-1:-1;;;1584:240:1:o;1829:190::-;;1941:2;1929:9;1920:7;1916:23;1912:32;1909:2;;;1962:6;1954;1947:22;1909:2;-1:-1:-1;1990:23:1;;1899:120;-1:-1:-1;1899:120:1:o;2024:327::-;;;2153:2;2141:9;2132:7;2128:23;2124:32;2121:2;;;2174:6;2166;2159:22;2121:2;2215:9;2202:23;2192:33;;2275:2;2264:9;2260:18;2247:32;2288:33;2315:5;2288:33;:::i;2356:306::-;;2467:2;2455:9;2446:7;2442:23;2438:32;2435:2;;;2488:6;2480;2473:22;2435:2;2519:23;;-1:-1:-1;;;;;;2571:32:1;;2561:43;;2551:2;;2623:6;2615;2608:22;2667:274;;2834:6;2828:13;2850:53;2896:6;2891:3;2884:4;2876:6;2872:17;2850:53;:::i;:::-;2919:16;;;;;2804:137;-1:-1:-1;;2804:137:1:o;2946:786::-;;3357:25;3352:3;3345:38;3412:6;3406:13;3428:62;3483:6;3478:2;3473:3;3469:12;3462:4;3454:6;3450:17;3428:62;:::i;:::-;-1:-1:-1;;;3549:2:1;3509:16;;;3541:11;;;3534:40;3599:13;;3621:63;3599:13;3670:2;3662:11;;3655:4;3643:17;;3621:63;:::i;:::-;3704:17;3723:2;3700:26;;3335:397;-1:-1:-1;;;;3335:397:1:o;3737:203::-;-1:-1:-1;;;;;3901:32:1;;;;3883:51;;3871:2;3856:18;;3838:102::o;3945:187::-;4110:14;;4103:22;4085:41;;4073:2;4058:18;;4040:92::o;4137:177::-;4283:25;;;4271:2;4256:18;;4238:76::o;4319:383::-;;4468:2;4457:9;4450:21;4500:6;4494:13;4543:6;4538:2;4527:9;4523:18;4516:34;4559:66;4618:6;4613:2;4602:9;4598:18;4593:2;4585:6;4581:15;4559:66;:::i;:::-;4686:2;4665:15;-1:-1:-1;;4661:29:1;4646:45;;;;4693:2;4642:54;;4440:262;-1:-1:-1;;4440:262:1:o;4707:356::-;4909:2;4891:21;;;4928:18;;;4921:30;4987:34;4982:2;4967:18;;4960:62;5054:2;5039:18;;4881:182::o;5068:399::-;5270:2;5252:21;;;5309:2;5289:18;;;5282:30;5348:34;5343:2;5328:18;;5321:62;-1:-1:-1;;;5414:2:1;5399:18;;5392:33;5457:3;5442:19;;5242:225::o;5472:339::-;5674:2;5656:21;;;5713:2;5693:18;;;5686:30;-1:-1:-1;;;5747:2:1;5732:18;;5725:45;5802:2;5787:18;;5646:165::o;5816:398::-;6018:2;6000:21;;;6057:2;6037:18;;;6030:30;6096:34;6091:2;6076:18;;6069:62;-1:-1:-1;;;6162:2:1;6147:18;;6140:32;6204:3;6189:19;;5990:224::o;6219:402::-;6421:2;6403:21;;;6460:2;6440:18;;;6433:30;6499:34;6494:2;6479:18;;6472:62;-1:-1:-1;;;6565:2:1;6550:18;;6543:36;6611:3;6596:19;;6393:228::o;6626:341::-;6828:2;6810:21;;;6867:2;6847:18;;;6840:30;-1:-1:-1;;;6901:2:1;6886:18;;6879:47;6958:2;6943:18;;6800:167::o;6972:404::-;7174:2;7156:21;;;7213:2;7193:18;;;7186:30;7252:34;7247:2;7232:18;;7225:62;-1:-1:-1;;;7318:2:1;7303:18;;7296:38;7366:3;7351:19;;7146:230::o;7381:337::-;7583:2;7565:21;;;7622:2;7602:18;;;7595:30;-1:-1:-1;;;7656:2:1;7641:18;;7634:43;7709:2;7694:18;;7555:163::o;7723:349::-;7925:2;7907:21;;;7964:2;7944:18;;;7937:30;8003:27;7998:2;7983:18;;7976:55;8063:2;8048:18;;7897:175::o;8077:401::-;8279:2;8261:21;;;8318:2;8298:18;;;8291:30;8357:34;8352:2;8337:18;;8330:62;-1:-1:-1;;;8423:2:1;8408:18;;8401:35;8468:3;8453:19;;8251:227::o;8483:400::-;8685:2;8667:21;;;8724:2;8704:18;;;8697:30;8763:34;8758:2;8743:18;;8736:62;-1:-1:-1;;;8829:2:1;8814:18;;8807:34;8873:3;8858:19;;8657:226::o;8888:336::-;9090:2;9072:21;;;9129:2;9109:18;;;9102:30;-1:-1:-1;;;9163:2:1;9148:18;;9141:42;9215:2;9200:18;;9062:162::o;9229:334::-;9431:2;9413:21;;;9470:2;9450:18;;;9443:30;-1:-1:-1;;;9504:2:1;9489:18;;9482:40;9554:2;9539:18;;9403:160::o;9568:401::-;9770:2;9752:21;;;9809:2;9789:18;;;9782:30;9848:34;9843:2;9828:18;;9821:62;-1:-1:-1;;;9914:2:1;9899:18;;9892:35;9959:3;9944:19;;9742:227::o;9974:411::-;10176:2;10158:21;;;10215:2;10195:18;;;10188:30;10254:34;10249:2;10234:18;;10227:62;-1:-1:-1;;;10320:2:1;10305:18;;10298:45;10375:3;10360:19;;10148:237::o;10390:355::-;10592:2;10574:21;;;10631:2;10611:18;;;10604:30;10670:33;10665:2;10650:18;;10643:61;10736:2;10721:18;;10564:181::o;10750:341::-;10952:2;10934:21;;;10991:2;10971:18;;;10964:30;-1:-1:-1;;;11025:2:1;11010:18;;11003:47;11082:2;11067:18;;10924:167::o;11278:184::-;11450:4;11438:17;;;;11420:36;;11408:2;11393:18;;11375:87::o;11467:128::-;;11538:1;11534:6;11531:1;11528:13;11525:2;;;11544:18;;:::i;:::-;-1:-1:-1;11580:9:1;;11515:80::o;11600:168::-;;11706:1;11702;11698:6;11694:14;11691:1;11688:21;11683:1;11676:9;11669:17;11665:45;11662:2;;;11713:18;;:::i;:::-;-1:-1:-1;11753:9:1;;11652:116::o;11773:258::-;11845:1;11855:113;11869:6;11866:1;11863:13;11855:113;;;11945:11;;;11939:18;11926:11;;;11919:39;11891:2;11884:10;11855:113;;;11986:6;11983:1;11980:13;11977:2;;;-1:-1:-1;;12021:1:1;12003:16;;11996:27;11826:205::o;12036:136::-;;12103:5;12093:2;;12112:18;;:::i;:::-;-1:-1:-1;;;12148:18:1;;12083:89::o;12177:380::-;12262:1;12252:12;;12309:1;12299:12;;;12320:2;;12374:4;12366:6;12362:17;12352:27;;12320:2;12427;12419:6;12416:14;12396:18;12393:38;12390:2;;;12473:10;12468:3;12464:20;12461:1;12454:31;12508:4;12505:1;12498:15;12536:4;12533:1;12526:15;12390:2;;12232:325;;;:::o;12562:127::-;12623:10;12618:3;12614:20;12611:1;12604:31;12654:4;12651:1;12644:15;12678:4;12675:1;12668:15;12694:133;-1:-1:-1;;;;;12771:31:1;;12761:42;;12751:2;;12817:1;12814;12807:12

Swarm Source

ipfs://272eda6f43b74ce96906819e7e1e4bc1e42188fec80c9f2ed335ada513bf6f77
Loading...
Loading
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.