ETH Price: $3,470.35 (+0.05%)
Gas: 12 Gwei

Token

Project Dark Eye Token (DEYE)
 

Overview

Max Total Supply

232,088,845.588790238688269869 DEYE

Holders

162

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
470,680 DEYE

Value
$0.00
0xdc48249b84101f2808640a764363977352f64d67
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DEYE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-04
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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


// OpenZeppelin Contracts v4.4.1 (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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: contracts/DEYE.sol


// Author: Mas C. (Project Dark Eye)
pragma solidity ^0.8.0;




contract DEYE is ERC20Burnable, Ownable {
    // Max Supply: 10,000,000,000, with 18 decimals.
    uint256 public constant MAX_SUPPLY = 1e28;

    uint256 public totalMinted;

    bytes32 public allowanceMerkleRoot;

    bool public claimEnabled = false;

    // Claimed tokens per address.
    mapping(address => uint256) public claimed;

    // Addresses that are allowed to call owner only functions.
    mapping(address => bool) public managers;

    constructor(bytes32 merkleRoot) ERC20("Project Dark Eye Token", "DEYE") {
        allowanceMerkleRoot = merkleRoot;
        totalMinted = 0;
    }

    function claim(uint256 amount, uint256 allowance, bytes32[] calldata proof) public {
        require(claimEnabled, "Claim not enabled");
        require(verifyAllowance(msg.sender, allowance, proof), "Failed allowance verification");
        require(claimed[msg.sender] + amount <= allowance, "Request higher than allowance");
        require(totalMinted + amount <= MAX_SUPPLY, "Request higher than max supply");

        claimed[msg.sender] = claimed[msg.sender] + amount;
        totalMinted = totalMinted + amount;
        _mint(msg.sender, amount * 10**uint(decimals()));
    }

    function getQuantityClaimed(address claimee) public view returns (uint256) {
        return claimed[claimee];
    }

    function verifyAllowance(address account, uint256 allowance, bytes32[] calldata proof) public view returns (bool) {
        return MerkleProof.verify(proof, allowanceMerkleRoot, generateAllowanceMerkleLeaf(account, allowance));
    }

    function generateAllowanceMerkleLeaf(address account, uint256 allowance) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(account, allowance));
    }

    // Owner Only Functions.

    function setAllowanceMerkleRoot(bytes32 merkleRoot) public onlyOwner {
        require(merkleRoot != allowanceMerkleRoot,"merkleRoot is the same as previous value");
        allowanceMerkleRoot = merkleRoot;
    }

    function teamMint(address account, uint256 amount) public onlyOwner {
        require(totalMinted + amount <= MAX_SUPPLY, "Request higher than max supply");
        totalMinted = totalMinted + amount;
        _mint(account, amount * 10**uint(decimals()));
    }

    function setManagers(address[] memory addresses, bool[] memory allowedValues) public onlyOwner {
        require(addresses.length == allowedValues.length, "addresses does not match allowedValues length");
        for (uint256 i = 0; i < addresses.length; i++) {
            managers[addresses[i]] = allowedValues[i];
        }
    }

    function isManager(address addr) public view returns (bool) {
        return managers[addr];
    }

    function setAllowanceMerkleRootByManager(bytes32 merkleRoot) public {
        require(managers[msg.sender], "Caller not allowed");
        require(merkleRoot != allowanceMerkleRoot,"merkleRoot is the same as previous value");
        allowanceMerkleRoot = merkleRoot;
    }

    function teamMintByManager(address account, uint256 amount) public {
        require(managers[msg.sender], "Caller not allowed");
        require(totalMinted + amount <= MAX_SUPPLY, "Request higher than max supply");
        totalMinted = totalMinted + amount;
        _mint(account, amount * 10**uint(decimals()));
    }

    function setClaimEnabled(bool enabled) public onlyOwner {
        claimEnabled = enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowanceMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"}],"name":"generateAllowanceMerkleLeaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"claimee","type":"address"}],"name":"getQuantityClaimed","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":"addr","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"managers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setAllowanceMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setAllowanceMerkleRootByManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setClaimEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool[]","name":"allowedValues","type":"bool[]"}],"name":"setManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"teamMintByManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"verifyAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526008805460ff191690553480156200001b57600080fd5b5060405162001c0538038062001c058339810160408190526200003e91620001dc565b604080518082018252601681527f50726f6a656374204461726b2045796520546f6b656e000000000000000000006020808301918252835180850190945260048452634445594560e01b9084015281519192916200009f9160039162000136565b508051620000b590600490602084019062000136565b505050620000d2620000cc620000e060201b60201c565b620000e4565b600755600060065562000233565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014490620001f6565b90600052602060002090601f016020900481019282620001685760008555620001b3565b82601f106200018357805160ff1916838001178555620001b3565b82800160010185558215620001b3579182015b82811115620001b357825182559160200191906001019062000196565b50620001c1929150620001c5565b5090565b5b80821115620001c15760008155600101620001c6565b600060208284031215620001ef57600080fd5b5051919050565b600181811c908216806200020b57607f821691505b602082108114156200022d57634e487b7160e01b600052602260045260246000fd5b50919050565b6119c280620002436000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a8f12791161011a578063ae0b51df116100ad578063dc9055b21161007c578063dc9055b21461043d578063dd62ed3e14610450578063f2fde38b14610463578063f3ae241514610476578063fdff9b4d146104a257600080fd5b8063ae0b51df146103e4578063b0f37f41146103f7578063c884ef831461040a578063da73ff151461042a57600080fd5b8063a2309ff8116100e9578063a2309ff8146103a2578063a457c2d7146103ab578063a9059cbb146103be578063add5a4fa146103d157600080fd5b80638a8f1279146103595780638da5cb5b1461036c57806392929a091461038757806395d89b411461039a57600080fd5b806336bc89ad1161019257806370a082311161016157806370a0823114610302578063715018a61461032b57806379cc679014610333578063881d603e1461034657600080fd5b806336bc89ad1461029e57806339509351146102c75780633bdcc923146102da57806342966c68146102ef57600080fd5b806323b872dd116101ce57806323b872dd1461025c5780632866ed211461026f578063313ce5671461027c57806332cb6b0c1461028b57600080fd5b806306fdde0314610200578063095ea7b31461021e57806318160ddd1461024157806320f0372514610253575b600080fd5b6102086104c5565b60405161021591906116dc565b60405180910390f35b61023161022c366004611522565b610557565b6040519015158152602001610215565b6002545b604051908152602001610215565b61024560075481565b61023161026a3660046114e6565b610571565b6008546102319060ff1681565b60405160128152602001610215565b6102456b204fce5e3e2502611000000081565b6102456102ac366004611491565b6001600160a01b031660009081526009602052604090205490565b6102316102d5366004611522565b610595565b6102ed6102e83660046115a6565b6105b7565b005b6102ed6102fd366004611688565b6106d6565b610245610310366004611491565b6001600160a01b031660009081526020819052604090205490565b6102ed6106e3565b6102ed610341366004611522565b610719565b6102ed610354366004611688565b610732565b6102ed610367366004611522565b6107c4565b6005546040516001600160a01b039091168152602001610215565b6102ed61039536600461166d565b6108b1565b6102086108ee565b61024560065481565b6102316103b9366004611522565b6108fd565b6102316103cc366004611522565b610978565b6102ed6103df366004611522565b610986565b6102ed6103f23660046116a1565b6109b0565b61023161040536600461154c565b610b7e565b610245610418366004611491565b60096020526000908152604090205481565b610245610438366004611522565b610bd3565b6102ed61044b366004611688565b610c1a565b61024561045e3660046114b3565b610c6e565b6102ed610471366004611491565b610c99565b610231610484366004611491565b6001600160a01b03166000908152600a602052604090205460ff1690565b6102316104b0366004611491565b600a6020526000908152604090205460ff1681565b6060600380546104d4906118f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610500906118f4565b801561054d5780601f106105225761010080835404028352916020019161054d565b820191906000526020600020905b81548152906001019060200180831161053057829003601f168201915b5050505050905090565b600033610565818585610d31565b60019150505b92915050565b60003361057f858285610e55565b61058a858585610ec9565b506001949350505050565b6000336105658185856105a88383610c6e565b6105b291906117bb565b610d31565b6005546001600160a01b031633146105ea5760405162461bcd60e51b81526004016105e190611731565b60405180910390fd5b80518251146106515760405162461bcd60e51b815260206004820152602d60248201527f61646472657373657320646f6573206e6f74206d6174636820616c6c6f77656460448201526c0acc2d8eacae640d8cadccee8d609b1b60648201526084016105e1565b60005b82518110156106d15781818151811061066f5761066f611960565b6020026020010151600a600085848151811061068d5761068d611960565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806106c98161192f565b915050610654565b505050565b6106e03382611097565b50565b6005546001600160a01b0316331461070d5760405162461bcd60e51b81526004016105e190611731565b61071760006111e5565b565b610724823383610e55565b61072e8282611097565b5050565b6005546001600160a01b0316331461075c5760405162461bcd60e51b81526004016105e190611731565b6007548114156107bf5760405162461bcd60e51b815260206004820152602860248201527f6d65726b6c65526f6f74206973207468652073616d652061732070726576696f60448201526775732076616c756560c01b60648201526084016105e1565b600755565b336000908152600a602052604090205460ff166108185760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016105e1565b6b204fce5e3e250261100000008160065461083391906117bb565b11156108815760405162461bcd60e51b815260206004820152601e60248201527f5265717565737420686967686572207468616e206d617820737570706c79000060448201526064016105e1565b8060065461088f91906117bb565b60065561072e826108a26012600a611816565b6108ac90846118be565b611237565b6005546001600160a01b031633146108db5760405162461bcd60e51b81526004016105e190611731565b6008805460ff1916911515919091179055565b6060600480546104d4906118f4565b6000338161090b8286610c6e565b90508381101561096b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105e1565b61058a8286868403610d31565b600033610565818585610ec9565b6005546001600160a01b031633146108185760405162461bcd60e51b81526004016105e190611731565b60085460ff166109f65760405162461bcd60e51b815260206004820152601160248201527010db185a5b481b9bdd08195b98589b1959607a1b60448201526064016105e1565b610a0233848484610b7e565b610a4e5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420616c6c6f77616e636520766572696669636174696f6e00000060448201526064016105e1565b336000908152600960205260409020548390610a6b9086906117bb565b1115610ab95760405162461bcd60e51b815260206004820152601d60248201527f5265717565737420686967686572207468616e20616c6c6f77616e636500000060448201526064016105e1565b6b204fce5e3e2502611000000084600654610ad491906117bb565b1115610b225760405162461bcd60e51b815260206004820152601e60248201527f5265717565737420686967686572207468616e206d617820737570706c79000060448201526064016105e1565b33600090815260096020526040902054610b3d9085906117bb565b33600090815260096020526040902055600654610b5b9085906117bb565b600655610b7833610b6e6012600a611816565b6108ac90876118be565b50505050565b6000610bca838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506007549150610bc590508888610bd3565b611316565b95945050505050565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b336000908152600a602052604090205460ff1661075c5760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016105e1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610cc35760405162461bcd60e51b81526004016105e190611731565b6001600160a01b038116610d285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e1565b6106e0816111e5565b6001600160a01b038316610d935760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105e1565b6001600160a01b038216610df45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105e1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610e618484610c6e565b90506000198114610b785781811015610ebc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105e1565b610b788484848403610d31565b6001600160a01b038316610f2d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105e1565b6001600160a01b038216610f8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105e1565b6001600160a01b038316600090815260208190526040902054818110156110075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105e1565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061103e9084906117bb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108a91815260200190565b60405180910390a3610b78565b6001600160a01b0382166110f75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105e1565b6001600160a01b0382166000908152602081905260409020548181101561116b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105e1565b6001600160a01b038316600090815260208190526040812083830390556002805484929061119a9084906118dd565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661128d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105e1565b806002600082825461129f91906117bb565b90915550506001600160a01b038216600090815260208190526040812080548392906112cc9084906117bb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082611323858461132c565b14949350505050565b600081815b845181101561139857600085828151811061134e5761134e611960565b602002602001015190508083116113745760008381526020829052604090209250611385565b600081815260208490526040902092505b50806113908161192f565b915050611331565b509392505050565b80356001600160a01b03811681146113b757600080fd5b919050565b600082601f8301126113cd57600080fd5b813560206113e26113dd83611797565b611766565b80838252828201915082860187848660051b890101111561140257600080fd5b60005b858110156114285761141682611481565b84529284019290840190600101611405565b5090979650505050505050565b60008083601f84011261144757600080fd5b50813567ffffffffffffffff81111561145f57600080fd5b6020830191508360208260051b850101111561147a57600080fd5b9250929050565b803580151581146113b757600080fd5b6000602082840312156114a357600080fd5b6114ac826113a0565b9392505050565b600080604083850312156114c657600080fd5b6114cf836113a0565b91506114dd602084016113a0565b90509250929050565b6000806000606084860312156114fb57600080fd5b611504846113a0565b9250611512602085016113a0565b9150604084013590509250925092565b6000806040838503121561153557600080fd5b61153e836113a0565b946020939093013593505050565b6000806000806060858703121561156257600080fd5b61156b856113a0565b935060208501359250604085013567ffffffffffffffff81111561158e57600080fd5b61159a87828801611435565b95989497509550505050565b600080604083850312156115b957600080fd5b823567ffffffffffffffff808211156115d157600080fd5b818501915085601f8301126115e557600080fd5b813560206115f56113dd83611797565b8083825282820191508286018a848660051b890101111561161557600080fd5b600096505b8487101561163f5761162b816113a0565b83526001969096019591830191830161161a565b509650508601359250508082111561165657600080fd5b50611663858286016113bc565b9150509250929050565b60006020828403121561167f57600080fd5b6114ac82611481565b60006020828403121561169a57600080fd5b5035919050565b600080600080606085870312156116b757600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561158e57600080fd5b600060208083528351808285015260005b81811015611709578581018301518582016040015282016116ed565b8181111561171b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561178f5761178f611976565b604052919050565b600067ffffffffffffffff8211156117b1576117b1611976565b5060051b60200190565b600082198211156117ce576117ce61194a565b500190565b600181815b8085111561180e5781600019048211156117f4576117f461194a565b8085161561180157918102915b93841c93908002906117d8565b509250929050565b60006114ac838360008261182c5750600161056b565b816118395750600061056b565b816001811461184f576002811461185957611875565b600191505061056b565b60ff84111561186a5761186a61194a565b50506001821b61056b565b5060208310610133831016604e8410600b8410161715611898575081810a61056b565b6118a283836117d3565b80600019048211156118b6576118b661194a565b029392505050565b60008160001904831182151516156118d8576118d861194a565b500290565b6000828210156118ef576118ef61194a565b500390565b600181811c9082168061190857607f821691505b6020821081141561192957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156119435761194361194a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122019ac3803fdedc1d55b4c1a23dc6ccbf7ccdeddd13546c83dbc36536fdc74b29564736f6c63430008070033ab1330d92c447082ec9d14f32ff45c9a6e5b1109d34520d85cba9e5e10f26b32

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a8f12791161011a578063ae0b51df116100ad578063dc9055b21161007c578063dc9055b21461043d578063dd62ed3e14610450578063f2fde38b14610463578063f3ae241514610476578063fdff9b4d146104a257600080fd5b8063ae0b51df146103e4578063b0f37f41146103f7578063c884ef831461040a578063da73ff151461042a57600080fd5b8063a2309ff8116100e9578063a2309ff8146103a2578063a457c2d7146103ab578063a9059cbb146103be578063add5a4fa146103d157600080fd5b80638a8f1279146103595780638da5cb5b1461036c57806392929a091461038757806395d89b411461039a57600080fd5b806336bc89ad1161019257806370a082311161016157806370a0823114610302578063715018a61461032b57806379cc679014610333578063881d603e1461034657600080fd5b806336bc89ad1461029e57806339509351146102c75780633bdcc923146102da57806342966c68146102ef57600080fd5b806323b872dd116101ce57806323b872dd1461025c5780632866ed211461026f578063313ce5671461027c57806332cb6b0c1461028b57600080fd5b806306fdde0314610200578063095ea7b31461021e57806318160ddd1461024157806320f0372514610253575b600080fd5b6102086104c5565b60405161021591906116dc565b60405180910390f35b61023161022c366004611522565b610557565b6040519015158152602001610215565b6002545b604051908152602001610215565b61024560075481565b61023161026a3660046114e6565b610571565b6008546102319060ff1681565b60405160128152602001610215565b6102456b204fce5e3e2502611000000081565b6102456102ac366004611491565b6001600160a01b031660009081526009602052604090205490565b6102316102d5366004611522565b610595565b6102ed6102e83660046115a6565b6105b7565b005b6102ed6102fd366004611688565b6106d6565b610245610310366004611491565b6001600160a01b031660009081526020819052604090205490565b6102ed6106e3565b6102ed610341366004611522565b610719565b6102ed610354366004611688565b610732565b6102ed610367366004611522565b6107c4565b6005546040516001600160a01b039091168152602001610215565b6102ed61039536600461166d565b6108b1565b6102086108ee565b61024560065481565b6102316103b9366004611522565b6108fd565b6102316103cc366004611522565b610978565b6102ed6103df366004611522565b610986565b6102ed6103f23660046116a1565b6109b0565b61023161040536600461154c565b610b7e565b610245610418366004611491565b60096020526000908152604090205481565b610245610438366004611522565b610bd3565b6102ed61044b366004611688565b610c1a565b61024561045e3660046114b3565b610c6e565b6102ed610471366004611491565b610c99565b610231610484366004611491565b6001600160a01b03166000908152600a602052604090205460ff1690565b6102316104b0366004611491565b600a6020526000908152604090205460ff1681565b6060600380546104d4906118f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610500906118f4565b801561054d5780601f106105225761010080835404028352916020019161054d565b820191906000526020600020905b81548152906001019060200180831161053057829003601f168201915b5050505050905090565b600033610565818585610d31565b60019150505b92915050565b60003361057f858285610e55565b61058a858585610ec9565b506001949350505050565b6000336105658185856105a88383610c6e565b6105b291906117bb565b610d31565b6005546001600160a01b031633146105ea5760405162461bcd60e51b81526004016105e190611731565b60405180910390fd5b80518251146106515760405162461bcd60e51b815260206004820152602d60248201527f61646472657373657320646f6573206e6f74206d6174636820616c6c6f77656460448201526c0acc2d8eacae640d8cadccee8d609b1b60648201526084016105e1565b60005b82518110156106d15781818151811061066f5761066f611960565b6020026020010151600a600085848151811061068d5761068d611960565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806106c98161192f565b915050610654565b505050565b6106e03382611097565b50565b6005546001600160a01b0316331461070d5760405162461bcd60e51b81526004016105e190611731565b61071760006111e5565b565b610724823383610e55565b61072e8282611097565b5050565b6005546001600160a01b0316331461075c5760405162461bcd60e51b81526004016105e190611731565b6007548114156107bf5760405162461bcd60e51b815260206004820152602860248201527f6d65726b6c65526f6f74206973207468652073616d652061732070726576696f60448201526775732076616c756560c01b60648201526084016105e1565b600755565b336000908152600a602052604090205460ff166108185760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016105e1565b6b204fce5e3e250261100000008160065461083391906117bb565b11156108815760405162461bcd60e51b815260206004820152601e60248201527f5265717565737420686967686572207468616e206d617820737570706c79000060448201526064016105e1565b8060065461088f91906117bb565b60065561072e826108a26012600a611816565b6108ac90846118be565b611237565b6005546001600160a01b031633146108db5760405162461bcd60e51b81526004016105e190611731565b6008805460ff1916911515919091179055565b6060600480546104d4906118f4565b6000338161090b8286610c6e565b90508381101561096b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105e1565b61058a8286868403610d31565b600033610565818585610ec9565b6005546001600160a01b031633146108185760405162461bcd60e51b81526004016105e190611731565b60085460ff166109f65760405162461bcd60e51b815260206004820152601160248201527010db185a5b481b9bdd08195b98589b1959607a1b60448201526064016105e1565b610a0233848484610b7e565b610a4e5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420616c6c6f77616e636520766572696669636174696f6e00000060448201526064016105e1565b336000908152600960205260409020548390610a6b9086906117bb565b1115610ab95760405162461bcd60e51b815260206004820152601d60248201527f5265717565737420686967686572207468616e20616c6c6f77616e636500000060448201526064016105e1565b6b204fce5e3e2502611000000084600654610ad491906117bb565b1115610b225760405162461bcd60e51b815260206004820152601e60248201527f5265717565737420686967686572207468616e206d617820737570706c79000060448201526064016105e1565b33600090815260096020526040902054610b3d9085906117bb565b33600090815260096020526040902055600654610b5b9085906117bb565b600655610b7833610b6e6012600a611816565b6108ac90876118be565b50505050565b6000610bca838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506007549150610bc590508888610bd3565b611316565b95945050505050565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b336000908152600a602052604090205460ff1661075c5760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016105e1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610cc35760405162461bcd60e51b81526004016105e190611731565b6001600160a01b038116610d285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e1565b6106e0816111e5565b6001600160a01b038316610d935760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105e1565b6001600160a01b038216610df45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105e1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610e618484610c6e565b90506000198114610b785781811015610ebc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105e1565b610b788484848403610d31565b6001600160a01b038316610f2d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105e1565b6001600160a01b038216610f8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105e1565b6001600160a01b038316600090815260208190526040902054818110156110075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105e1565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061103e9084906117bb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108a91815260200190565b60405180910390a3610b78565b6001600160a01b0382166110f75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105e1565b6001600160a01b0382166000908152602081905260409020548181101561116b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105e1565b6001600160a01b038316600090815260208190526040812083830390556002805484929061119a9084906118dd565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661128d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105e1565b806002600082825461129f91906117bb565b90915550506001600160a01b038216600090815260208190526040812080548392906112cc9084906117bb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082611323858461132c565b14949350505050565b600081815b845181101561139857600085828151811061134e5761134e611960565b602002602001015190508083116113745760008381526020829052604090209250611385565b600081815260208490526040902092505b50806113908161192f565b915050611331565b509392505050565b80356001600160a01b03811681146113b757600080fd5b919050565b600082601f8301126113cd57600080fd5b813560206113e26113dd83611797565b611766565b80838252828201915082860187848660051b890101111561140257600080fd5b60005b858110156114285761141682611481565b84529284019290840190600101611405565b5090979650505050505050565b60008083601f84011261144757600080fd5b50813567ffffffffffffffff81111561145f57600080fd5b6020830191508360208260051b850101111561147a57600080fd5b9250929050565b803580151581146113b757600080fd5b6000602082840312156114a357600080fd5b6114ac826113a0565b9392505050565b600080604083850312156114c657600080fd5b6114cf836113a0565b91506114dd602084016113a0565b90509250929050565b6000806000606084860312156114fb57600080fd5b611504846113a0565b9250611512602085016113a0565b9150604084013590509250925092565b6000806040838503121561153557600080fd5b61153e836113a0565b946020939093013593505050565b6000806000806060858703121561156257600080fd5b61156b856113a0565b935060208501359250604085013567ffffffffffffffff81111561158e57600080fd5b61159a87828801611435565b95989497509550505050565b600080604083850312156115b957600080fd5b823567ffffffffffffffff808211156115d157600080fd5b818501915085601f8301126115e557600080fd5b813560206115f56113dd83611797565b8083825282820191508286018a848660051b890101111561161557600080fd5b600096505b8487101561163f5761162b816113a0565b83526001969096019591830191830161161a565b509650508601359250508082111561165657600080fd5b50611663858286016113bc565b9150509250929050565b60006020828403121561167f57600080fd5b6114ac82611481565b60006020828403121561169a57600080fd5b5035919050565b600080600080606085870312156116b757600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561158e57600080fd5b600060208083528351808285015260005b81811015611709578581018301518582016040015282016116ed565b8181111561171b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561178f5761178f611976565b604052919050565b600067ffffffffffffffff8211156117b1576117b1611976565b5060051b60200190565b600082198211156117ce576117ce61194a565b500190565b600181815b8085111561180e5781600019048211156117f4576117f461194a565b8085161561180157918102915b93841c93908002906117d8565b509250929050565b60006114ac838360008261182c5750600161056b565b816118395750600061056b565b816001811461184f576002811461185957611875565b600191505061056b565b60ff84111561186a5761186a61194a565b50506001821b61056b565b5060208310610133831016604e8410600b8410161715611898575081810a61056b565b6118a283836117d3565b80600019048211156118b6576118b661194a565b029392505050565b60008160001904831182151516156118d8576118d861194a565b500290565b6000828210156118ef576118ef61194a565b500390565b600181811c9082168061190857607f821691505b6020821081141561192957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156119435761194361194a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122019ac3803fdedc1d55b4c1a23dc6ccbf7ccdeddd13546c83dbc36536fdc74b29564736f6c63430008070033

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

ab1330d92c447082ec9d14f32ff45c9a6e5b1109d34520d85cba9e5e10f26b32

-----Decoded View---------------
Arg [0] : merkleRoot (bytes32): 0xab1330d92c447082ec9d14f32ff45c9a6e5b1109d34520d85cba9e5e10f26b32

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : ab1330d92c447082ec9d14f32ff45c9a6e5b1109d34520d85cba9e5e10f26b32


Deployed Bytecode Sourcemap

23931:3480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11868:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14219:201;;;;;;:::i;:::-;;:::i;:::-;;;6000:14:1;;5993:22;5975:41;;5963:2;5948:18;14219:201:0;5835:187:1;12988:108:0;13076:12;;12988:108;;;6173:25:1;;;6161:2;6146:18;12988:108:0;6027:177:1;24117:34:0;;;;;;15000:295;;;;;;:::i;:::-;;:::i;24160:32::-;;;;;;;;;12830:93;;;12913:2;14448:36:1;;14436:2;14421:18;12830:93:0;14306:184:1;24032:41:0;;24069:4;24032:41;;25158:117;;;;;;:::i;:::-;-1:-1:-1;;;;;25251:16:0;25224:7;25251:16;;;:7;:16;;;;;;;25158:117;15704:238;;;;;;:::i;:::-;;:::i;26239:337::-;;;;;;:::i;:::-;;:::i;:::-;;23246:91;;;;;;:::i;:::-;;:::i;13159:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13260:18:0;13233:7;13260:18;;;;;;;;;;;;13159:127;5291:103;;;:::i;23656:164::-;;;;;;:::i;:::-;;:::i;25742:216::-;;;;;;:::i;:::-;;:::i;26977:326::-;;;;;;:::i;:::-;;:::i;4640:87::-;4713:6;;4640:87;;-1:-1:-1;;;;;4713:6:0;;;5773:51:1;;5761:2;5746:18;4640:87:0;5627:203:1;27311:97:0;;;;;;:::i;:::-;;:::i;12087:104::-;;;:::i;24082:26::-;;;;;;16445:436;;;;;;:::i;:::-;;:::i;13492:193::-;;;;;;:::i;:::-;;:::i;25966:265::-;;;;;;:::i;:::-;;:::i;24559:591::-;;;;;;:::i;:::-;;:::i;25283:235::-;;;;;;:::i;:::-;;:::i;24237:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;25526:176;;;;;;:::i;:::-;;:::i;26692:277::-;;;;;;:::i;:::-;;:::i;13748:151::-;;;;;;:::i;:::-;;:::i;5549:201::-;;;;;;:::i;:::-;;:::i;26584:100::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26662:14:0;26638:4;26662:14;;;:8;:14;;;;;;;;;26584:100;24353:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11868:100;11922:13;11955:5;11948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11868:100;:::o;14219:201::-;14302:4;3444:10;14358:32;3444:10;14374:7;14383:6;14358:8;:32::i;:::-;14408:4;14401:11;;;14219:201;;;;;:::o;15000:295::-;15131:4;3444:10;15189:38;15205:4;3444:10;15220:6;15189:15;:38::i;:::-;15238:27;15248:4;15254:2;15258:6;15238:9;:27::i;:::-;-1:-1:-1;15283:4:0;;15000:295;-1:-1:-1;;;;15000:295:0:o;15704:238::-;15792:4;3444:10;15848:64;3444:10;15864:7;15901:10;15873:25;3444:10;15864:7;15873:9;:25::i;:::-;:38;;;;:::i;:::-;15848:8;:64::i;26239:337::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;:::-;;;;;;;;;26373:13:::1;:20;26353:9;:16;:40;26345:98;;;::::0;-1:-1:-1;;;26345:98:0;;9693:2:1;26345:98:0::1;::::0;::::1;9675:21:1::0;9732:2;9712:18;;;9705:30;9771:34;9751:18;;;9744:62;-1:-1:-1;;;9822:18:1;;;9815:43;9875:19;;26345:98:0::1;9491:409:1::0;26345:98:0::1;26459:9;26454:115;26478:9;:16;26474:1;:20;26454:115;;;26541:13;26555:1;26541:16;;;;;;;;:::i;:::-;;;;;;;26516:8;:22;26525:9;26535:1;26525:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26516:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26516:22:0;:41;;-1:-1:-1;;26516:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26496:3;::::1;::::0;::::1;:::i;:::-;;;;26454:115;;;;26239:337:::0;;:::o;23246:91::-;23302:27;3444:10;23322:6;23302:5;:27::i;:::-;23246:91;:::o;5291:103::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;:::-;5356:30:::1;5383:1;5356:18;:30::i;:::-;5291:103::o:0;23656:164::-;23733:46;23749:7;3444:10;23772:6;23733:15;:46::i;:::-;23790:22;23796:7;23805:6;23790:5;:22::i;:::-;23656:164;;:::o;25742:216::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;:::-;25844:19:::1;;25830:10;:33;;25822:85;;;::::0;-1:-1:-1;;;25822:85:0;;10872:2:1;25822:85:0::1;::::0;::::1;10854:21:1::0;10911:2;10891:18;;;10884:30;10950:34;10930:18;;;10923:62;-1:-1:-1;;;11001:18:1;;;10994:38;11049:19;;25822:85:0::1;10670:404:1::0;25822:85:0::1;25918:19;:32:::0;25742:216::o;26977:326::-;27072:10;27063:20;;;;:8;:20;;;;;;;;27055:51;;;;-1:-1:-1;;;27055:51:0;;7417:2:1;27055:51:0;;;7399:21:1;7456:2;7436:18;;;7429:30;-1:-1:-1;;;7475:18:1;;;7468:48;7533:18;;27055:51:0;7215:342:1;27055:51:0;24069:4;27139:6;27125:11;;:20;;;;:::i;:::-;:34;;27117:77;;;;-1:-1:-1;;;27117:77:0;;11988:2:1;27117:77:0;;;11970:21:1;12027:2;12007:18;;;12000:30;12066:32;12046:18;;;12039:60;12116:18;;27117:77:0;11786:354:1;27117:77:0;27233:6;27219:11;;:20;;;;:::i;:::-;27205:11;:34;27250:45;27256:7;27274:20;12913:2;27274;:20;:::i;:::-;27265:29;;:6;:29;:::i;:::-;27250:5;:45::i;27311:97::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;:::-;27378:12:::1;:22:::0;;-1:-1:-1;;27378:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27311:97::o;12087:104::-;12143:13;12176:7;12169:14;;;;;:::i;16445:436::-;16538:4;3444:10;16538:4;16621:25;3444:10;16638:7;16621:9;:25::i;:::-;16594:52;;16685:15;16665:16;:35;;16657:85;;;;-1:-1:-1;;;16657:85:0;;13560:2:1;16657:85:0;;;13542:21:1;13599:2;13579:18;;;13572:30;13638:34;13618:18;;;13611:62;-1:-1:-1;;;13689:18:1;;;13682:35;13734:19;;16657:85:0;13358:401:1;16657:85:0;16778:60;16787:5;16794:7;16822:15;16803:16;:34;16778:8;:60::i;13492:193::-;13571:4;3444:10;13627:28;3444:10;13644:2;13648:6;13627:9;:28::i;25966:265::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;24559:591::-;24661:12;;;;24653:42;;;;-1:-1:-1;;;24653:42:0;;11281:2:1;24653:42:0;;;11263:21:1;11320:2;11300:18;;;11293:30;-1:-1:-1;;;11339:18:1;;;11332:47;11396:18;;24653:42:0;11079:341:1;24653:42:0;24714:45;24730:10;24742:9;24753:5;;24714:15;:45::i;:::-;24706:87;;;;-1:-1:-1;;;24706:87:0;;8167:2:1;24706:87:0;;;8149:21:1;8206:2;8186:18;;;8179:30;8245:31;8225:18;;;8218:59;8294:18;;24706:87:0;7965:353:1;24706:87:0;24820:10;24812:19;;;;:7;:19;;;;;;24844:9;;24812:28;;24834:6;;24812:28;:::i;:::-;:41;;24804:83;;;;-1:-1:-1;;;24804:83:0;;9335:2:1;24804:83:0;;;9317:21:1;9374:2;9354:18;;;9347:30;9413:31;9393:18;;;9386:59;9462:18;;24804:83:0;9133:353:1;24804:83:0;24069:4;24920:6;24906:11;;:20;;;;:::i;:::-;:34;;24898:77;;;;-1:-1:-1;;;24898:77:0;;11988:2:1;24898:77:0;;;11970:21:1;12027:2;12007:18;;;12000:30;12066:32;12046:18;;;12039:60;12116:18;;24898:77:0;11786:354:1;24898:77:0;25018:10;25010:19;;;;:7;:19;;;;;;:28;;25032:6;;25010:28;:::i;:::-;24996:10;24988:19;;;;:7;:19;;;;;:50;25063:11;;:20;;25077:6;;25063:20;:::i;:::-;25049:11;:34;25094:48;25100:10;25121:20;12913:2;25121;:20;:::i;:::-;25112:29;;:6;:29;:::i;25094:48::-;24559:591;;;;:::o;25283:235::-;25391:4;25415:95;25434:5;;25415:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25441:19:0;;;-1:-1:-1;25462:47:0;;-1:-1:-1;25490:7:0;25499:9;25462:27;:47::i;:::-;25415:18;:95::i;:::-;25408:102;25283:235;-1:-1:-1;;;;;25283:235:0:o;25526:176::-;25657:36;;-1:-1:-1;;5505:2:1;5501:15;;;5497:53;25657:36:0;;;5485:66:1;5567:12;;;5560:28;;;25620:7:0;;5604:12:1;;25657:36:0;;;;;;;;;;;;25647:47;;;;;;25640:54;;25526:176;;;;:::o;26692:277::-;26788:10;26779:20;;;;:8;:20;;;;;;;;26771:51;;;;-1:-1:-1;;;26771:51:0;;7417:2:1;26771:51:0;;;7399:21:1;7456:2;7436:18;;;7429:30;-1:-1:-1;;;7475:18:1;;;7468:48;7533:18;;26771:51:0;7215:342:1;13748:151:0;-1:-1:-1;;;;;13864:18:0;;;13837:7;13864:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13748:151::o;5549:201::-;4713:6;;-1:-1:-1;;;;;4713:6:0;3444:10;4860:23;4852:68;;;;-1:-1:-1;;;4852:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5638:22:0;::::1;5630:73;;;::::0;-1:-1:-1;;;5630:73:0;;8525:2:1;5630:73:0::1;::::0;::::1;8507:21:1::0;8564:2;8544:18;;;8537:30;8603:34;8583:18;;;8576:62;-1:-1:-1;;;8654:18:1;;;8647:36;8700:19;;5630:73:0::1;8323:402:1::0;5630:73:0::1;5714:28;5733:8;5714:18;:28::i;20079:380::-:0;-1:-1:-1;;;;;20215:19:0;;20207:68;;;;-1:-1:-1;;;20207:68:0;;13155:2:1;20207:68:0;;;13137:21:1;13194:2;13174:18;;;13167:30;13233:34;13213:18;;;13206:62;-1:-1:-1;;;13284:18:1;;;13277:34;13328:19;;20207:68:0;12953:400:1;20207:68:0;-1:-1:-1;;;;;20294:21:0;;20286:68;;;;-1:-1:-1;;;20286:68:0;;8932:2:1;20286:68:0;;;8914:21:1;8971:2;8951:18;;;8944:30;9010:34;8990:18;;;8983:62;-1:-1:-1;;;9061:18:1;;;9054:32;9103:19;;20286:68:0;8730:398:1;20286:68:0;-1:-1:-1;;;;;20367:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20419:32;;6173:25:1;;;20419:32:0;;6146:18:1;20419:32:0;;;;;;;20079:380;;;:::o;20750:453::-;20885:24;20912:25;20922:5;20929:7;20912:9;:25::i;:::-;20885:52;;-1:-1:-1;;20952:16:0;:37;20948:248;;21034:6;21014:16;:26;;21006:68;;;;-1:-1:-1;;;21006:68:0;;10107:2:1;21006:68:0;;;10089:21:1;10146:2;10126:18;;;10119:30;10185:31;10165:18;;;10158:59;10234:18;;21006:68:0;9905:353:1;21006:68:0;21118:51;21127:5;21134:7;21162:6;21143:16;:25;21118:8;:51::i;17360:671::-;-1:-1:-1;;;;;17491:18:0;;17483:68;;;;-1:-1:-1;;;17483:68:0;;12749:2:1;17483:68:0;;;12731:21:1;12788:2;12768:18;;;12761:30;12827:34;12807:18;;;12800:62;-1:-1:-1;;;12878:18:1;;;12871:35;12923:19;;17483:68:0;12547:401:1;17483:68:0;-1:-1:-1;;;;;17570:16:0;;17562:64;;;;-1:-1:-1;;;17562:64:0;;7013:2:1;17562:64:0;;;6995:21:1;7052:2;7032:18;;;7025:30;7091:34;7071:18;;;7064:62;-1:-1:-1;;;7142:18:1;;;7135:33;7185:19;;17562:64:0;6811:399:1;17562:64:0;-1:-1:-1;;;;;17712:15:0;;17690:19;17712:15;;;;;;;;;;;17746:21;;;;17738:72;;;;-1:-1:-1;;;17738:72:0;;10465:2:1;17738:72:0;;;10447:21:1;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:36;10640:19;;17738:72:0;10263:402:1;17738:72:0;-1:-1:-1;;;;;17846:15:0;;;:9;:15;;;;;;;;;;;17864:20;;;17846:38;;17906:13;;;;;;;;:23;;17878:6;;17846:9;17906:23;;17878:6;;17906:23;:::i;:::-;;;;;;;;17962:2;-1:-1:-1;;;;;17947:26:0;17956:4;-1:-1:-1;;;;;17947:26:0;;17966:6;17947:26;;;;6173:25:1;;6161:2;6146:18;;6027:177;17947:26:0;;;;;;;;17986:37;26239:337;19050:591;-1:-1:-1;;;;;19134:21:0;;19126:67;;;;-1:-1:-1;;;19126:67:0;;12347:2:1;19126:67:0;;;12329:21:1;12386:2;12366:18;;;12359:30;12425:34;12405:18;;;12398:62;-1:-1:-1;;;12476:18:1;;;12469:31;12517:19;;19126:67:0;12145:397:1;19126:67:0;-1:-1:-1;;;;;19293:18:0;;19268:22;19293:18;;;;;;;;;;;19330:24;;;;19322:71;;;;-1:-1:-1;;;19322:71:0;;7764:2:1;19322:71:0;;;7746:21:1;7803:2;7783:18;;;7776:30;7842:34;7822:18;;;7815:62;-1:-1:-1;;;7893:18:1;;;7886:32;7935:19;;19322:71:0;7562:398:1;19322:71:0;-1:-1:-1;;;;;19429:18:0;;:9;:18;;;;;;;;;;19450:23;;;19429:44;;19495:12;:22;;19467:6;;19429:9;19495:22;;19467:6;;19495:22;:::i;:::-;;;;-1:-1:-1;;19535:37:0;;6173:25:1;;;19561:1:0;;-1:-1:-1;;;;;19535:37:0;;;;;6161:2:1;6146:18;19535:37:0;;;;;;;26454:115:::1;26239:337:::0;;:::o;5910:191::-;6003:6;;;-1:-1:-1;;;;;6020:17:0;;;-1:-1:-1;;;;;;6020:17:0;;;;;;;6053:40;;6003:6;;;6020:17;6003:6;;6053:40;;5984:16;;6053:40;5973:128;5910:191;:::o;18318:399::-;-1:-1:-1;;;;;18402:21:0;;18394:65;;;;-1:-1:-1;;;18394:65:0;;13966:2:1;18394:65:0;;;13948:21:1;14005:2;13985:18;;;13978:30;14044:33;14024:18;;;14017:61;14095:18;;18394:65:0;13764:355:1;18394:65:0;18550:6;18534:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;18567:18:0;;:9;:18;;;;;;;;;;:28;;18589:6;;18567:9;:28;;18589:6;;18567:28;:::i;:::-;;;;-1:-1:-1;;18611:37:0;;6173:25:1;;;-1:-1:-1;;;;;18611:37:0;;;18628:1;;18611:37;;6161:2:1;6146:18;18611:37:0;;;;;;;23656:164;;:::o;1220:190::-;1345:4;1398;1369:25;1382:5;1389:4;1369:12;:25::i;:::-;:33;;1220:190;-1:-1:-1;;;;1220:190:0:o;1771:675::-;1854:7;1897:4;1854:7;1912:497;1936:5;:12;1932:1;:16;1912:497;;;1970:20;1993:5;1999:1;1993:8;;;;;;;;:::i;:::-;;;;;;;1970:31;;2036:12;2020;:28;2016:382;;2522:13;2572:15;;;2608:4;2601:15;;;2655:4;2639:21;;2148:57;;2016:382;;;2522:13;2572:15;;;2608:4;2601:15;;;2655:4;2639:21;;2325:57;;2016:382;-1:-1:-1;1950:3:0;;;;:::i;:::-;;;;1912:497;;;-1:-1:-1;2426:12:0;1771:675;-1:-1:-1;;;1771:675:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:673::-;243:5;296:3;289:4;281:6;277:17;273:27;263:55;;314:1;311;304:12;263:55;350:6;337:20;376:4;400:60;416:43;456:2;416:43;:::i;:::-;400:60;:::i;:::-;482:3;506:2;501:3;494:15;534:2;529:3;525:12;518:19;;569:2;561:6;557:15;621:3;616:2;610;607:1;603:10;595:6;591:23;587:32;584:41;581:61;;;638:1;635;628:12;581:61;660:1;670:166;684:2;681:1;678:9;670:166;;;741:20;757:3;741:20;:::i;:::-;729:33;;782:12;;;;814;;;;702:1;695:9;670:166;;;-1:-1:-1;854:5:1;;192:673;-1:-1:-1;;;;;;;192:673:1:o;870:367::-;933:8;943:6;997:3;990:4;982:6;978:17;974:27;964:55;;1015:1;1012;1005:12;964:55;-1:-1:-1;1038:20:1;;1081:18;1070:30;;1067:50;;;1113:1;1110;1103:12;1067:50;1150:4;1142:6;1138:17;1126:29;;1210:3;1203:4;1193:6;1190:1;1186:14;1178:6;1174:27;1170:38;1167:47;1164:67;;;1227:1;1224;1217:12;1164:67;870:367;;;;;:::o;1242:160::-;1307:20;;1363:13;;1356:21;1346:32;;1336:60;;1392:1;1389;1382:12;1407:186;1466:6;1519:2;1507:9;1498:7;1494:23;1490:32;1487:52;;;1535:1;1532;1525:12;1487:52;1558:29;1577:9;1558:29;:::i;:::-;1548:39;1407:186;-1:-1:-1;;;1407:186:1:o;1598:260::-;1666:6;1674;1727:2;1715:9;1706:7;1702:23;1698:32;1695:52;;;1743:1;1740;1733:12;1695:52;1766:29;1785:9;1766:29;:::i;:::-;1756:39;;1814:38;1848:2;1837:9;1833:18;1814:38;:::i;:::-;1804:48;;1598:260;;;;;:::o;1863:328::-;1940:6;1948;1956;2009:2;1997:9;1988:7;1984:23;1980:32;1977:52;;;2025:1;2022;2015:12;1977:52;2048:29;2067:9;2048:29;:::i;:::-;2038:39;;2096:38;2130:2;2119:9;2115:18;2096:38;:::i;:::-;2086:48;;2181:2;2170:9;2166:18;2153:32;2143:42;;1863:328;;;;;:::o;2196:254::-;2264:6;2272;2325:2;2313:9;2304:7;2300:23;2296:32;2293:52;;;2341:1;2338;2331:12;2293:52;2364:29;2383:9;2364:29;:::i;:::-;2354:39;2440:2;2425:18;;;;2412:32;;-1:-1:-1;;;2196:254:1:o;2455:579::-;2559:6;2567;2575;2583;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;2675:29;2694:9;2675:29;:::i;:::-;2665:39;;2751:2;2740:9;2736:18;2723:32;2713:42;;2806:2;2795:9;2791:18;2778:32;2833:18;2825:6;2822:30;2819:50;;;2865:1;2862;2855:12;2819:50;2904:70;2966:7;2957:6;2946:9;2942:22;2904:70;:::i;:::-;2455:579;;;;-1:-1:-1;2993:8:1;-1:-1:-1;;;;2455:579:1:o;3039:1151::-;3154:6;3162;3215:2;3203:9;3194:7;3190:23;3186:32;3183:52;;;3231:1;3228;3221:12;3183:52;3271:9;3258:23;3300:18;3341:2;3333:6;3330:14;3327:34;;;3357:1;3354;3347:12;3327:34;3395:6;3384:9;3380:22;3370:32;;3440:7;3433:4;3429:2;3425:13;3421:27;3411:55;;3462:1;3459;3452:12;3411:55;3498:2;3485:16;3520:4;3544:60;3560:43;3600:2;3560:43;:::i;3544:60::-;3626:3;3650:2;3645:3;3638:15;3678:2;3673:3;3669:12;3662:19;;3709:2;3705;3701:11;3757:7;3752:2;3746;3743:1;3739:10;3735:2;3731:19;3727:28;3724:41;3721:61;;;3778:1;3775;3768:12;3721:61;3800:1;3791:10;;3810:169;3824:2;3821:1;3818:9;3810:169;;;3881:23;3900:3;3881:23;:::i;:::-;3869:36;;3842:1;3835:9;;;;;3925:12;;;;3957;;3810:169;;;-1:-1:-1;3998:5:1;-1:-1:-1;;4041:18:1;;4028:32;;-1:-1:-1;;4072:16:1;;;4069:36;;;4101:1;4098;4091:12;4069:36;;4124:60;4176:7;4165:8;4154:9;4150:24;4124:60;:::i;:::-;4114:70;;;3039:1151;;;;;:::o;4195:180::-;4251:6;4304:2;4292:9;4283:7;4279:23;4275:32;4272:52;;;4320:1;4317;4310:12;4272:52;4343:26;4359:9;4343:26;:::i;4380:180::-;4439:6;4492:2;4480:9;4471:7;4467:23;4463:32;4460:52;;;4508:1;4505;4498:12;4460:52;-1:-1:-1;4531:23:1;;4380:180;-1:-1:-1;4380:180:1:o;4750:573::-;4854:6;4862;4870;4878;4931:2;4919:9;4910:7;4906:23;4902:32;4899:52;;;4947:1;4944;4937:12;4899:52;4983:9;4970:23;4960:33;;5040:2;5029:9;5025:18;5012:32;5002:42;;5095:2;5084:9;5080:18;5067:32;5122:18;5114:6;5111:30;5108:50;;;5154:1;5151;5144:12;6209:597;6321:4;6350:2;6379;6368:9;6361:21;6411:6;6405:13;6454:6;6449:2;6438:9;6434:18;6427:34;6479:1;6489:140;6503:6;6500:1;6497:13;6489:140;;;6598:14;;;6594:23;;6588:30;6564:17;;;6583:2;6560:26;6553:66;6518:10;;6489:140;;;6647:6;6644:1;6641:13;6638:91;;;6717:1;6712:2;6703:6;6692:9;6688:22;6684:31;6677:42;6638:91;-1:-1:-1;6790:2:1;6769:15;-1:-1:-1;;6765:29:1;6750:45;;;;6797:2;6746:54;;6209:597;-1:-1:-1;;;6209:597:1:o;11425:356::-;11627:2;11609:21;;;11646:18;;;11639:30;11705:34;11700:2;11685:18;;11678:62;11772:2;11757:18;;11425:356::o;14495:275::-;14566:2;14560:9;14631:2;14612:13;;-1:-1:-1;;14608:27:1;14596:40;;14666:18;14651:34;;14687:22;;;14648:62;14645:88;;;14713:18;;:::i;:::-;14749:2;14742:22;14495:275;;-1:-1:-1;14495:275:1:o;14775:183::-;14835:4;14868:18;14860:6;14857:30;14854:56;;;14890:18;;:::i;:::-;-1:-1:-1;14935:1:1;14931:14;14947:4;14927:25;;14775:183::o;14963:128::-;15003:3;15034:1;15030:6;15027:1;15024:13;15021:39;;;15040:18;;:::i;:::-;-1:-1:-1;15076:9:1;;14963:128::o;15096:422::-;15185:1;15228:5;15185:1;15242:270;15263:7;15253:8;15250:21;15242:270;;;15322:4;15318:1;15314:6;15310:17;15304:4;15301:27;15298:53;;;15331:18;;:::i;:::-;15381:7;15371:8;15367:22;15364:55;;;15401:16;;;;15364:55;15480:22;;;;15440:15;;;;15242:270;;;15246:3;15096:422;;;;;:::o;15523:131::-;15583:5;15612:36;15639:8;15633:4;15708:5;15738:8;15728:80;;-1:-1:-1;15779:1:1;15793:5;;15728:80;15827:4;15817:76;;-1:-1:-1;15864:1:1;15878:5;;15817:76;15909:4;15927:1;15922:59;;;;15995:1;15990:130;;;;15902:218;;15922:59;15952:1;15943:10;;15966:5;;;15990:130;16027:3;16017:8;16014:17;16011:43;;;16034:18;;:::i;:::-;-1:-1:-1;;16090:1:1;16076:16;;16105:5;;15902:218;;16204:2;16194:8;16191:16;16185:3;16179:4;16176:13;16172:36;16166:2;16156:8;16153:16;16148:2;16142:4;16139:12;16135:35;16132:77;16129:159;;;-1:-1:-1;16241:19:1;;;16273:5;;16129:159;16320:34;16345:8;16339:4;16320:34;:::i;:::-;16390:6;16386:1;16382:6;16378:19;16369:7;16366:32;16363:58;;;16401:18;;:::i;:::-;16439:20;;15659:806;-1:-1:-1;;;15659:806:1:o;16470:168::-;16510:7;16576:1;16572;16568:6;16564:14;16561:1;16558:21;16553:1;16546:9;16539:17;16535:45;16532:71;;;16583:18;;:::i;:::-;-1:-1:-1;16623:9:1;;16470:168::o;16643:125::-;16683:4;16711:1;16708;16705:8;16702:34;;;16716:18;;:::i;:::-;-1:-1:-1;16753:9:1;;16643:125::o;16773:380::-;16852:1;16848:12;;;;16895;;;16916:61;;16970:4;16962:6;16958:17;16948:27;;16916:61;17023:2;17015:6;17012:14;16992:18;16989:38;16986:161;;;17069:10;17064:3;17060:20;17057:1;17050:31;17104:4;17101:1;17094:15;17132:4;17129:1;17122:15;16986:161;;16773:380;;;:::o;17158:135::-;17197:3;-1:-1:-1;;17218:17:1;;17215:43;;;17238:18;;:::i;:::-;-1:-1:-1;17285:1:1;17274:13;;17158:135::o;17298:127::-;17359:10;17354:3;17350:20;17347:1;17340:31;17390:4;17387:1;17380:15;17414:4;17411:1;17404:15;17430:127;17491:10;17486:3;17482:20;17479:1;17472:31;17522:4;17519:1;17512:15;17546:4;17543:1;17536:15;17562:127;17623:10;17618:3;17614:20;17611:1;17604:31;17654:4;17651:1;17644:15;17678:4;17675:1;17668:15

Swarm Source

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