ETH Price: $3,442.77 (-1.19%)

Token

NERA Token (NERA)
 

Overview

Max Total Supply

120,025,722.558078703703703703 NERA

Holders

5,152 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
550 NERA

Value
$0.00
0x4A28e6C91781867090989E2c6044A87451F84E7C
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ERAX is an NFT platform with a fully autonomous community logic. NFT should not only be about trading and selling artworks. It should be a life that allows more people to participate!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NERA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-21
*/

// File: node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin\contracts\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 guidelines: functions revert instead
 * of 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 defaut 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");
        _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(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:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 to 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 { }
}

// File: @openzeppelin\contracts\access\Ownable.sol



pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin\contracts\utils\structs\EnumerableSet.sol



pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

// File: contracts\token\NERA.sol



pragma solidity ^0.8.0;




/**
 * @title Interface for other's contracts use
 * @dev This functions will be called by other's contracts
 */
interface INERA {
    /**
     * @dev Mining for NERA tokens.
     *
     */
    function mint(address to, uint256 amount) external returns (bool);
}


contract NERA is ERC20, Ownable, INERA {

    // community
    uint256 private constant communitySupply    = 120000000 * 1e18;
    
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _minters;

    constructor() ERC20("NERA Token", "NERA")
    {
        _mint(msg.sender, communitySupply);
    }
    
    /**
     * @dev See {INERA-mint}. 
     * Mining for NERA tokens.
     */
    function mint(address to, uint256 amount) 
        public 
        virtual
        override
        onlyMinter 
        returns (bool) 
    {
        _mint(to, amount);
        return true;
    }

    function burn(uint256 amount) 
        public 
        onlyOwner
        returns (bool)  
    {
        _burn(msg.sender, amount);
        return true;
    }

    function addMinter(address miner) 
        public 
        onlyOwner 
        returns (bool)
    {
        require(miner != address(0), "NERA: miner is the zero address");
        return _minters.add(miner);
    }

    function delMinter(address _delMinter)
        public
        onlyOwner 
        returns (bool)
    {
        require(_delMinter != address(0), "NERA: _delMinter is the zero address");
        return _minters.remove(_delMinter);
    }

    function getMinterLength() 
        public 
        view 
        returns (uint256)
    {
        return _minters.length();
    }

    function isMinter(address account)
        public
        view
        returns (bool)
    {
        return _minters.contains(account);
    }

    function getMinter(uint256 idx)
        public
        view
        onlyOwner
        returns (address)
    {
        require(idx < getMinterLength(), "NERA: index out of bounds");
        return _minters.at(idx);
    }

    modifier onlyMinter() 
    {
        require(isMinter(msg.sender), "NERA: caller is not the minter");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_delMinter","type":"address"}],"name":"delMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f4e45524120546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e45524100000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620002f8565b508060049080519060200190620000af929190620002f8565b5050506000620000c46200018660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000180336a6342fd08f00f63780000006200018e60201b60201c565b62000546565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000201576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f890620003fb565b60405180910390fd5b6200021560008383620002f360201b60201c565b80600260008282546200022991906200044b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200028091906200044b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002e791906200041d565b60405180910390a35050565b505050565b8280546200030690620004b2565b90600052602060002090601f0160209004810192826200032a576000855562000376565b82601f106200034557805160ff191683800117855562000376565b8280016001018555821562000376579182015b828111156200037557825182559160200191906001019062000358565b5b50905062000385919062000389565b5090565b5b80821115620003a45760008160009055506001016200038a565b5090565b6000620003b7601f836200043a565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620003f581620004a8565b82525050565b600060208201905081810360008301526200041681620003a8565b9050919050565b6000602082019050620004346000830184620003ea565b92915050565b600082825260208201905092915050565b60006200045882620004a8565b91506200046583620004a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200049d576200049c620004e8565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620004cb57607f821691505b60208210811415620004e257620004e162000517565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61282880620005566000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635b7121f8116100b8578063983b2d561161007c578063983b2d561461037a578063a457c2d7146103aa578063a9059cbb146103da578063aa271e1a1461040a578063dd62ed3e1461043a578063f2fde38b1461046a57610137565b80635b7121f8146102d457806370a0823114610304578063715018a6146103345780638da5cb5b1461033e57806395d89b411461035c57610137565b806323b872dd116100ff57806323b872dd146101f6578063313ce56714610226578063395093511461024457806340c10f191461027457806342966c68146102a457610137565b80630323aac71461013c57806306fdde031461015a578063095ea7b31461017857806318160ddd146101a857806323338b88146101c6575b600080fd5b610144610486565b60405161015191906125bf565b60405180910390f35b610162610497565b60405161016f919061237d565b60405180910390f35b610192600480360381019061018d9190611c65565b610529565b60405161019f9190612362565b60405180910390f35b6101b0610547565b6040516101bd91906125bf565b60405180910390f35b6101e060048036038101906101db9190611bb1565b610551565b6040516101ed9190612362565b60405180910390f35b610210600480360381019061020b9190611c16565b61065a565b60405161021d9190612362565b60405180910390f35b61022e61075b565b60405161023b91906125da565b60405180910390f35b61025e60048036038101906102599190611c65565b610764565b60405161026b9190612362565b60405180910390f35b61028e60048036038101906102899190611c65565b610810565b60405161029b9190612362565b60405180910390f35b6102be60048036038101906102b99190611ca1565b61086e565b6040516102cb9190612362565b60405180910390f35b6102ee60048036038101906102e99190611ca1565b6108ff565b6040516102fb9190612347565b60405180910390f35b61031e60048036038101906103199190611bb1565b6109e1565b60405161032b91906125bf565b60405180910390f35b61033c610a29565b005b610346610b66565b6040516103539190612347565b60405180910390f35b610364610b90565b604051610371919061237d565b60405180910390f35b610394600480360381019061038f9190611bb1565b610c22565b6040516103a19190612362565b60405180910390f35b6103c460048036038101906103bf9190611c65565b610d2b565b6040516103d19190612362565b60405180910390f35b6103f460048036038101906103ef9190611c65565b610e1f565b6040516104019190612362565b60405180910390f35b610424600480360381019061041f9190611bb1565b610e3d565b6040516104319190612362565b60405180910390f35b610454600480360381019061044f9190611bda565b610e5a565b60405161046191906125bf565b60405180910390f35b610484600480360381019061047f9190611bb1565b610ee1565b005b6000610492600661108d565b905090565b6060600380546104a690612723565b80601f01602080910402602001604051908101604052809291908181526020018280546104d290612723565b801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b5050505050905090565b600061053d6105366110a2565b84846110aa565b6001905092915050565b6000600254905090565b600061055b6110a2565b73ffffffffffffffffffffffffffffffffffffffff16610579610b66565b73ffffffffffffffffffffffffffffffffffffffff16146105cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c6906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561063f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106369061253f565b60405180910390fd5b61065382600661127590919063ffffffff16565b9050919050565b60006106678484846112a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106b26110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610729906124bf565b60405180910390fd5b61074f8561073e6110a2565b858461074a9190612667565b6110aa565b60019150509392505050565b60006012905090565b60006108066107716110a2565b84846001600061077f6110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108019190612611565b6110aa565b6001905092915050565b600061081b33610e3d565b61085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108519061249f565b60405180910390fd5b6108648383611524565b6001905092915050565b60006108786110a2565b73ffffffffffffffffffffffffffffffffffffffff16610896610b66565b73ffffffffffffffffffffffffffffffffffffffff16146108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906124df565b60405180910390fd5b6108f63383611678565b60019050919050565b60006109096110a2565b73ffffffffffffffffffffffffffffffffffffffff16610927610b66565b73ffffffffffffffffffffffffffffffffffffffff161461097d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610974906124df565b60405180910390fd5b610985610486565b82106109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906123df565b60405180910390fd5b6109da82600661184c90919063ffffffff16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a316110a2565b73ffffffffffffffffffffffffffffffffffffffff16610a4f610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b9f90612723565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcb90612723565b8015610c185780601f10610bed57610100808354040283529160200191610c18565b820191906000526020600020905b815481529060010190602001808311610bfb57829003601f168201915b5050505050905090565b6000610c2c6110a2565b73ffffffffffffffffffffffffffffffffffffffff16610c4a610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c97906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d07906123ff565b60405180910390fd5b610d2482600661186690919063ffffffff16565b9050919050565b60008060016000610d3a6110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061257f565b60405180910390fd5b610e14610e026110a2565b858584610e0f9190612667565b6110aa565b600191505092915050565b6000610e33610e2c6110a2565b84846112a5565b6001905092915050565b6000610e5382600661189690919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ee96110a2565b73ffffffffffffffffffffffffffffffffffffffff16610f07610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc49061243f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061109b826000016118c6565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111119061255f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111819061245f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126891906125bf565b60405180910390a3505050565b600061129d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6118d7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c9061251f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906123bf565b60405180910390fd5b611390838383611a55565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d9061247f565b60405180910390fd5b81816114229190612667565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b29190612611565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161151691906125bf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b9061259f565b60405180910390fd5b6115a060008383611a55565b80600260008282546115b29190612611565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116079190612611565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161166c91906125bf565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906124ff565b60405180910390fd5b6116f482600083611a55565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561177a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117719061241f565b60405180910390fd5b81816117869190612667565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546117da9190612667565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161183f91906125bf565b60405180910390a3505050565b600061185b8360000183611a5a565b60001c905092915050565b600061188e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611af4565b905092915050565b60006118be836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b64565b905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114611a495760006001826119099190612667565b90506000600186600001805490506119219190612667565b90506000866000018281548110611961577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106119ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611a0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611a4f565b60009150505b92915050565b505050565b600081836000018054905011611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9061239f565b60405180910390fd5b826000018281548110611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6000611b008383611b64565b611b59578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b5e565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081359050611b96816127c4565b92915050565b600081359050611bab816127db565b92915050565b600060208284031215611bc357600080fd5b6000611bd184828501611b87565b91505092915050565b60008060408385031215611bed57600080fd5b6000611bfb85828601611b87565b9250506020611c0c85828601611b87565b9150509250929050565b600080600060608486031215611c2b57600080fd5b6000611c3986828701611b87565b9350506020611c4a86828701611b87565b9250506040611c5b86828701611b9c565b9150509250925092565b60008060408385031215611c7857600080fd5b6000611c8685828601611b87565b9250506020611c9785828601611b9c565b9150509250929050565b600060208284031215611cb357600080fd5b6000611cc184828501611b9c565b91505092915050565b611cd38161269b565b82525050565b611ce2816126ad565b82525050565b6000611cf3826125f5565b611cfd8185612600565b9350611d0d8185602086016126f0565b611d16816127b3565b840191505092915050565b6000611d2e602283612600565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d94602383612600565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dfa601983612600565b91507f4e4552413a20696e646578206f7574206f6620626f756e6473000000000000006000830152602082019050919050565b6000611e3a601f83612600565b91507f4e4552413a206d696e657220697320746865207a65726f2061646472657373006000830152602082019050919050565b6000611e7a602283612600565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ee0602683612600565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f46602283612600565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fac602683612600565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612012601e83612600565b91507f4e4552413a2063616c6c6572206973206e6f7420746865206d696e74657200006000830152602082019050919050565b6000612052602883612600565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120b8602083612600565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006120f8602183612600565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061215e602583612600565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121c4602483612600565b91507f4e4552413a205f64656c4d696e74657220697320746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061222a602483612600565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612290602583612600565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122f6601f83612600565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b612332816126d9565b82525050565b612341816126e3565b82525050565b600060208201905061235c6000830184611cca565b92915050565b60006020820190506123776000830184611cd9565b92915050565b600060208201905081810360008301526123978184611ce8565b905092915050565b600060208201905081810360008301526123b881611d21565b9050919050565b600060208201905081810360008301526123d881611d87565b9050919050565b600060208201905081810360008301526123f881611ded565b9050919050565b6000602082019050818103600083015261241881611e2d565b9050919050565b6000602082019050818103600083015261243881611e6d565b9050919050565b6000602082019050818103600083015261245881611ed3565b9050919050565b6000602082019050818103600083015261247881611f39565b9050919050565b6000602082019050818103600083015261249881611f9f565b9050919050565b600060208201905081810360008301526124b881612005565b9050919050565b600060208201905081810360008301526124d881612045565b9050919050565b600060208201905081810360008301526124f8816120ab565b9050919050565b60006020820190508181036000830152612518816120eb565b9050919050565b6000602082019050818103600083015261253881612151565b9050919050565b60006020820190508181036000830152612558816121b7565b9050919050565b600060208201905081810360008301526125788161221d565b9050919050565b6000602082019050818103600083015261259881612283565b9050919050565b600060208201905081810360008301526125b8816122e9565b9050919050565b60006020820190506125d46000830184612329565b92915050565b60006020820190506125ef6000830184612338565b92915050565b600081519050919050565b600082825260208201905092915050565b600061261c826126d9565b9150612627836126d9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561265c5761265b612755565b5b828201905092915050565b6000612672826126d9565b915061267d836126d9565b9250828210156126905761268f612755565b5b828203905092915050565b60006126a6826126b9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561270e5780820151818401526020810190506126f3565b8381111561271d576000848401525b50505050565b6000600282049050600182168061273b57607f821691505b6020821081141561274f5761274e612784565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6127cd8161269b565b81146127d857600080fd5b50565b6127e4816126d9565b81146127ef57600080fd5b5056fea2646970667358221220fb510624a03cc17d636b75a118fc547cfbd1343d7de5341c582a8155671f1be164736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80635b7121f8116100b8578063983b2d561161007c578063983b2d561461037a578063a457c2d7146103aa578063a9059cbb146103da578063aa271e1a1461040a578063dd62ed3e1461043a578063f2fde38b1461046a57610137565b80635b7121f8146102d457806370a0823114610304578063715018a6146103345780638da5cb5b1461033e57806395d89b411461035c57610137565b806323b872dd116100ff57806323b872dd146101f6578063313ce56714610226578063395093511461024457806340c10f191461027457806342966c68146102a457610137565b80630323aac71461013c57806306fdde031461015a578063095ea7b31461017857806318160ddd146101a857806323338b88146101c6575b600080fd5b610144610486565b60405161015191906125bf565b60405180910390f35b610162610497565b60405161016f919061237d565b60405180910390f35b610192600480360381019061018d9190611c65565b610529565b60405161019f9190612362565b60405180910390f35b6101b0610547565b6040516101bd91906125bf565b60405180910390f35b6101e060048036038101906101db9190611bb1565b610551565b6040516101ed9190612362565b60405180910390f35b610210600480360381019061020b9190611c16565b61065a565b60405161021d9190612362565b60405180910390f35b61022e61075b565b60405161023b91906125da565b60405180910390f35b61025e60048036038101906102599190611c65565b610764565b60405161026b9190612362565b60405180910390f35b61028e60048036038101906102899190611c65565b610810565b60405161029b9190612362565b60405180910390f35b6102be60048036038101906102b99190611ca1565b61086e565b6040516102cb9190612362565b60405180910390f35b6102ee60048036038101906102e99190611ca1565b6108ff565b6040516102fb9190612347565b60405180910390f35b61031e60048036038101906103199190611bb1565b6109e1565b60405161032b91906125bf565b60405180910390f35b61033c610a29565b005b610346610b66565b6040516103539190612347565b60405180910390f35b610364610b90565b604051610371919061237d565b60405180910390f35b610394600480360381019061038f9190611bb1565b610c22565b6040516103a19190612362565b60405180910390f35b6103c460048036038101906103bf9190611c65565b610d2b565b6040516103d19190612362565b60405180910390f35b6103f460048036038101906103ef9190611c65565b610e1f565b6040516104019190612362565b60405180910390f35b610424600480360381019061041f9190611bb1565b610e3d565b6040516104319190612362565b60405180910390f35b610454600480360381019061044f9190611bda565b610e5a565b60405161046191906125bf565b60405180910390f35b610484600480360381019061047f9190611bb1565b610ee1565b005b6000610492600661108d565b905090565b6060600380546104a690612723565b80601f01602080910402602001604051908101604052809291908181526020018280546104d290612723565b801561051f5780601f106104f45761010080835404028352916020019161051f565b820191906000526020600020905b81548152906001019060200180831161050257829003601f168201915b5050505050905090565b600061053d6105366110a2565b84846110aa565b6001905092915050565b6000600254905090565b600061055b6110a2565b73ffffffffffffffffffffffffffffffffffffffff16610579610b66565b73ffffffffffffffffffffffffffffffffffffffff16146105cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c6906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561063f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106369061253f565b60405180910390fd5b61065382600661127590919063ffffffff16565b9050919050565b60006106678484846112a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106b26110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610729906124bf565b60405180910390fd5b61074f8561073e6110a2565b858461074a9190612667565b6110aa565b60019150509392505050565b60006012905090565b60006108066107716110a2565b84846001600061077f6110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108019190612611565b6110aa565b6001905092915050565b600061081b33610e3d565b61085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108519061249f565b60405180910390fd5b6108648383611524565b6001905092915050565b60006108786110a2565b73ffffffffffffffffffffffffffffffffffffffff16610896610b66565b73ffffffffffffffffffffffffffffffffffffffff16146108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906124df565b60405180910390fd5b6108f63383611678565b60019050919050565b60006109096110a2565b73ffffffffffffffffffffffffffffffffffffffff16610927610b66565b73ffffffffffffffffffffffffffffffffffffffff161461097d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610974906124df565b60405180910390fd5b610985610486565b82106109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd906123df565b60405180910390fd5b6109da82600661184c90919063ffffffff16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a316110a2565b73ffffffffffffffffffffffffffffffffffffffff16610a4f610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b9f90612723565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcb90612723565b8015610c185780601f10610bed57610100808354040283529160200191610c18565b820191906000526020600020905b815481529060010190602001808311610bfb57829003601f168201915b5050505050905090565b6000610c2c6110a2565b73ffffffffffffffffffffffffffffffffffffffff16610c4a610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c97906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d07906123ff565b60405180910390fd5b610d2482600661186690919063ffffffff16565b9050919050565b60008060016000610d3a6110a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061257f565b60405180910390fd5b610e14610e026110a2565b858584610e0f9190612667565b6110aa565b600191505092915050565b6000610e33610e2c6110a2565b84846112a5565b6001905092915050565b6000610e5382600661189690919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ee96110a2565b73ffffffffffffffffffffffffffffffffffffffff16610f07610b66565b73ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906124df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc49061243f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061109b826000016118c6565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111119061255f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111819061245f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126891906125bf565b60405180910390a3505050565b600061129d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6118d7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c9061251f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906123bf565b60405180910390fd5b611390838383611a55565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d9061247f565b60405180910390fd5b81816114229190612667565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b29190612611565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161151691906125bf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b9061259f565b60405180910390fd5b6115a060008383611a55565b80600260008282546115b29190612611565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116079190612611565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161166c91906125bf565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906124ff565b60405180910390fd5b6116f482600083611a55565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561177a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117719061241f565b60405180910390fd5b81816117869190612667565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546117da9190612667565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161183f91906125bf565b60405180910390a3505050565b600061185b8360000183611a5a565b60001c905092915050565b600061188e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611af4565b905092915050565b60006118be836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b64565b905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114611a495760006001826119099190612667565b90506000600186600001805490506119219190612667565b90506000866000018281548110611961577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106119ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611a0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611a4f565b60009150505b92915050565b505050565b600081836000018054905011611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9061239f565b60405180910390fd5b826000018281548110611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6000611b008383611b64565b611b59578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b5e565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081359050611b96816127c4565b92915050565b600081359050611bab816127db565b92915050565b600060208284031215611bc357600080fd5b6000611bd184828501611b87565b91505092915050565b60008060408385031215611bed57600080fd5b6000611bfb85828601611b87565b9250506020611c0c85828601611b87565b9150509250929050565b600080600060608486031215611c2b57600080fd5b6000611c3986828701611b87565b9350506020611c4a86828701611b87565b9250506040611c5b86828701611b9c565b9150509250925092565b60008060408385031215611c7857600080fd5b6000611c8685828601611b87565b9250506020611c9785828601611b9c565b9150509250929050565b600060208284031215611cb357600080fd5b6000611cc184828501611b9c565b91505092915050565b611cd38161269b565b82525050565b611ce2816126ad565b82525050565b6000611cf3826125f5565b611cfd8185612600565b9350611d0d8185602086016126f0565b611d16816127b3565b840191505092915050565b6000611d2e602283612600565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d94602383612600565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dfa601983612600565b91507f4e4552413a20696e646578206f7574206f6620626f756e6473000000000000006000830152602082019050919050565b6000611e3a601f83612600565b91507f4e4552413a206d696e657220697320746865207a65726f2061646472657373006000830152602082019050919050565b6000611e7a602283612600565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ee0602683612600565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f46602283612600565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fac602683612600565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612012601e83612600565b91507f4e4552413a2063616c6c6572206973206e6f7420746865206d696e74657200006000830152602082019050919050565b6000612052602883612600565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120b8602083612600565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006120f8602183612600565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061215e602583612600565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121c4602483612600565b91507f4e4552413a205f64656c4d696e74657220697320746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061222a602483612600565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612290602583612600565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122f6601f83612600565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b612332816126d9565b82525050565b612341816126e3565b82525050565b600060208201905061235c6000830184611cca565b92915050565b60006020820190506123776000830184611cd9565b92915050565b600060208201905081810360008301526123978184611ce8565b905092915050565b600060208201905081810360008301526123b881611d21565b9050919050565b600060208201905081810360008301526123d881611d87565b9050919050565b600060208201905081810360008301526123f881611ded565b9050919050565b6000602082019050818103600083015261241881611e2d565b9050919050565b6000602082019050818103600083015261243881611e6d565b9050919050565b6000602082019050818103600083015261245881611ed3565b9050919050565b6000602082019050818103600083015261247881611f39565b9050919050565b6000602082019050818103600083015261249881611f9f565b9050919050565b600060208201905081810360008301526124b881612005565b9050919050565b600060208201905081810360008301526124d881612045565b9050919050565b600060208201905081810360008301526124f8816120ab565b9050919050565b60006020820190508181036000830152612518816120eb565b9050919050565b6000602082019050818103600083015261253881612151565b9050919050565b60006020820190508181036000830152612558816121b7565b9050919050565b600060208201905081810360008301526125788161221d565b9050919050565b6000602082019050818103600083015261259881612283565b9050919050565b600060208201905081810360008301526125b8816122e9565b9050919050565b60006020820190506125d46000830184612329565b92915050565b60006020820190506125ef6000830184612338565b92915050565b600081519050919050565b600082825260208201905092915050565b600061261c826126d9565b9150612627836126d9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561265c5761265b612755565b5b828201905092915050565b6000612672826126d9565b915061267d836126d9565b9250828210156126905761268f612755565b5b828203905092915050565b60006126a6826126b9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561270e5780820151818401526020810190506126f3565b8381111561271d576000848401525b50505050565b6000600282049050600182168061273b57607f821691505b6020821081141561274f5761274e612784565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6127cd8161269b565b81146127d857600080fd5b50565b6127e4816126d9565b81146127ef57600080fd5b5056fea2646970667358221220fb510624a03cc17d636b75a118fc547cfbd1343d7de5341c582a8155671f1be164736f6c63430008000033

Deployed Bytecode Sourcemap

27714:1958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29015:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6567:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8734:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7687:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28766:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9385:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7529:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10216:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28154:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28366:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29312:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7858:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17083:148;;;:::i;:::-;;16432:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6786:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28538:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10934:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8198:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29158:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8436:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17386:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29015:135;29093:7;29125:17;:8;:15;:17::i;:::-;29118:24;;29015:135;:::o;6567:100::-;6621:13;6654:5;6647:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6567:100;:::o;8734:169::-;8817:4;8834:39;8843:12;:10;:12::i;:::-;8857:7;8866:6;8834:8;:39::i;:::-;8891:4;8884:11;;8734:169;;;;:::o;7687:108::-;7748:7;7775:12;;7768:19;;7687:108;:::o;28766:241::-;28859:4;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28911:1:::1;28889:24;;:10;:24;;;;28881:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28972:27;28988:10;28972:8;:15;;:27;;;;:::i;:::-;28965:34;;28766:241:::0;;;:::o;9385:422::-;9491:4;9508:36;9518:6;9526:9;9537:6;9508:9;:36::i;:::-;9557:24;9584:11;:19;9596:6;9584:19;;;;;;;;;;;;;;;:33;9604:12;:10;:12::i;:::-;9584:33;;;;;;;;;;;;;;;;9557:60;;9656:6;9636:16;:26;;9628:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9718:57;9727:6;9735:12;:10;:12::i;:::-;9768:6;9749:16;:25;;;;:::i;:::-;9718:8;:57::i;:::-;9795:4;9788:11;;;9385:422;;;;;:::o;7529:93::-;7587:5;7612:2;7605:9;;7529:93;:::o;10216:215::-;10304:4;10321:80;10330:12;:10;:12::i;:::-;10344:7;10390:10;10353:11;:25;10365:12;:10;:12::i;:::-;10353:25;;;;;;;;;;;;;;;:34;10379:7;10353:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10321:8;:80::i;:::-;10419:4;10412:11;;10216:215;;;;:::o;28154:204::-;28288:4;29594:20;29603:10;29594:8;:20::i;:::-;29586:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28311:17:::1;28317:2;28321:6;28311:5;:17::i;:::-;28346:4;28339:11;;28154:204:::0;;;;:::o;28366:164::-;28451:4;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28475:25:::1;28481:10;28493:6;28475:5;:25::i;:::-;28518:4;28511:11;;28366:164:::0;;;:::o;29312:227::-;29411:7;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29450:17:::1;:15;:17::i;:::-;29444:3;:23;29436:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29515:16;29527:3;29515:8;:11;;:16;;;;:::i;:::-;29508:23;;29312:227:::0;;;:::o;7858:127::-;7932:7;7959:9;:18;7969:7;7959:18;;;;;;;;;;;;;;;;7952:25;;7858:127;;;:::o;17083:148::-;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17190:1:::1;17153:40;;17174:6;;;;;;;;;;;17153:40;;;;;;;;;;;;17221:1;17204:6;;:19;;;;;;;;;;;;;;;;;;17083:148::o:0;16432:87::-;16478:7;16505:6;;;;;;;;;;;16498:13;;16432:87;:::o;6786:104::-;6842:13;6875:7;6868:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6786:104;:::o;28538:220::-;28628:4;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28675:1:::1;28658:19;;:5;:19;;;;28650:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28731:19;28744:5;28731:8;:12;;:19;;;;:::i;:::-;28724:26;;28538:220:::0;;;:::o;10934:377::-;11027:4;11044:24;11071:11;:25;11083:12;:10;:12::i;:::-;11071:25;;;;;;;;;;;;;;;:34;11097:7;11071:34;;;;;;;;;;;;;;;;11044:61;;11144:15;11124:16;:35;;11116:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11212:67;11221:12;:10;:12::i;:::-;11235:7;11263:15;11244:16;:34;;;;:::i;:::-;11212:8;:67::i;:::-;11299:4;11292:11;;;10934:377;;;;:::o;8198:175::-;8284:4;8301:42;8311:12;:10;:12::i;:::-;8325:9;8336:6;8301:9;:42::i;:::-;8361:4;8354:11;;8198:175;;;;:::o;29158:146::-;29241:4;29270:26;29288:7;29270:8;:17;;:26;;;;:::i;:::-;29263:33;;29158:146;;;:::o;8436:151::-;8525:7;8552:11;:18;8564:5;8552:18;;;;;;;;;;;;;;;:27;8571:7;8552:27;;;;;;;;;;;;;;;;8545:34;;8436:151;;;;:::o;17386:244::-;16663:12;:10;:12::i;:::-;16652:23;;:7;:5;:7::i;:::-;:23;;;16644:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17495:1:::1;17475:22;;:8;:22;;;;17467:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17585:8;17556:38;;17577:6;;;;;;;;;;;17556:38;;;;;;;;;;;;17614:8;17605:6;;:17;;;;;;;;;;;;;;;;;;17386:244:::0;:::o;25129:117::-;25192:7;25219:19;25227:3;:10;;25219:7;:19::i;:::-;25212:26;;25129:117;;;:::o;4154:98::-;4207:7;4234:10;4227:17;;4154:98;:::o;14290:346::-;14409:1;14392:19;;:5;:19;;;;14384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14490:1;14471:21;;:7;:21;;;;14463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14574:6;14544:11;:18;14556:5;14544:18;;;;;;;;;;;;;;;:27;14563:7;14544:27;;;;;;;;;;;;;;;:36;;;;14612:7;14596:32;;14605:5;14596:32;;;14621:6;14596:32;;;;;;:::i;:::-;;;;;;;;14290:346;;;:::o;24632:158::-;24705:4;24729:53;24737:3;:10;;24773:5;24757:23;;24749:32;;24729:7;:53::i;:::-;24722:60;;24632:158;;;;:::o;11801:604::-;11925:1;11907:20;;:6;:20;;;;11899:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12009:1;11988:23;;:9;:23;;;;11980:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12064:47;12085:6;12093:9;12104:6;12064:20;:47::i;:::-;12124:21;12148:9;:17;12158:6;12148:17;;;;;;;;;;;;;;;;12124:41;;12201:6;12184:13;:23;;12176:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12297:6;12281:13;:22;;;;:::i;:::-;12261:9;:17;12271:6;12261:17;;;;;;;;;;;;;;;:42;;;;12338:6;12314:9;:20;12324:9;12314:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12379:9;12362:35;;12371:6;12362:35;;;12390:6;12362:35;;;;;;:::i;:::-;;;;;;;;11801:604;;;;:::o;12687:338::-;12790:1;12771:21;;:7;:21;;;;12763:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12841:49;12870:1;12874:7;12883:6;12841:20;:49::i;:::-;12919:6;12903:12;;:22;;;;;;;:::i;:::-;;;;;;;;12958:6;12936:9;:18;12946:7;12936:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13001:7;12980:37;;12997:1;12980:37;;;13010:6;12980:37;;;;;;:::i;:::-;;;;;;;;12687:338;;:::o;13358:494::-;13461:1;13442:21;;:7;:21;;;;13434:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13514:49;13535:7;13552:1;13556:6;13514:20;:49::i;:::-;13576:22;13601:9;:18;13611:7;13601:18;;;;;;;;;;;;;;;;13576:43;;13656:6;13638:14;:24;;13630:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13750:6;13733:14;:23;;;;:::i;:::-;13712:9;:18;13722:7;13712:18;;;;;;;;;;;;;;;:44;;;;13783:6;13767:12;;:22;;;;;;;:::i;:::-;;;;;;;;13833:1;13807:37;;13816:7;13807:37;;;13837:6;13807:37;;;;;;:::i;:::-;;;;;;;;13358:494;;;:::o;25590:158::-;25664:7;25715:22;25719:3;:10;;25731:5;25715:3;:22::i;:::-;25707:31;;25684:56;;25590:158;;;;:::o;24304:152::-;24374:4;24398:50;24403:3;:10;;24439:5;24423:23;;24415:32;;24398:4;:50::i;:::-;24391:57;;24304:152;;;;:::o;24876:167::-;24956:4;24980:55;24990:3;:10;;25026:5;25010:23;;25002:32;;24980:9;:55::i;:::-;24973:62;;24876:167;;;;:::o;21803:109::-;21859:7;21886:3;:11;;:18;;;;21879:25;;21803:109;;;:::o;19949:1553::-;20015:4;20133:18;20154:3;:12;;:19;20167:5;20154:19;;;;;;;;;;;;20133:40;;20204:1;20190:10;:15;20186:1309;;20552:21;20589:1;20576:10;:14;;;;:::i;:::-;20552:38;;20605:17;20646:1;20625:3;:11;;:18;;;;:22;;;;:::i;:::-;20605:42;;20892:17;20912:3;:11;;20924:9;20912:22;;;;;;;;;;;;;;;;;;;;;;;;20892:42;;21058:9;21029:3;:11;;21041:13;21029:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;21161:10;21135:3;:12;;:23;21148:9;21135:23;;;;;;;;;;;:36;;;;21296:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21391:3;:12;;:19;21404:5;21391:19;;;;;;;;;;;21384:26;;;21434:4;21427:11;;;;;;;;20186:1309;21478:5;21471:12;;;19949:1553;;;;;:::o;15239:92::-;;;;:::o;22256:204::-;22323:7;22372:5;22351:3;:11;;:18;;;;:26;22343:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22434:3;:11;;22446:5;22434:18;;;;;;;;;;;;;;;;;;;;;;;;22427:25;;22256:204;;;;:::o;19359:414::-;19422:4;19444:21;19454:3;19459:5;19444:9;:21::i;:::-;19439:327;;19482:3;:11;;19499:5;19482:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19665:3;:11;;:18;;;;19643:3;:12;;:19;19656:5;19643:19;;;;;;;;;;;:40;;;;19705:4;19698:11;;;;19439:327;19749:5;19742:12;;19359:414;;;;;:::o;21588:129::-;21661:4;21708:1;21685:3;:12;;:19;21698:5;21685:19;;;;;;;;;;;;:24;;21678:31;;21588:129;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:366::-;;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3086:34;3082:1;3077:3;3073:11;3066:55;3152:4;3147:2;3142:3;3138:12;3131:26;3183:2;3178:3;3174:12;3167:19;;2972:220;;;:::o;3198:367::-;;3361:67;3425:2;3420:3;3361:67;:::i;:::-;3354:74;;3458:34;3454:1;3449:3;3445:11;3438:55;3524:5;3519:2;3514:3;3510:12;3503:27;3556:2;3551:3;3547:12;3540:19;;3344:221;;;:::o;3571:323::-;;3734:67;3798:2;3793:3;3734:67;:::i;:::-;3727:74;;3831:27;3827:1;3822:3;3818:11;3811:48;3885:2;3880:3;3876:12;3869:19;;3717:177;;;:::o;3900:329::-;;4063:67;4127:2;4122:3;4063:67;:::i;:::-;4056:74;;4160:33;4156:1;4151:3;4147:11;4140:54;4220:2;4215:3;4211:12;4204:19;;4046:183;;;:::o;4235:366::-;;4398:67;4462:2;4457:3;4398:67;:::i;:::-;4391:74;;4495:34;4491:1;4486:3;4482:11;4475:55;4561:4;4556:2;4551:3;4547:12;4540:26;4592:2;4587:3;4583:12;4576:19;;4381:220;;;:::o;4607:370::-;;4770:67;4834:2;4829:3;4770:67;:::i;:::-;4763:74;;4867:34;4863:1;4858:3;4854:11;4847:55;4933:8;4928:2;4923:3;4919:12;4912:30;4968:2;4963:3;4959:12;4952:19;;4753:224;;;:::o;4983:366::-;;5146:67;5210:2;5205:3;5146:67;:::i;:::-;5139:74;;5243:34;5239:1;5234:3;5230:11;5223:55;5309:4;5304:2;5299:3;5295:12;5288:26;5340:2;5335:3;5331:12;5324:19;;5129:220;;;:::o;5355:370::-;;5518:67;5582:2;5577:3;5518:67;:::i;:::-;5511:74;;5615:34;5611:1;5606:3;5602:11;5595:55;5681:8;5676:2;5671:3;5667:12;5660:30;5716:2;5711:3;5707:12;5700:19;;5501:224;;;:::o;5731:328::-;;5894:67;5958:2;5953:3;5894:67;:::i;:::-;5887:74;;5991:32;5987:1;5982:3;5978:11;5971:53;6050:2;6045:3;6041:12;6034:19;;5877:182;;;:::o;6065:372::-;;6228:67;6292:2;6287:3;6228:67;:::i;:::-;6221:74;;6325:34;6321:1;6316:3;6312:11;6305:55;6391:10;6386:2;6381:3;6377:12;6370:32;6428:2;6423:3;6419:12;6412:19;;6211:226;;;:::o;6443:330::-;;6606:67;6670:2;6665:3;6606:67;:::i;:::-;6599:74;;6703:34;6699:1;6694:3;6690:11;6683:55;6764:2;6759:3;6755:12;6748:19;;6589:184;;;:::o;6779:365::-;;6942:67;7006:2;7001:3;6942:67;:::i;:::-;6935:74;;7039:34;7035:1;7030:3;7026:11;7019:55;7105:3;7100:2;7095:3;7091:12;7084:25;7135:2;7130:3;7126:12;7119:19;;6925:219;;;:::o;7150:369::-;;7313:67;7377:2;7372:3;7313:67;:::i;:::-;7306:74;;7410:34;7406:1;7401:3;7397:11;7390:55;7476:7;7471:2;7466:3;7462:12;7455:29;7510:2;7505:3;7501:12;7494:19;;7296:223;;;:::o;7525:368::-;;7688:67;7752:2;7747:3;7688:67;:::i;:::-;7681:74;;7785:34;7781:1;7776:3;7772:11;7765:55;7851:6;7846:2;7841:3;7837:12;7830:28;7884:2;7879:3;7875:12;7868:19;;7671:222;;;:::o;7899:368::-;;8062:67;8126:2;8121:3;8062:67;:::i;:::-;8055:74;;8159:34;8155:1;8150:3;8146:11;8139:55;8225:6;8220:2;8215:3;8211:12;8204:28;8258:2;8253:3;8249:12;8242:19;;8045:222;;;:::o;8273:369::-;;8436:67;8500:2;8495:3;8436:67;:::i;:::-;8429:74;;8533:34;8529:1;8524:3;8520:11;8513:55;8599:7;8594:2;8589:3;8585:12;8578:29;8633:2;8628:3;8624:12;8617:19;;8419:223;;;:::o;8648:329::-;;8811:67;8875:2;8870:3;8811:67;:::i;:::-;8804:74;;8908:33;8904:1;8899:3;8895:11;8888:54;8968:2;8963:3;8959:12;8952:19;;8794:183;;;:::o;8983:118::-;9070:24;9088:5;9070:24;:::i;:::-;9065:3;9058:37;9048:53;;:::o;9107:112::-;9190:22;9206:5;9190:22;:::i;:::-;9185:3;9178:35;9168:51;;:::o;9225:222::-;;9356:2;9345:9;9341:18;9333:26;;9369:71;9437:1;9426:9;9422:17;9413:6;9369:71;:::i;:::-;9323:124;;;;:::o;9453:210::-;;9578:2;9567:9;9563:18;9555:26;;9591:65;9653:1;9642:9;9638:17;9629:6;9591:65;:::i;:::-;9545:118;;;;:::o;9669:313::-;;9820:2;9809:9;9805:18;9797:26;;9869:9;9863:4;9859:20;9855:1;9844:9;9840:17;9833:47;9897:78;9970:4;9961:6;9897:78;:::i;:::-;9889:86;;9787:195;;;;:::o;9988:419::-;;10192:2;10181:9;10177:18;10169:26;;10241:9;10235:4;10231:20;10227:1;10216:9;10212:17;10205:47;10269:131;10395:4;10269:131;:::i;:::-;10261:139;;10159:248;;;:::o;10413:419::-;;10617:2;10606:9;10602:18;10594:26;;10666:9;10660:4;10656:20;10652:1;10641:9;10637:17;10630:47;10694:131;10820:4;10694:131;:::i;:::-;10686:139;;10584:248;;;:::o;10838:419::-;;11042:2;11031:9;11027:18;11019:26;;11091:9;11085:4;11081:20;11077:1;11066:9;11062:17;11055:47;11119:131;11245:4;11119:131;:::i;:::-;11111:139;;11009:248;;;:::o;11263:419::-;;11467:2;11456:9;11452:18;11444:26;;11516:9;11510:4;11506:20;11502:1;11491:9;11487:17;11480:47;11544:131;11670:4;11544:131;:::i;:::-;11536:139;;11434:248;;;:::o;11688:419::-;;11892:2;11881:9;11877:18;11869:26;;11941:9;11935:4;11931:20;11927:1;11916:9;11912:17;11905:47;11969:131;12095:4;11969:131;:::i;:::-;11961:139;;11859:248;;;:::o;12113:419::-;;12317:2;12306:9;12302:18;12294:26;;12366:9;12360:4;12356:20;12352:1;12341:9;12337:17;12330:47;12394:131;12520:4;12394:131;:::i;:::-;12386:139;;12284:248;;;:::o;12538:419::-;;12742:2;12731:9;12727:18;12719:26;;12791:9;12785:4;12781:20;12777:1;12766:9;12762:17;12755:47;12819:131;12945:4;12819:131;:::i;:::-;12811:139;;12709:248;;;:::o;12963:419::-;;13167:2;13156:9;13152:18;13144:26;;13216:9;13210:4;13206:20;13202:1;13191:9;13187:17;13180:47;13244:131;13370:4;13244:131;:::i;:::-;13236:139;;13134:248;;;:::o;13388:419::-;;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13559:248;;;:::o;13813:419::-;;14017:2;14006:9;14002:18;13994:26;;14066:9;14060:4;14056:20;14052:1;14041:9;14037:17;14030:47;14094:131;14220:4;14094:131;:::i;:::-;14086:139;;13984:248;;;:::o;14238:419::-;;14442:2;14431:9;14427:18;14419:26;;14491:9;14485:4;14481:20;14477:1;14466:9;14462:17;14455:47;14519:131;14645:4;14519:131;:::i;:::-;14511:139;;14409:248;;;:::o;14663:419::-;;14867:2;14856:9;14852:18;14844:26;;14916:9;14910:4;14906:20;14902:1;14891:9;14887:17;14880:47;14944:131;15070:4;14944:131;:::i;:::-;14936:139;;14834:248;;;:::o;15088:419::-;;15292:2;15281:9;15277:18;15269:26;;15341:9;15335:4;15331:20;15327:1;15316:9;15312:17;15305:47;15369:131;15495:4;15369:131;:::i;:::-;15361:139;;15259:248;;;:::o;15513:419::-;;15717:2;15706:9;15702:18;15694:26;;15766:9;15760:4;15756:20;15752:1;15741:9;15737:17;15730:47;15794:131;15920:4;15794:131;:::i;:::-;15786:139;;15684:248;;;:::o;15938:419::-;;16142:2;16131:9;16127:18;16119:26;;16191:9;16185:4;16181:20;16177:1;16166:9;16162:17;16155:47;16219:131;16345:4;16219:131;:::i;:::-;16211:139;;16109:248;;;:::o;16363:419::-;;16567:2;16556:9;16552:18;16544:26;;16616:9;16610:4;16606:20;16602:1;16591:9;16587:17;16580:47;16644:131;16770:4;16644:131;:::i;:::-;16636:139;;16534:248;;;:::o;16788:419::-;;16992:2;16981:9;16977:18;16969:26;;17041:9;17035:4;17031:20;17027:1;17016:9;17012:17;17005:47;17069:131;17195:4;17069:131;:::i;:::-;17061:139;;16959:248;;;:::o;17213:222::-;;17344:2;17333:9;17329:18;17321:26;;17357:71;17425:1;17414:9;17410:17;17401:6;17357:71;:::i;:::-;17311:124;;;;:::o;17441:214::-;;17568:2;17557:9;17553:18;17545:26;;17581:67;17645:1;17634:9;17630:17;17621:6;17581:67;:::i;:::-;17535:120;;;;:::o;17661:99::-;;17747:5;17741:12;17731:22;;17720:40;;;:::o;17766:169::-;;17884:6;17879:3;17872:19;17924:4;17919:3;17915:14;17900:29;;17862:73;;;;:::o;17941:305::-;;18000:20;18018:1;18000:20;:::i;:::-;17995:25;;18034:20;18052:1;18034:20;:::i;:::-;18029:25;;18188:1;18120:66;18116:74;18113:1;18110:81;18107:2;;;18194:18;;:::i;:::-;18107:2;18238:1;18235;18231:9;18224:16;;17985:261;;;;:::o;18252:191::-;;18312:20;18330:1;18312:20;:::i;:::-;18307:25;;18346:20;18364:1;18346:20;:::i;:::-;18341:25;;18385:1;18382;18379:8;18376:2;;;18390:18;;:::i;:::-;18376:2;18435:1;18432;18428:9;18420:17;;18297:146;;;;:::o;18449:96::-;;18515:24;18533:5;18515:24;:::i;:::-;18504:35;;18494:51;;;:::o;18551:90::-;;18628:5;18621:13;18614:21;18603:32;;18593:48;;;:::o;18647:126::-;;18724:42;18717:5;18713:54;18702:65;;18692:81;;;:::o;18779:77::-;;18845:5;18834:16;;18824:32;;;:::o;18862:86::-;;18937:4;18930:5;18926:16;18915:27;;18905:43;;;:::o;18954:307::-;19022:1;19032:113;19046:6;19043:1;19040:13;19032:113;;;19131:1;19126:3;19122:11;19116:18;19112:1;19107:3;19103:11;19096:39;19068:2;19065:1;19061:10;19056:15;;19032:113;;;19163:6;19160:1;19157:13;19154:2;;;19243:1;19234:6;19229:3;19225:16;19218:27;19154:2;19003:258;;;;:::o;19267:320::-;;19348:1;19342:4;19338:12;19328:22;;19395:1;19389:4;19385:12;19416:18;19406:2;;19472:4;19464:6;19460:17;19450:27;;19406:2;19534;19526:6;19523:14;19503:18;19500:38;19497:2;;;19553:18;;:::i;:::-;19497:2;19318:269;;;;:::o;19593:180::-;19641:77;19638:1;19631:88;19738:4;19735:1;19728:15;19762:4;19759:1;19752:15;19779:180;19827:77;19824:1;19817:88;19924:4;19921:1;19914:15;19948:4;19945:1;19938:15;19965:102;;20057:2;20053:7;20048:2;20041:5;20037:14;20033:28;20023:38;;20013:54;;;:::o;20073:122::-;20146:24;20164:5;20146:24;:::i;:::-;20139:5;20136:35;20126:2;;20185:1;20182;20175:12;20126:2;20116:79;:::o;20201:122::-;20274:24;20292:5;20274:24;:::i;:::-;20267:5;20264:35;20254:2;;20313:1;20310;20303:12;20254:2;20244:79;:::o

Swarm Source

ipfs://fb510624a03cc17d636b75a118fc547cfbd1343d7de5341c582a8155671f1be1
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.