ETH Price: $3,853.48 (+4.23%)

Token

ERC-20: LEEDO Project ERC20 (LEEDO)
 

Overview

Max Total Supply

47,455,154.4581278238874122 LEEDO

Holders

238

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bholder.eth
Balance
4,411.35539533765987984 LEEDO

Value
$0.00
0x81f3389cbc7f7ce7bd94857d466952ea1a463255
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:
LeedoERC20

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @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) {
        return msg.data;
    }
}

// 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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/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



pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/LeedoERC20.sol

/**
 * @dev LEEDO ERC20 Token Contract
 *
 *  _              ______      
 * | |             |  _  \     
 * | |     ___  ___| | | |___  
 * | |    / _ \/ _ \ | | / _ \ 
 * | |___|  __/  __/ |/ / (_) |
 * \_____/\___|\___|___/ \___/ 
 * LEEDO Project
 */

pragma solidity ^0.8.0;

interface ILeedoNft {
    
    function balanceOf(address owner) external view returns (uint balance);
    function ownerOf(uint tokenId) external view returns (address owner);
    function getConsonants(uint tokenId) external view returns(string[3] memory);
    function getGenes(uint tokenId) external view returns (uint8[8] memory);
    function getConsonantsIndex(uint tokenId) external view returns (uint8[3] memory);
}

interface ILeedoNftVault {
    
    function ownerOf(uint tokenId) external view returns (address owner);
    function lastBlocks(address addr) external view returns (uint black);
}

contract LeedoERC20 is ERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint;

    bool public daoInitialized = false;
    address private _daoAddr;
    address private _nftAddr;
    address private _nftVaultAddr;
    address private _raffleAddr;
    uint public claimBlocksRequired = 200000; //about 31 days
    uint private _decimal = 10**uint(decimals());    
    uint public rafflePrize = 100000 * 20;
    uint public nftMintableWeiAmount = (138000000 - 21000000) * _decimal; //117,000,000 * decimal
    uint public daoMintableAmount = 175000000 + 70000000 + 70000000 + 210000000; //525,000,000
    uint public marketingMintableAmount = 35000000;
    uint public daoTimelock;
    uint public timeLockDuration = 24 hours;
    uint public season = 0;

    mapping(uint => mapping(uint => bool)) public claims; //season => (tokendId => bool)
    mapping(uint => uint) public claimCount; //season => count

    modifier onlyDao() {
        require(_daoAddr == _msgSender(), "ERC20: caller is not the DAO address!");
        _;
    } 
    
    modifier onlyNftVault() {
        require(_nftVaultAddr == _msgSender(), "ERC20: caller is not the NftVault address!");
        _;
    }         
    
    //nftAddr = 0xBE5C953DD0ddB0Ce033a98f36C981F1B74d3B33f; //mainnet   
    //raffleAddr = 0xb109173Ab57Dab7F954Ef8F10D87a5bFDB740EEB; //mainnet
    constructor(address _nftAddress, address _raffleAddress) ERC20('LEEDO Project ERC20', 'LEEDO') {
        _nftAddr = _nftAddress;
        _raffleAddr = _raffleAddress;
    }    

    function mintRafflePrize() external onlyOwner returns (bool) {
        require(_safeMint(_raffleAddr, rafflePrize.mul(_decimal)), 'ERC20: Minting failed');
        rafflePrize = 0;
        return true;
    }
    
    function setNftVaultAddr(address _vault) external onlyOwner {
        _nftVaultAddr = _vault;
    }
    
    function mintNftVaultRewards(address _to, uint _amount) external onlyNftVault returns (bool) {
        //_amount is in wei
        require(_amount <= nftMintableWeiAmount, 'ERC20: Amount is more than allowed');
        nftMintableWeiAmount = nftMintableWeiAmount.sub(_amount);
        require(_safeMint(_to, _amount), 'ERC20: Minting failed');
        return true;
    }
    
    function mintDev(address _devAddr, uint _amount) external onlyOwner returns (bool) {
        require(_amount <= marketingMintableAmount, 'ERC20: Amount is more than allowed');
        marketingMintableAmount = marketingMintableAmount.sub(_amount);
        require(_safeMint(_devAddr, _amount.mul(_decimal)), 'ERC20: Minting failed');
        return true;
    }

    function initializeDao(address _daoAddress) public onlyOwner {
        require(!daoInitialized, 'ERC20: DAO is already initialized');
        _daoAddr = _daoAddress;
        daoInitialized = true;
    }
    
    function setDaoAddr(address _daoAddress) public onlyDao {
        require(daoInitialized, 'ERC20: DAO is not initialized');
        _daoAddr = _daoAddress;
    }    

    function unlockDaoMint() public onlyDao {
        daoTimelock = block.timestamp + timeLockDuration;
    }

    function daoMint(uint _amount) public onlyDao returns (bool) {
        require(daoTimelock != 0 && daoTimelock <= block.timestamp, 'ERC20: Wait _daoTimelock passes');
        require(_amount <= daoMintableAmount, 'ERC20:  Amount is more than allowed');
        daoMintableAmount = daoMintableAmount.sub(_amount); 
        require(_safeMint(_daoAddr, _amount.mul(_decimal)), 'ERC20: Minting failed');
        daoTimelock = 0;
        return true;
    }
    
    function daoSetSeason(uint _season) external onlyDao {
        season = _season;
    }    
    
    function setDaoMintable(uint _amount) external onlyDao {
        daoMintableAmount = _amount;
    }

    function setNftAddress(address _newAddress) external onlyDao {
        _nftAddr = _newAddress;
    }

    function setNftVaultAddrByDao(address _vault) external onlyDao {
        _nftVaultAddr = _vault;
    }    
    
    function _safeMint(address _to, uint _amount) private nonReentrant returns (bool) {
        _mint(_to, _amount); //in wei
        return true;
    }
    
    function claim(uint[] calldata _tokenIds) external returns (uint) {
        require(_tokenIds.length <= 20, 'ERC20: maximum bulk claims is 20 cards per tx');
        ILeedoNftVault sNFT = ILeedoNftVault(_nftVaultAddr); //only Staked NFT can claim  
        require(sNFT.lastBlocks(_msgSender()) + claimBlocksRequired < block.number, 'ERC20: does not meet claimBlockRequired');
        uint total;
        for (uint i=0; i<_tokenIds.length; i++) {
            uint tokenId = _tokenIds[i];
            require(tokenId > 0 && tokenId < 9577, 'ERC20: tokenId is invalid'); 
            require(claims[season][tokenId] == false, 'ERC20: tokenId is already claimed');
            require(_msgSender() == sNFT.ownerOf(tokenId), 'ERC20: Only Staked NFT owner can claim');
            
            uint amount = calcRewards(tokenId); 
            claims[season][tokenId] = true;        
            claimCount[season] += 1;
            total = total.add(amount);
        }
        require(_safeMint(_msgSender(), total.mul(_decimal)), 'SquidERC20: Minting failed');      
        return total;
    }    
    
    function calcRewards(uint _tokenId) public view returns (uint) {        
        ILeedoNft NFT = ILeedoNft(_nftAddr);        
        uint8[3] memory consonants = NFT.getConsonantsIndex(_tokenId);
        uint8[8] memory genes = NFT.getGenes(_tokenId);        
        
        uint geneSSum;
        uint left = consonants[0];
        uint center = consonants[1];
        uint right = consonants[2];
        uint consFactor;
        uint timeFactor = 141 * (16000 - claimCount[season]) / 9000; //1 -> 250  9576 -> 100 
        uint tokenIdFactor;
        if (_tokenId <= 100) {
            tokenIdFactor = 200;
        } else if (_tokenId <= 1000) {
            tokenIdFactor = 150;
        } else {
            tokenIdFactor = 100;
        }
        
        for (uint i=0; i<8; i++) {
            geneSSum += uint(genes[i]).mul(uint(genes[i]));
        }
        if (geneSSum < 100) {
            geneSSum = 100;
        } else if (geneSSum > 648) {
            geneSSum = 648;
        }
        if (timeFactor < 100) {
            timeFactor = 100;
        }

        if (left == 7 && center == 14 && right == 4) { 
            consFactor = 2;
        } else if (left == center && left == center && center == right) {
            consFactor = 10;
        } else if (left == 7 && left == 4 && center == 14) {            
            consFactor = 5;
        } else if (left == 4 && left == 7 && center == 14) {                        
            consFactor = 5;
        } else if (left == 4 && left == 14 && center == 7) {                        
            consFactor = 5;
        } else if (left == 14 && left == 7 && center == 4) {                                
            consFactor = 5;
        } else if (left == 14 && left == 4 && center == 7) {                                                
            consFactor = 5;
        } else if ((left == 4 && left == center) || (left == 4 && left == right)) {            
            consFactor = 3;
        } else if ((left == 14 && left == center) || (left == 14 && left == right)) {
            consFactor = 3;
        } else if ((left == 7 && left == center) || (left == 7 && left == right)) {
            consFactor = 3;
        } else if (center == 4 && center == right )  {            
            consFactor = 3;
        } else if (center == 14 && center == right ) {                    
            consFactor = 3;
        } else if (center == 7 && center == right ) {                                
            consFactor = 3;            
        } else {
            consFactor = 1;
        }
        return  (geneSSum * tokenIdFactor * consFactor * timeFactor) / 2000;  
    }
    
    function daoAddr() external view returns (address) {
        return _daoAddr;
    }
    
    function nftAddr() external view returns (address) {
        return _nftAddr;
    }
    
    function nftVaultAddr() external view returns (address) {
        return _nftVaultAddr;
    }
    
    function raffleAddr() external view returns (address) {
        return _raffleAddr;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_raffleAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"_tokenId","type":"uint256"}],"name":"calcRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimBlocksRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claims","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"daoMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoMintableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_season","type":"uint256"}],"name":"daoSetSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoTimelock","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":"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":"_daoAddress","type":"address"}],"name":"initializeDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingMintableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintDev","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintNftVaultRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintRafflePrize","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":"nftAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftMintableWeiAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftVaultAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rafflePrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"season","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_daoAddress","type":"address"}],"name":"setDaoAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setDaoMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setNftVaultAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setNftVaultAddrByDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeLockDuration","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":"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"},{"inputs":[],"name":"unlockDaoMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526007805460ff1916905562030d40600b55620000236012600a6200036b565b600c819055621e8480600d556200003f906306f9474062000380565b600e55631f4add40600f556302160ec06010556201518060125560006013553480156200006b57600080fd5b5060405162002599380380620025998339810160408190526200008e91620003bf565b604080518082018252601381527f4c4545444f2050726f6a656374204552433230000000000000000000000000006020808301918252835180850190945260058452644c4545444f60d81b908401528151919291620000f091600391620001b0565b50805162000106906004906020840190620001b0565b505050620001236200011d6200015a60201b60201c565b6200015e565b6001600655600880546001600160a01b039384166001600160a01b031991821617909155600a805492909316911617905562000434565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001be90620003f7565b90600052602060002090601f016020900481019282620001e257600085556200022d565b82601f10620001fd57805160ff19168380011785556200022d565b828001600101855582156200022d579182015b828111156200022d57825182559160200191906001019062000210565b506200023b9291506200023f565b5090565b5b808211156200023b576000815560010162000240565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002ad57816000190482111562000291576200029162000256565b808516156200029f57918102915b93841c939080029062000271565b509250929050565b600082620002c65750600162000365565b81620002d55750600062000365565b8160018114620002ee5760028114620002f95762000319565b600191505062000365565b60ff8411156200030d576200030d62000256565b50506001821b62000365565b5060208310610133831016604e8410600b84101617156200033e575081810a62000365565b6200034a83836200026c565b806000190482111562000361576200036162000256565b0290505b92915050565b6000620003798383620002b5565b9392505050565b60008160001904831182151516156200039d576200039d62000256565b500290565b80516001600160a01b0381168114620003ba57600080fd5b919050565b60008060408385031215620003d357600080fd5b620003de83620003a2565b9150620003ee60208401620003a2565b90509250929050565b600181811c908216806200040c57607f821691505b602082108114156200042e57634e487b7160e01b600052602260045260246000fd5b50919050565b61215580620004446000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063715018a611610151578063b7d142e5116100c3578063d4eba61911610087578063d4eba6191461050d578063d69d2c8614610516578063dd62ed3e14610529578063f2fde38b14610562578063f894160e14610575578063ff96df44146105a357600080fd5b8063b7d142e5146104cd578063b85962e3146104e0578063bab607e5146104e9578063c50b0fb0146104fc578063c572e35c1461050557600080fd5b806395d89b411161011557806395d89b411461046f578063970e09d914610477578063a457c2d714610488578063a8d2e46a1461049b578063a9059cbb146104b1578063b19c2470146104c457600080fd5b8063715018a61461042a578063740f1e18146104325780637650186c146104435780637a4e3e3c1461044b5780638da5cb5b1461045e57600080fd5b8063313ce567116101ea57806354d59675116101ae57806354d596751461038957806355d4b56f146103a9578063607cb2ce146103b657806362759f6c146103db5780636ba4c138146103ee57806370a082311461040157600080fd5b8063313ce5671461032e578063324c6adc1461033d57806339509351146103505780633bf896811461036357806342e473151461037657600080fd5b806318160ddd1161023157806318160ddd146102ee5780631da8dc6e146102f657806320705f06146102ff57806323b872dd146103085780632f7b73de1461031b57600080fd5b806306fdde031461026e57806308a0c6b71461028c578063095ea7b3146102a15780630b102d1a146102c4578063143b1f2c146102d7575b600080fd5b6102766105ac565b6040516102839190611bfd565b60405180910390f35b61029f61029a366004611c52565b61063e565b005b6102b46102af366004611c80565b61067c565b6040519015158152602001610283565b61029f6102d2366004611cac565b610692565b6102e0600e5481565b604051908152602001610283565b6002546102e0565b6102e0600d5481565b6102e0600b5481565b6102b4610316366004611cc9565b6106e4565b61029f610329366004611cac565b61078e565b60405160128152602001610283565b6102b461034b366004611c80565b610846565b6102b461035e366004611c80565b6108da565b6102b4610371366004611c80565b610916565b61029f610384366004611c52565b6109c2565b6102e0610397366004611c52565b60156020526000908152604090205481565b6007546102b49060ff1681565b600a546001600160a01b03165b6040516001600160a01b039091168152602001610283565b6102b46103e9366004611c52565b6109f7565b6102e06103fc366004611d0a565b610b45565b6102e061040f366004611cac565b6001600160a01b031660009081526020819052604090205490565b61029f610f6c565b6008546001600160a01b03166103c3565b6102b4610fa2565b61029f610459366004611cac565b611017565b6005546001600160a01b03166103c3565b610276611063565b6009546001600160a01b03166103c3565b6102b4610496366004611c80565b611072565b60075461010090046001600160a01b03166103c3565b6102b46104bf366004611c80565b61110b565b6102e060105481565b6102e06104db366004611c52565b611118565b6102e060115481565b61029f6104f7366004611cac565b611586565b6102e060135481565b61029f611630565b6102e0600f5481565b61029f610524366004611cac565b611672565b6102e0610537366004611d7f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61029f610570366004611cac565b6116a2565b6102b4610583366004611db8565b601460209081526000928352604080842090915290825290205460ff1681565b6102e060125481565b6060600380546105bb90611dda565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790611dda565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b6007546001600160a01b036101009091041633146106775760405162461bcd60e51b815260040161066e90611e15565b60405180910390fd5b600f55565b600061068933848461173d565b50600192915050565b6007546001600160a01b036101009091041633146106c25760405162461bcd60e51b815260040161066e90611e15565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006106f1848484611861565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107765760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161066e565b610783853385840361173d565b506001949350505050565b6005546001600160a01b031633146107b85760405162461bcd60e51b815260040161066e90611e5a565b60075460ff16156108155760405162461bcd60e51b815260206004820152602160248201527f45524332303a2044414f20697320616c726561647920696e697469616c697a656044820152601960fa1b606482015260840161066e565b6007805460ff196001600160a01b0390931661010002929092166001600160a81b0319909216919091176001179055565b6005546000906001600160a01b031633146108735760405162461bcd60e51b815260040161066e90611e5a565b6010548211156108955760405162461bcd60e51b815260040161066e90611e8f565b6010546108a29083611a30565b601055600c546108be9084906108b9908590611a43565b611a4f565b6106895760405162461bcd60e51b815260040161066e90611ed1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610689918590610911908690611f16565b61173d565b6009546000906001600160a01b031633146109865760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2063616c6c6572206973206e6f7420746865204e66745661756c6044820152697420616464726573732160b01b606482015260840161066e565b600e548211156109a85760405162461bcd60e51b815260040161066e90611e8f565b600e546109b59083611a30565b600e556108be8383611a4f565b6007546001600160a01b036101009091041633146109f25760405162461bcd60e51b815260040161066e90611e15565b601355565b6007546000906001600160a01b03610100909104163314610a2a5760405162461bcd60e51b815260040161066e90611e15565b60115415801590610a3d57504260115411155b610a895760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2057616974205f64616f54696d656c6f636b2070617373657300604482015260640161066e565b600f54821115610ae75760405162461bcd60e51b815260206004820152602360248201527f45524332303a2020416d6f756e74206973206d6f7265207468616e20616c6c6f6044820152621dd95960ea1b606482015260840161066e565b600f54610af49083611a30565b600f55600754600c54610b1b9161010090046001600160a01b0316906108b9908590611a43565b610b375760405162461bcd60e51b815260040161066e90611ed1565b50600060115560015b919050565b60006014821115610bae5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a206d6178696d756d2062756c6b20636c61696d7320697320323060448201526c040c6c2e4c8e640e0cae440e8f609b1b606482015260840161066e565b600954600b546001600160a01b0390911690439082635f71dadc336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611f2e565b610c4a9190611f16565b10610ca75760405162461bcd60e51b815260206004820152602760248201527f45524332303a20646f6573206e6f74206d65657420636c61696d426c6f636b52604482015266195c5d5a5c995960ca1b606482015260840161066e565b6000805b84811015610f05576000868683818110610cc757610cc7611f47565b905060200201359050600081118015610ce1575061256981105b610d2d5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20746f6b656e496420697320696e76616c696400000000000000604482015260640161066e565b601354600090815260146020908152604080832084845290915290205460ff1615610da45760405162461bcd60e51b815260206004820152602160248201527f45524332303a20746f6b656e496420697320616c726561647920636c61696d656044820152601960fa1b606482015260840161066e565b6040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e9060240160206040518083038186803b158015610de457600080fd5b505afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c9190611f5d565b6001600160a01b0316336001600160a01b031614610e8b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a204f6e6c79205374616b6564204e4654206f776e65722063616e60448201526520636c61696d60d01b606482015260840161066e565b6000610e9682611118565b6013805460009081526014602090815260408083208784528252808320805460ff19166001908117909155935483526015909152812080549394509192610ede908490611f16565b90915550610eee90508482611ac0565b935050508080610efd90611f7a565b915050610cab565b50610f1833600c546108b9908490611a43565b610f645760405162461bcd60e51b815260206004820152601a60248201527f537175696445524332303a204d696e74696e67206661696c6564000000000000604482015260640161066e565b949350505050565b6005546001600160a01b03163314610f965760405162461bcd60e51b815260040161066e90611e5a565b610fa06000611acc565b565b6005546000906001600160a01b03163314610fcf5760405162461bcd60e51b815260040161066e90611e5a565b600a54600c54600d54610ff0926001600160a01b0316916108b99190611a43565b61100c5760405162461bcd60e51b815260040161066e90611ed1565b506000600d55600190565b6005546001600160a01b031633146110415760405162461bcd60e51b815260040161066e90611e5a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546105bb90611dda565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161066e565b611101338585840361173d565b5060019392505050565b6000610689338484611861565b60085460405163cb8af74560e01b8152600481018390526000916001600160a01b0316908290829063cb8af7459060240160606040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190611fbc565b604051635172589760e11b8152600481018690529091506000906001600160a01b0384169063a2e4b12e906024016101006040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612041565b82516020808501516040808701516013546000908152601590945290832054949550919360ff938416939182169290911690849081906123289061125e90613e806120c7565b61126990608d6120de565b61127391906120fd565b9050600060648c11611287575060c861129c565b6103e88c116112985750609661129c565b5060645b60005b6008811015611303576112e58982600881106112bd576112bd611f47565b602002015160ff168a83600881106112d7576112d7611f47565b602002015160ff1690611a43565b6112ef9089611f16565b9750806112fb81611f7a565b91505061129f565b5060648710156113165760649650611326565b6102888711156113265761028896505b606482101561133457606491505b856007148015611344575084600e145b80156113505750836004145b1561135e5760029250611549565b848614801561136c57508486145b801561137757508385145b1561138557600a9250611549565b8560071480156113955750856004145b80156113a1575084600e145b156113af5760059250611549565b8560041480156113bf5750856007145b80156113cb575084600e145b156113d95760059250611549565b8560041480156113e9575085600e145b80156113f55750846007145b156114035760059250611549565b85600e1480156114135750856007145b801561141f5750846004145b1561142d5760059250611549565b85600e14801561143d5750856004145b80156114495750846007145b156114575760059250611549565b85600414801561146657508486145b8061147b575085600414801561147b57508386145b156114895760039250611549565b85600e14801561149857508486145b806114ad575085600e1480156114ad57508386145b156114bb5760039250611549565b8560071480156114ca57508486145b806114df57508560071480156114df57508386145b156114ed5760039250611549565b8460041480156114fc57508385145b1561150a5760039250611549565b84600e14801561151957508385145b156115275760039250611549565b84600714801561153657508385145b156115445760039250611549565b600192505b6107d08284611558848b6120de565b61156291906120de565b61156c91906120de565b61157691906120fd565b9c9b505050505050505050505050565b6007546001600160a01b036101009091041633146115b65760405162461bcd60e51b815260040161066e90611e15565b60075460ff166116085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2044414f206973206e6f7420696e697469616c697a6564000000604482015260640161066e565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007546001600160a01b036101009091041633146116605760405162461bcd60e51b815260040161066e90611e15565b60125461166d9042611f16565b601155565b6007546001600160a01b036101009091041633146110415760405162461bcd60e51b815260040161066e90611e15565b6005546001600160a01b031633146116cc5760405162461bcd60e51b815260040161066e90611e5a565b6001600160a01b0381166117315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066e565b61173a81611acc565b50565b6001600160a01b03831661179f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161066e565b6001600160a01b0382166118005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161066e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161066e565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066e565b6001600160a01b0383166000908152602081905260409020548181101561199f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161066e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119d6908490611f16565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a2291815260200190565b60405180910390a350505050565b6000611a3c82846120c7565b9392505050565b6000611a3c82846120de565b600060026006541415611aa45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161066e565b6002600655611ab38383611b1e565b5060018060065592915050565b6000611a3c8284611f16565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611b745760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161066e565b8060026000828254611b869190611f16565b90915550506001600160a01b03821660009081526020819052604081208054839290611bb3908490611f16565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015611c2a57858101830151858201604001528201611c0e565b81811115611c3c576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215611c6457600080fd5b5035919050565b6001600160a01b038116811461173a57600080fd5b60008060408385031215611c9357600080fd5b8235611c9e81611c6b565b946020939093013593505050565b600060208284031215611cbe57600080fd5b8135611a3c81611c6b565b600080600060608486031215611cde57600080fd5b8335611ce981611c6b565b92506020840135611cf981611c6b565b929592945050506040919091013590565b60008060208385031215611d1d57600080fd5b823567ffffffffffffffff80821115611d3557600080fd5b818501915085601f830112611d4957600080fd5b813581811115611d5857600080fd5b8660208260051b8501011115611d6d57600080fd5b60209290920196919550909350505050565b60008060408385031215611d9257600080fd5b8235611d9d81611c6b565b91506020830135611dad81611c6b565b809150509250929050565b60008060408385031215611dcb57600080fd5b50508035926020909101359150565b600181811c90821680611dee57607f821691505b60208210811415611e0f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f45524332303a2063616c6c6572206973206e6f74207468652044414f20616464604082015264726573732160d81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f45524332303a20416d6f756e74206973206d6f7265207468616e20616c6c6f77604082015261195960f21b606082015260800190565b602080825260159082015274115490cc8c0e88135a5b9d1a5b99c819985a5b1959605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611f2957611f29611f00565b500190565b600060208284031215611f4057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f6f57600080fd5b8151611a3c81611c6b565b6000600019821415611f8e57611f8e611f00565b5060010190565b634e487b7160e01b600052604160045260246000fd5b805160ff81168114610b4057600080fd5b600060608284031215611fce57600080fd5b82601f830112611fdd57600080fd5b6040516060810181811067ffffffffffffffff8211171561200057612000611f95565b60405280606084018581111561201557600080fd5b845b818110156120365761202881611fab565b835260209283019201612017565b509195945050505050565b600061010080838503121561205557600080fd5b83601f84011261206457600080fd5b60405181810181811067ffffffffffffffff8211171561208657612086611f95565b60405290830190808583111561209b57600080fd5b845b838110156120bc576120ae81611fab565b82526020918201910161209d565b509095945050505050565b6000828210156120d9576120d9611f00565b500390565b60008160001904831182151516156120f8576120f8611f00565b500290565b60008261211a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e3fc0117305ee0c82e18c2bfe0a2d4a00cd5c5b33813f37bbaab82767d3daf3764736f6c63430008090033000000000000000000000000be5c953dd0ddb0ce033a98f36c981f1b74d3b33f000000000000000000000000b109173ab57dab7f954ef8f10d87a5bfdb740eeb

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102695760003560e01c8063715018a611610151578063b7d142e5116100c3578063d4eba61911610087578063d4eba6191461050d578063d69d2c8614610516578063dd62ed3e14610529578063f2fde38b14610562578063f894160e14610575578063ff96df44146105a357600080fd5b8063b7d142e5146104cd578063b85962e3146104e0578063bab607e5146104e9578063c50b0fb0146104fc578063c572e35c1461050557600080fd5b806395d89b411161011557806395d89b411461046f578063970e09d914610477578063a457c2d714610488578063a8d2e46a1461049b578063a9059cbb146104b1578063b19c2470146104c457600080fd5b8063715018a61461042a578063740f1e18146104325780637650186c146104435780637a4e3e3c1461044b5780638da5cb5b1461045e57600080fd5b8063313ce567116101ea57806354d59675116101ae57806354d596751461038957806355d4b56f146103a9578063607cb2ce146103b657806362759f6c146103db5780636ba4c138146103ee57806370a082311461040157600080fd5b8063313ce5671461032e578063324c6adc1461033d57806339509351146103505780633bf896811461036357806342e473151461037657600080fd5b806318160ddd1161023157806318160ddd146102ee5780631da8dc6e146102f657806320705f06146102ff57806323b872dd146103085780632f7b73de1461031b57600080fd5b806306fdde031461026e57806308a0c6b71461028c578063095ea7b3146102a15780630b102d1a146102c4578063143b1f2c146102d7575b600080fd5b6102766105ac565b6040516102839190611bfd565b60405180910390f35b61029f61029a366004611c52565b61063e565b005b6102b46102af366004611c80565b61067c565b6040519015158152602001610283565b61029f6102d2366004611cac565b610692565b6102e0600e5481565b604051908152602001610283565b6002546102e0565b6102e0600d5481565b6102e0600b5481565b6102b4610316366004611cc9565b6106e4565b61029f610329366004611cac565b61078e565b60405160128152602001610283565b6102b461034b366004611c80565b610846565b6102b461035e366004611c80565b6108da565b6102b4610371366004611c80565b610916565b61029f610384366004611c52565b6109c2565b6102e0610397366004611c52565b60156020526000908152604090205481565b6007546102b49060ff1681565b600a546001600160a01b03165b6040516001600160a01b039091168152602001610283565b6102b46103e9366004611c52565b6109f7565b6102e06103fc366004611d0a565b610b45565b6102e061040f366004611cac565b6001600160a01b031660009081526020819052604090205490565b61029f610f6c565b6008546001600160a01b03166103c3565b6102b4610fa2565b61029f610459366004611cac565b611017565b6005546001600160a01b03166103c3565b610276611063565b6009546001600160a01b03166103c3565b6102b4610496366004611c80565b611072565b60075461010090046001600160a01b03166103c3565b6102b46104bf366004611c80565b61110b565b6102e060105481565b6102e06104db366004611c52565b611118565b6102e060115481565b61029f6104f7366004611cac565b611586565b6102e060135481565b61029f611630565b6102e0600f5481565b61029f610524366004611cac565b611672565b6102e0610537366004611d7f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61029f610570366004611cac565b6116a2565b6102b4610583366004611db8565b601460209081526000928352604080842090915290825290205460ff1681565b6102e060125481565b6060600380546105bb90611dda565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790611dda565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b6007546001600160a01b036101009091041633146106775760405162461bcd60e51b815260040161066e90611e15565b60405180910390fd5b600f55565b600061068933848461173d565b50600192915050565b6007546001600160a01b036101009091041633146106c25760405162461bcd60e51b815260040161066e90611e15565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006106f1848484611861565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107765760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161066e565b610783853385840361173d565b506001949350505050565b6005546001600160a01b031633146107b85760405162461bcd60e51b815260040161066e90611e5a565b60075460ff16156108155760405162461bcd60e51b815260206004820152602160248201527f45524332303a2044414f20697320616c726561647920696e697469616c697a656044820152601960fa1b606482015260840161066e565b6007805460ff196001600160a01b0390931661010002929092166001600160a81b0319909216919091176001179055565b6005546000906001600160a01b031633146108735760405162461bcd60e51b815260040161066e90611e5a565b6010548211156108955760405162461bcd60e51b815260040161066e90611e8f565b6010546108a29083611a30565b601055600c546108be9084906108b9908590611a43565b611a4f565b6106895760405162461bcd60e51b815260040161066e90611ed1565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610689918590610911908690611f16565b61173d565b6009546000906001600160a01b031633146109865760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2063616c6c6572206973206e6f7420746865204e66745661756c6044820152697420616464726573732160b01b606482015260840161066e565b600e548211156109a85760405162461bcd60e51b815260040161066e90611e8f565b600e546109b59083611a30565b600e556108be8383611a4f565b6007546001600160a01b036101009091041633146109f25760405162461bcd60e51b815260040161066e90611e15565b601355565b6007546000906001600160a01b03610100909104163314610a2a5760405162461bcd60e51b815260040161066e90611e15565b60115415801590610a3d57504260115411155b610a895760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2057616974205f64616f54696d656c6f636b2070617373657300604482015260640161066e565b600f54821115610ae75760405162461bcd60e51b815260206004820152602360248201527f45524332303a2020416d6f756e74206973206d6f7265207468616e20616c6c6f6044820152621dd95960ea1b606482015260840161066e565b600f54610af49083611a30565b600f55600754600c54610b1b9161010090046001600160a01b0316906108b9908590611a43565b610b375760405162461bcd60e51b815260040161066e90611ed1565b50600060115560015b919050565b60006014821115610bae5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a206d6178696d756d2062756c6b20636c61696d7320697320323060448201526c040c6c2e4c8e640e0cae440e8f609b1b606482015260840161066e565b600954600b546001600160a01b0390911690439082635f71dadc336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611f2e565b610c4a9190611f16565b10610ca75760405162461bcd60e51b815260206004820152602760248201527f45524332303a20646f6573206e6f74206d65657420636c61696d426c6f636b52604482015266195c5d5a5c995960ca1b606482015260840161066e565b6000805b84811015610f05576000868683818110610cc757610cc7611f47565b905060200201359050600081118015610ce1575061256981105b610d2d5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20746f6b656e496420697320696e76616c696400000000000000604482015260640161066e565b601354600090815260146020908152604080832084845290915290205460ff1615610da45760405162461bcd60e51b815260206004820152602160248201527f45524332303a20746f6b656e496420697320616c726561647920636c61696d656044820152601960fa1b606482015260840161066e565b6040516331a9108f60e11b8152600481018290526001600160a01b03851690636352211e9060240160206040518083038186803b158015610de457600080fd5b505afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c9190611f5d565b6001600160a01b0316336001600160a01b031614610e8b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a204f6e6c79205374616b6564204e4654206f776e65722063616e60448201526520636c61696d60d01b606482015260840161066e565b6000610e9682611118565b6013805460009081526014602090815260408083208784528252808320805460ff19166001908117909155935483526015909152812080549394509192610ede908490611f16565b90915550610eee90508482611ac0565b935050508080610efd90611f7a565b915050610cab565b50610f1833600c546108b9908490611a43565b610f645760405162461bcd60e51b815260206004820152601a60248201527f537175696445524332303a204d696e74696e67206661696c6564000000000000604482015260640161066e565b949350505050565b6005546001600160a01b03163314610f965760405162461bcd60e51b815260040161066e90611e5a565b610fa06000611acc565b565b6005546000906001600160a01b03163314610fcf5760405162461bcd60e51b815260040161066e90611e5a565b600a54600c54600d54610ff0926001600160a01b0316916108b99190611a43565b61100c5760405162461bcd60e51b815260040161066e90611ed1565b506000600d55600190565b6005546001600160a01b031633146110415760405162461bcd60e51b815260040161066e90611e5a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546105bb90611dda565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161066e565b611101338585840361173d565b5060019392505050565b6000610689338484611861565b60085460405163cb8af74560e01b8152600481018390526000916001600160a01b0316908290829063cb8af7459060240160606040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190611fbc565b604051635172589760e11b8152600481018690529091506000906001600160a01b0384169063a2e4b12e906024016101006040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612041565b82516020808501516040808701516013546000908152601590945290832054949550919360ff938416939182169290911690849081906123289061125e90613e806120c7565b61126990608d6120de565b61127391906120fd565b9050600060648c11611287575060c861129c565b6103e88c116112985750609661129c565b5060645b60005b6008811015611303576112e58982600881106112bd576112bd611f47565b602002015160ff168a83600881106112d7576112d7611f47565b602002015160ff1690611a43565b6112ef9089611f16565b9750806112fb81611f7a565b91505061129f565b5060648710156113165760649650611326565b6102888711156113265761028896505b606482101561133457606491505b856007148015611344575084600e145b80156113505750836004145b1561135e5760029250611549565b848614801561136c57508486145b801561137757508385145b1561138557600a9250611549565b8560071480156113955750856004145b80156113a1575084600e145b156113af5760059250611549565b8560041480156113bf5750856007145b80156113cb575084600e145b156113d95760059250611549565b8560041480156113e9575085600e145b80156113f55750846007145b156114035760059250611549565b85600e1480156114135750856007145b801561141f5750846004145b1561142d5760059250611549565b85600e14801561143d5750856004145b80156114495750846007145b156114575760059250611549565b85600414801561146657508486145b8061147b575085600414801561147b57508386145b156114895760039250611549565b85600e14801561149857508486145b806114ad575085600e1480156114ad57508386145b156114bb5760039250611549565b8560071480156114ca57508486145b806114df57508560071480156114df57508386145b156114ed5760039250611549565b8460041480156114fc57508385145b1561150a5760039250611549565b84600e14801561151957508385145b156115275760039250611549565b84600714801561153657508385145b156115445760039250611549565b600192505b6107d08284611558848b6120de565b61156291906120de565b61156c91906120de565b61157691906120fd565b9c9b505050505050505050505050565b6007546001600160a01b036101009091041633146115b65760405162461bcd60e51b815260040161066e90611e15565b60075460ff166116085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2044414f206973206e6f7420696e697469616c697a6564000000604482015260640161066e565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007546001600160a01b036101009091041633146116605760405162461bcd60e51b815260040161066e90611e15565b60125461166d9042611f16565b601155565b6007546001600160a01b036101009091041633146110415760405162461bcd60e51b815260040161066e90611e15565b6005546001600160a01b031633146116cc5760405162461bcd60e51b815260040161066e90611e5a565b6001600160a01b0381166117315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066e565b61173a81611acc565b50565b6001600160a01b03831661179f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161066e565b6001600160a01b0382166118005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161066e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161066e565b6001600160a01b0382166119275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066e565b6001600160a01b0383166000908152602081905260409020548181101561199f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161066e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906119d6908490611f16565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a2291815260200190565b60405180910390a350505050565b6000611a3c82846120c7565b9392505050565b6000611a3c82846120de565b600060026006541415611aa45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161066e565b6002600655611ab38383611b1e565b5060018060065592915050565b6000611a3c8284611f16565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611b745760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161066e565b8060026000828254611b869190611f16565b90915550506001600160a01b03821660009081526020819052604081208054839290611bb3908490611f16565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015611c2a57858101830151858201604001528201611c0e565b81811115611c3c576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215611c6457600080fd5b5035919050565b6001600160a01b038116811461173a57600080fd5b60008060408385031215611c9357600080fd5b8235611c9e81611c6b565b946020939093013593505050565b600060208284031215611cbe57600080fd5b8135611a3c81611c6b565b600080600060608486031215611cde57600080fd5b8335611ce981611c6b565b92506020840135611cf981611c6b565b929592945050506040919091013590565b60008060208385031215611d1d57600080fd5b823567ffffffffffffffff80821115611d3557600080fd5b818501915085601f830112611d4957600080fd5b813581811115611d5857600080fd5b8660208260051b8501011115611d6d57600080fd5b60209290920196919550909350505050565b60008060408385031215611d9257600080fd5b8235611d9d81611c6b565b91506020830135611dad81611c6b565b809150509250929050565b60008060408385031215611dcb57600080fd5b50508035926020909101359150565b600181811c90821680611dee57607f821691505b60208210811415611e0f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f45524332303a2063616c6c6572206973206e6f74207468652044414f20616464604082015264726573732160d81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f45524332303a20416d6f756e74206973206d6f7265207468616e20616c6c6f77604082015261195960f21b606082015260800190565b602080825260159082015274115490cc8c0e88135a5b9d1a5b99c819985a5b1959605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611f2957611f29611f00565b500190565b600060208284031215611f4057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f6f57600080fd5b8151611a3c81611c6b565b6000600019821415611f8e57611f8e611f00565b5060010190565b634e487b7160e01b600052604160045260246000fd5b805160ff81168114610b4057600080fd5b600060608284031215611fce57600080fd5b82601f830112611fdd57600080fd5b6040516060810181811067ffffffffffffffff8211171561200057612000611f95565b60405280606084018581111561201557600080fd5b845b818110156120365761202881611fab565b835260209283019201612017565b509195945050505050565b600061010080838503121561205557600080fd5b83601f84011261206457600080fd5b60405181810181811067ffffffffffffffff8211171561208657612086611f95565b60405290830190808583111561209b57600080fd5b845b838110156120bc576120ae81611fab565b82526020918201910161209d565b509095945050505050565b6000828210156120d9576120d9611f00565b500390565b60008160001904831182151516156120f8576120f8611f00565b500290565b60008261211a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e3fc0117305ee0c82e18c2bfe0a2d4a00cd5c5b33813f37bbaab82767d3daf3764736f6c63430008090033

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

000000000000000000000000be5c953dd0ddb0ce033a98f36c981f1b74d3b33f000000000000000000000000b109173ab57dab7f954ef8f10d87a5bfdb740eeb

-----Decoded View---------------
Arg [0] : _nftAddress (address): 0xBE5C953DD0ddB0Ce033a98f36C981F1B74d3B33f
Arg [1] : _raffleAddress (address): 0xb109173Ab57Dab7F954Ef8F10D87a5bFDB740EEB

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000be5c953dd0ddb0ce033a98f36c981f1b74d3b33f
Arg [1] : 000000000000000000000000b109173ab57dab7f954ef8f10d87a5bfdb740eeb


Deployed Bytecode Sourcemap

29281:8496:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33033:101;;;;;;:::i;:::-;;:::i;:::-;;20531:169;;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;20531:169:0;1257:187:1;33142:102:0;;;;;;:::i;:::-;;:::i;29710:68::-;;;;;;;;;1847:25:1;;;1835:2;1820:18;29710:68:0;1701:177:1;19484:108:0;19572:12;;19484:108;;29666:37;;;;;;29548:40;;;;;;21182:492;;;;;;:::i;:::-;;:::i;31950:206::-;;;;;;:::i;:::-;;:::i;19326:93::-;;;19409:2;2486:36:1;;2474:2;2459:18;19326:93:0;2344:184:1;31577:365:0;;;;;;:::i;:::-;;:::i;22083:215::-;;;;;;:::i;:::-;;:::i;31189:376::-;;;;;;:::i;:::-;;:::i;32929:88::-;;;;;;:::i;:::-;;:::i;30155:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;29375:34;;;;;;;;;37683:91;37755:11;;-1:-1:-1;;;;;37755:11:0;37683:91;;;-1:-1:-1;;;;;2697:32:1;;;2679:51;;2667:2;2652:18;37683:91:0;2533:203:1;32459:458:0;;;;;;:::i;:::-;;:::i;33535:1108::-;;;;;;:::i;:::-;;:::i;19655:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;19756:18:0;19729:7;19756:18;;;;;;;;;;;;19655:127;12168:94;;;:::i;37479:85::-;37548:8;;-1:-1:-1;;;;;37548:8:0;37479:85;;30853:211;;;:::i;31076:101::-;;;;;;:::i;:::-;;:::i;11517:87::-;11590:6;;-1:-1:-1;;;;;11590:6:0;11517:87;;18583:104;;;:::i;37576:95::-;37650:13;;-1:-1:-1;;;;;37650:13:0;37576:95;;22801:413;;;;;;:::i;:::-;;:::i;37382:85::-;37451:8;;;;;-1:-1:-1;;;;;37451:8:0;37382:85;;19995:175;;;;;;:::i;:::-;;:::i;29905:46::-;;;;;;34659:2711;;;;;;:::i;:::-;;:::i;29958:23::-;;;;;;32168:164;;;;;;:::i;:::-;;:::i;30034:22::-;;;;;;32344:107;;;:::i;29809:75::-;;;;;;33252:104;;;;;;:::i;:::-;;:::i;20233:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20349:18:0;;;20322:7;20349:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20233:151;12417:192;;;;;;:::i;:::-;;:::i;30065:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;29988:39;;;;;;18364:100;18418:13;18451:5;18444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:100;:::o;33033:101::-;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;;;;;;;;;33099:17:::1;:27:::0;33033:101::o;20531:169::-;20614:4;20631:39;10385:10;20654:7;20663:6;20631:8;:39::i;:::-;-1:-1:-1;20688:4:0;20531:169;;;;:::o;33142:102::-;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;33214:8:::1;:22:::0;;-1:-1:-1;;;;;;33214:22:0::1;-1:-1:-1::0;;;;;33214:22:0;;;::::1;::::0;;;::::1;::::0;;33142:102::o;21182:492::-;21322:4;21339:36;21349:6;21357:9;21368:6;21339:9;:36::i;:::-;-1:-1:-1;;;;;21415:19:0;;21388:24;21415:19;;;:11;:19;;;;;;;;10385:10;21415:33;;;;;;;;21467:26;;;;21459:79;;;;-1:-1:-1;;;21459:79:0;;5000:2:1;21459:79:0;;;4982:21:1;5039:2;5019:18;;;5012:30;5078:34;5058:18;;;5051:62;-1:-1:-1;;;5129:18:1;;;5122:38;5177:19;;21459:79:0;4798:404:1;21459:79:0;21574:57;21583:6;10385:10;21624:6;21605:16;:25;21574:8;:57::i;:::-;-1:-1:-1;21662:4:0;;21182:492;-1:-1:-1;;;;21182:492:0:o;31950:206::-;11590:6;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;32031:14:::1;::::0;::::1;;32030:15;32022:61;;;::::0;-1:-1:-1;;;32022:61:0;;5770:2:1;32022:61:0::1;::::0;::::1;5752:21:1::0;5809:2;5789:18;;;5782:30;5848:34;5828:18;;;5821:62;-1:-1:-1;;;5899:18:1;;;5892:31;5940:19;;32022:61:0::1;5568:397:1::0;32022:61:0::1;32094:8;:22:::0;;-1:-1:-1;;;;;;;32094:22:0;;::::1;;;32127:21:::0;;;;-1:-1:-1;;;;;;32127:21:0;;;;;;;32094:8:::1;32127:21;::::0;;31950:206::o;31577:365::-;11590:6;;31654:4;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;31690:23:::1;;31679:7;:34;;31671:81;;;;-1:-1:-1::0;;;31671:81:0::1;;;;;;;:::i;:::-;31789:23;::::0;:36:::1;::::0;31817:7;31789:27:::1;:36::i;:::-;31763:23;:62:::0;31876:8:::1;::::0;31844:42:::1;::::0;31854:8;;31864:21:::1;::::0;:7;;:11:::1;:21::i;:::-;31844:9;:42::i;:::-;31836:76;;;;-1:-1:-1::0;;;31836:76:0::1;;;;;;;:::i;22083:215::-:0;10385:10;22171:4;22220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22220:34:0;;;;;;;;;;22171:4;;22188:80;;22211:7;;22220:47;;22257:10;;22220:47;:::i;:::-;22188:8;:80::i;31189:376::-;30401:13;;31276:4;;-1:-1:-1;;;;;30401:13:0;10385:10;30401:29;30393:84;;;;-1:-1:-1;;;30393:84:0;;7190:2:1;30393:84:0;;;7172:21:1;7229:2;7209:18;;;7202:30;7268:34;7248:18;;;7241:62;-1:-1:-1;;;7319:18:1;;;7312:40;7369:19;;30393:84:0;6988:406:1;30393:84:0;31341:20:::1;;31330:7;:31;;31322:78;;;;-1:-1:-1::0;;;31322:78:0::1;;;;;;;:::i;:::-;31434:20;::::0;:33:::1;::::0;31459:7;31434:24:::1;:33::i;:::-;31411:20;:56:::0;31486:23:::1;31496:3:::0;31501:7;31486:9:::1;:23::i;32929:88::-:0;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;32993:6:::1;:16:::0;32929:88::o;32459:458::-;30259:8;;32514:4;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;32539:11:::1;::::0;:16;;::::1;::::0;:50:::1;;;32574:15;32559:11;;:30;;32539:50;32531:94;;;::::0;-1:-1:-1;;;32531:94:0;;7601:2:1;32531:94:0::1;::::0;::::1;7583:21:1::0;7640:2;7620:18;;;7613:30;7679:33;7659:18;;;7652:61;7730:18;;32531:94:0::1;7399:355:1::0;32531:94:0::1;32655:17;;32644:7;:28;;32636:76;;;::::0;-1:-1:-1;;;32636:76:0;;7961:2:1;32636:76:0::1;::::0;::::1;7943:21:1::0;8000:2;7980:18;;;7973:30;8039:34;8019:18;;;8012:62;-1:-1:-1;;;8090:18:1;;;8083:33;8133:19;;32636:76:0::1;7759:399:1::0;32636:76:0::1;32743:17;::::0;:30:::1;::::0;32765:7;32743:21:::1;:30::i;:::-;32723:17;:50:::0;32803:8:::1;::::0;32825::::1;::::0;32793:42:::1;::::0;32803:8:::1;::::0;::::1;-1:-1:-1::0;;;;;32803:8:0::1;::::0;32813:21:::1;::::0;:7;;:11:::1;:21::i;32793:42::-;32785:76;;;;-1:-1:-1::0;;;32785:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;32886:1:0::1;32872:11;:15:::0;32905:4:::1;30336:1;32459:458:::0;;;:::o;33535:1108::-;33595:4;33640:2;33620:22;;;33612:80;;;;-1:-1:-1;;;33612:80:0;;8365:2:1;33612:80:0;;;8347:21:1;8404:2;8384:18;;;8377:30;8443:34;8423:18;;;8416:62;-1:-1:-1;;;8494:18:1;;;8487:43;8547:19;;33612:80:0;8163:409:1;33612:80:0;33740:13;;33835:19;;-1:-1:-1;;;;;33740:13:0;;;;33857:12;;33740:13;33803:15;10385:10;33803:29;;-1:-1:-1;;;;;;33803:29:0;;;;;;;-1:-1:-1;;;;;2697:32:1;;;33803:29:0;;;2679:51:1;2652:18;;33803:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;:66;33795:118;;;;-1:-1:-1;;;33795:118:0;;8968:2:1;33795:118:0;;;8950:21:1;9007:2;8987:18;;;8980:30;9046:34;9026:18;;;9019:62;-1:-1:-1;;;9097:18:1;;;9090:37;9144:19;;33795:118:0;8766:403:1;33795:118:0;33924:10;;33945:568;33960:18;;;33945:568;;;34000:12;34015:9;;34025:1;34015:12;;;;;;;:::i;:::-;;;;;;;34000:27;;34060:1;34050:7;:11;:29;;;;;34075:4;34065:7;:14;34050:29;34042:67;;;;-1:-1:-1;;;34042:67:0;;9508:2:1;34042:67:0;;;9490:21:1;9547:2;9527:18;;;9520:30;9586:27;9566:18;;;9559:55;9631:18;;34042:67:0;9306:349:1;34042:67:0;34140:6;;34133:14;;;;:6;:14;;;;;;;;:23;;;;;;;;;;;:32;34125:78;;;;-1:-1:-1;;;34125:78:0;;9862:2:1;34125:78:0;;;9844:21:1;9901:2;9881:18;;;9874:30;9940:34;9920:18;;;9913:62;-1:-1:-1;;;9991:18:1;;;9984:31;10032:19;;34125:78:0;9660:397:1;34125:78:0;34242:21;;-1:-1:-1;;;34242:21:0;;;;;1847:25:1;;;-1:-1:-1;;;;;34242:12:0;;;;;1820:18:1;;34242:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34226:37:0;10385:10;-1:-1:-1;;;;;34226:37:0;;34218:88;;;;-1:-1:-1;;;34218:88:0;;10520:2:1;34218:88:0;;;10502:21:1;10559:2;10539:18;;;10532:30;10598:34;10578:18;;;10571:62;-1:-1:-1;;;10649:18:1;;;10642:36;10695:19;;34218:88:0;10318:402:1;34218:88:0;34335:11;34349:20;34361:7;34349:11;:20::i;:::-;34392:6;;;34385:14;;;;:6;:14;;;;;;;;:23;;;;;;;;:30;;-1:-1:-1;;34385:30:0;34411:4;34385:30;;;;;;34449:6;;34438:18;;:10;:18;;;;;:23;;34335:34;;-1:-1:-1;34411:4:0;;34438:23;;34411:4;;34438:23;:::i;:::-;;;;-1:-1:-1;34484:17:0;;-1:-1:-1;34484:5:0;34494:6;34484:9;:17::i;:::-;34476:25;;33985:528;;33980:3;;;;;:::i;:::-;;;;33945:568;;;-1:-1:-1;34531:44:0;10385:10;34565:8;;34555:19;;:5;;:9;:19::i;34531:44::-;34523:83;;;;-1:-1:-1;;;34523:83:0;;11067:2:1;34523:83:0;;;11049:21:1;11106:2;11086:18;;;11079:30;11145:28;11125:18;;;11118:56;11191:18;;34523:83:0;10865:350:1;34523:83:0;34630:5;33535:1108;-1:-1:-1;;;;33535:1108:0:o;12168:94::-;11590:6;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;12233:21:::1;12251:1;12233:9;:21::i;:::-;12168:94::o:0;30853:211::-;11590:6;;30908:4;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;30943:11:::1;::::0;30972:8:::1;::::0;30956:11:::1;::::0;30933:49:::1;::::0;-1:-1:-1;;;;;30943:11:0::1;::::0;30956:25:::1;::::0;:11;:15:::1;:25::i;30933:49::-;30925:83;;;;-1:-1:-1::0;;;30925:83:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;31033:1:0::1;31019:11;:15:::0;31052:4:::1;30853:211:::0;:::o;31076:101::-;11590:6;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;31147:13:::1;:22:::0;;-1:-1:-1;;;;;;31147:22:0::1;-1:-1:-1::0;;;;;31147:22:0;;;::::1;::::0;;;::::1;::::0;;31076:101::o;18583:104::-;18639:13;18672:7;18665:14;;;;;:::i;22801:413::-;10385:10;22894:4;22938:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22938:34:0;;;;;;;;;;22991:35;;;;22983:85;;;;-1:-1:-1;;;22983:85:0;;11422:2:1;22983:85:0;;;11404:21:1;11461:2;11441:18;;;11434:30;11500:34;11480:18;;;11473:62;-1:-1:-1;;;11551:18:1;;;11544:35;11596:19;;22983:85:0;11220:401:1;22983:85:0;23104:67;10385:10;23127:7;23155:15;23136:16;:34;23104:8;:67::i;:::-;-1:-1:-1;23202:4:0;;22801:413;-1:-1:-1;;;22801:413:0:o;19995:175::-;20081:4;20098:42;10385:10;20122:9;20133:6;20098:9;:42::i;34659:2711::-;34767:8;;34824:32;;-1:-1:-1;;;34824:32:0;;;;;1847:25:1;;;34716:4:0;;-1:-1:-1;;;;;34767:8:0;;34716:4;;34767:8;;34824:22;;1820:18:1;;34824:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34891:22;;-1:-1:-1;;;34891:22:0;;;;;1847:25:1;;;34795:61:0;;-1:-1:-1;34867:21:0;;-1:-1:-1;;;;;34891:12:0;;;;;1820:18:1;;34891:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34978:13;;;35016;;;;35053;;;;;35147:6;;34942:13;35136:18;;;:10;:18;;;;;;;34867:46;;-1:-1:-1;34942:13:0;;34966:25;;;;;35002:27;;;;35040:26;;;;34942:13;;;;35158:4;;35128:26;;:5;:26;:::i;:::-;35121:34;;:3;:34;:::i;:::-;:41;;;;:::i;:::-;35103:59;;35198:18;35243:3;35231:8;:15;35227:193;;-1:-1:-1;35279:3:0;35227:193;;;35316:4;35304:8;:16;35300:120;;-1:-1:-1;35353:3:0;35300:120;;;-1:-1:-1;35405:3:0;35300:120;35445:6;35440:98;35457:1;35455;:3;35440:98;;;35492:34;35516:5;35522:1;35516:8;;;;;;;:::i;:::-;;;;;35511:14;;35497:5;35503:1;35497:8;;;;;;;:::i;:::-;;;;;35492:14;;;:18;:34::i;:::-;35480:46;;;;:::i;:::-;;-1:-1:-1;35460:3:0;;;;:::i;:::-;;;;35440:98;;;;35563:3;35552:8;:14;35548:128;;;35594:3;35583:14;;35548:128;;;35630:3;35619:8;:14;35615:61;;;35661:3;35650:14;;35615:61;35703:3;35690:10;:16;35686:65;;;35736:3;35723:16;;35686:65;35767:4;35775:1;35767:9;:25;;;;;35780:6;35790:2;35780:12;35767:25;:39;;;;;35796:5;35805:1;35796:10;35767:39;35763:1520;;;35837:1;35824:14;;35763:1520;;;35868:6;35860:4;:14;:32;;;;;35886:6;35878:4;:14;35860:32;:51;;;;;35906:5;35896:6;:15;35860:51;35856:1427;;;35941:2;35928:15;;35856:1427;;;35965:4;35973:1;35965:9;:22;;;;;35978:4;35986:1;35978:9;35965:22;:38;;;;;35991:6;36001:2;35991:12;35965:38;35961:1322;;;36045:1;36032:14;;35961:1322;;;36068:4;36076:1;36068:9;:22;;;;;36081:4;36089:1;36081:9;36068:22;:38;;;;;36094:6;36104:2;36094:12;36068:38;36064:1219;;;36160:1;36147:14;;36064:1219;;;36183:4;36191:1;36183:9;:23;;;;;36196:4;36204:2;36196:10;36183:23;:38;;;;;36210:6;36220:1;36210:11;36183:38;36179:1104;;;36275:1;36262:14;;36179:1104;;;36298:4;36306:2;36298:10;:23;;;;;36312:4;36320:1;36312:9;36298:23;:38;;;;;36325:6;36335:1;36325:11;36298:38;36294:989;;;36398:1;36385:14;;36294:989;;;36421:4;36429:2;36421:10;:23;;;;;36435:4;36443:1;36435:9;36421:23;:38;;;;;36448:6;36458:1;36448:11;36421:38;36417:866;;;36537:1;36524:14;;36417:866;;;36561:4;36569:1;36561:9;:27;;;;;36582:6;36574:4;:14;36561:27;36560:61;;;;36594:4;36602:1;36594:9;:26;;;;;36615:5;36607:4;:13;36594:26;36556:727;;;36663:1;36650:14;;36556:727;;;36687:4;36695:2;36687:10;:28;;;;;36709:6;36701:4;:14;36687:28;36686:63;;;;36721:4;36729:2;36721:10;:27;;;;;36743:5;36735:4;:13;36721:27;36682:601;;;36779:1;36766:14;;36682:601;;;36803:4;36811:1;36803:9;:27;;;;;36824:6;36816:4;:14;36803:27;36802:61;;;;36836:4;36844:1;36836:9;:26;;;;;36857:5;36849:4;:13;36836:26;36798:485;;;36893:1;36880:14;;36798:485;;;36916:6;36926:1;36916:11;:30;;;;;36941:5;36931:6;:15;36916:30;36912:371;;;36990:1;36977:14;;36912:371;;;37013:6;37023:2;37013:12;:31;;;;;37039:5;37029:6;:15;37013:31;37009:274;;;37095:1;37082:14;;37009:274;;;37118:6;37128:1;37118:11;:30;;;;;37143:5;37133:6;:15;37118:30;37114:169;;;37211:1;37198:14;;37114:169;;;37270:1;37257:14;;37114:169;37356:4;37342:10;37329;37302:24;37313:13;37302:8;:24;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;37301:59;;;;:::i;:::-;37293:67;34659:2711;-1:-1:-1;;;;;;;;;;;;34659:2711:0:o;32168:164::-;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;32243:14:::1;::::0;::::1;;32235:56;;;::::0;-1:-1:-1;;;32235:56:0;;14246:2:1;32235:56:0::1;::::0;::::1;14228:21:1::0;14285:2;14265:18;;;14258:30;14324:31;14304:18;;;14297:59;14373:18;;32235:56:0::1;14044:353:1::0;32235:56:0::1;32302:8;:22:::0;;-1:-1:-1;;;;;32302:22:0;;::::1;;;-1:-1:-1::0;;;;;;32302:22:0;;::::1;::::0;;;::::1;::::0;;32168:164::o;32344:107::-;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;:::-;32427:16:::1;::::0;32409:34:::1;::::0;:15:::1;:34;:::i;:::-;32395:11;:48:::0;32344:107::o;33252:104::-;30259:8;;-1:-1:-1;;;;;30259:8:0;;;;;10385:10;30259:24;30251:74;;;;-1:-1:-1;;;30251:74:0;;;;;;;:::i;12417:192::-;11590:6;;-1:-1:-1;;;;;11590:6:0;10385:10;11737:23;11729:68;;;;-1:-1:-1;;;11729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12506:22:0;::::1;12498:73;;;::::0;-1:-1:-1;;;12498:73:0;;14604:2:1;12498:73:0::1;::::0;::::1;14586:21:1::0;14643:2;14623:18;;;14616:30;14682:34;14662:18;;;14655:62;-1:-1:-1;;;14733:18:1;;;14726:36;14779:19;;12498:73:0::1;14402:402:1::0;12498:73:0::1;12582:19;12592:8;12582:9;:19::i;:::-;12417:192:::0;:::o;26485:380::-;-1:-1:-1;;;;;26621:19:0;;26613:68;;;;-1:-1:-1;;;26613:68:0;;15011:2:1;26613:68:0;;;14993:21:1;15050:2;15030:18;;;15023:30;15089:34;15069:18;;;15062:62;-1:-1:-1;;;15140:18:1;;;15133:34;15184:19;;26613:68:0;14809:400:1;26613:68:0;-1:-1:-1;;;;;26700:21:0;;26692:68;;;;-1:-1:-1;;;26692:68:0;;15416:2:1;26692:68:0;;;15398:21:1;15455:2;15435:18;;;15428:30;15494:34;15474:18;;;15467:62;-1:-1:-1;;;15545:18:1;;;15538:32;15587:19;;26692:68:0;15214:398:1;26692:68:0;-1:-1:-1;;;;;26773:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26825:32;;1847:25:1;;;26825:32:0;;1820:18:1;26825:32:0;;;;;;;26485:380;;;:::o;23704:733::-;-1:-1:-1;;;;;23844:20:0;;23836:70;;;;-1:-1:-1;;;23836:70:0;;15819:2:1;23836:70:0;;;15801:21:1;15858:2;15838:18;;;15831:30;15897:34;15877:18;;;15870:62;-1:-1:-1;;;15948:18:1;;;15941:35;15993:19;;23836:70:0;15617:401:1;23836:70:0;-1:-1:-1;;;;;23925:23:0;;23917:71;;;;-1:-1:-1;;;23917:71:0;;16225:2:1;23917:71:0;;;16207:21:1;16264:2;16244:18;;;16237:30;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:18:1;;;16347:33;16397:19;;23917:71:0;16023:399:1;23917:71:0;-1:-1:-1;;;;;24085:17:0;;24061:21;24085:17;;;;;;;;;;;24121:23;;;;24113:74;;;;-1:-1:-1;;;24113:74:0;;16629:2:1;24113:74:0;;;16611:21:1;16668:2;16648:18;;;16641:30;16707:34;16687:18;;;16680:62;-1:-1:-1;;;16758:18:1;;;16751:36;16804:19;;24113:74:0;16427:402:1;24113:74:0;-1:-1:-1;;;;;24223:17:0;;;:9;:17;;;;;;;;;;;24243:22;;;24223:42;;24287:20;;;;;;;;:30;;24259:6;;24223:9;24287:30;;24259:6;;24287:30;:::i;:::-;;;;;;;;24352:9;-1:-1:-1;;;;;24335:35:0;24344:6;-1:-1:-1;;;;;24335:35:0;;24363:6;24335:35;;;;1847:25:1;;1835:2;1820:18;;1701:177;24335:35:0;;;;;;;;23825:612;23704:733;;;:::o;5896:98::-;5954:7;5981:5;5985:1;5981;:5;:::i;:::-;5974:12;5896:98;-1:-1:-1;;;5896:98:0:o;6253:::-;6311:7;6338:5;6342:1;6338;:5;:::i;33372:151::-;33448:4;1778:1;2374:7;;:19;;2366:63;;;;-1:-1:-1;;;2366:63:0;;17036:2:1;2366:63:0;;;17018:21:1;17075:2;17055:18;;;17048:30;17114:33;17094:18;;;17087:61;17165:18;;2366:63:0;16834:355:1;2366:63:0;1778:1;2507:7;:18;33465:19:::1;33471:3:::0;33476:7;33465:5:::1;:19::i;:::-;-1:-1:-1::0;33511:4:0::1;1734:1:::0;2686:7;:22;33372:151;;-1:-1:-1;;33372:151:0:o;5515:98::-;5573:7;5600:5;5604:1;5600;:5;:::i;12617:173::-;12692:6;;;-1:-1:-1;;;;;12709:17:0;;;-1:-1:-1;;;;;;12709:17:0;;;;;;;12742:40;;12692:6;;;12709:17;12692:6;;12742:40;;12673:16;;12742:40;12662:128;12617:173;:::o;24724:399::-;-1:-1:-1;;;;;24808:21:0;;24800:65;;;;-1:-1:-1;;;24800:65:0;;17396:2:1;24800:65:0;;;17378:21:1;17435:2;17415:18;;;17408:30;17474:33;17454:18;;;17447:61;17525:18;;24800:65:0;17194:355:1;24800:65:0;24956:6;24940:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;24973:18:0;;:9;:18;;;;;;;;;;:28;;24995:6;;24973:9;:28;;24995:6;;24973:28;:::i;:::-;;;;-1:-1:-1;;25017:37:0;;1847:25:1;;;-1:-1:-1;;;;;25017:37:0;;;25034:1;;25017:37;;1835:2:1;1820:18;25017:37:0;;;;;;;24724:399;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2741:615::-;2827:6;2835;2888:2;2876:9;2867:7;2863:23;2859:32;2856:52;;;2904:1;2901;2894:12;2856:52;2944:9;2931:23;2973:18;3014:2;3006:6;3003:14;3000:34;;;3030:1;3027;3020:12;3000:34;3068:6;3057:9;3053:22;3043:32;;3113:7;3106:4;3102:2;3098:13;3094:27;3084:55;;3135:1;3132;3125:12;3084:55;3175:2;3162:16;3201:2;3193:6;3190:14;3187:34;;;3217:1;3214;3207:12;3187:34;3270:7;3265:2;3255:6;3252:1;3248:14;3244:2;3240:23;3236:32;3233:45;3230:65;;;3291:1;3288;3281:12;3230:65;3322:2;3314:11;;;;;3344:6;;-1:-1:-1;2741:615:1;;-1:-1:-1;;;;2741:615:1:o;3361:388::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3545:9;3532:23;3564:31;3589:5;3564:31;:::i;:::-;3614:5;-1:-1:-1;3671:2:1;3656:18;;3643:32;3684:33;3643:32;3684:33;:::i;:::-;3736:7;3726:17;;;3361:388;;;;;:::o;3754:248::-;3822:6;3830;3883:2;3871:9;3862:7;3858:23;3854:32;3851:52;;;3899:1;3896;3889:12;3851:52;-1:-1:-1;;3922:23:1;;;3992:2;3977:18;;;3964:32;;-1:-1:-1;3754:248:1:o;4007:380::-;4086:1;4082:12;;;;4129;;;4150:61;;4204:4;4196:6;4192:17;4182:27;;4150:61;4257:2;4249:6;4246:14;4226:18;4223:38;4220:161;;;4303:10;4298:3;4294:20;4291:1;4284:31;4338:4;4335:1;4328:15;4366:4;4363:1;4356:15;4220:161;;4007:380;;;:::o;4392:401::-;4594:2;4576:21;;;4633:2;4613:18;;;4606:30;4672:34;4667:2;4652:18;;4645:62;-1:-1:-1;;;4738:2:1;4723:18;;4716:35;4783:3;4768:19;;4392:401::o;5207:356::-;5409:2;5391:21;;;5428:18;;;5421:30;5487:34;5482:2;5467:18;;5460:62;5554:2;5539:18;;5207:356::o;5970:398::-;6172:2;6154:21;;;6211:2;6191:18;;;6184:30;6250:34;6245:2;6230:18;;6223:62;-1:-1:-1;;;6316:2:1;6301:18;;6294:32;6358:3;6343:19;;5970:398::o;6373:345::-;6575:2;6557:21;;;6614:2;6594:18;;;6587:30;-1:-1:-1;;;6648:2:1;6633:18;;6626:51;6709:2;6694:18;;6373:345::o;6723:127::-;6784:10;6779:3;6775:20;6772:1;6765:31;6815:4;6812:1;6805:15;6839:4;6836:1;6829:15;6855:128;6895:3;6926:1;6922:6;6919:1;6916:13;6913:39;;;6932:18;;:::i;:::-;-1:-1:-1;6968:9:1;;6855:128::o;8577:184::-;8647:6;8700:2;8688:9;8679:7;8675:23;8671:32;8668:52;;;8716:1;8713;8706:12;8668:52;-1:-1:-1;8739:16:1;;8577:184;-1:-1:-1;8577:184:1:o;9174:127::-;9235:10;9230:3;9226:20;9223:1;9216:31;9266:4;9263:1;9256:15;9290:4;9287:1;9280:15;10062:251;10132:6;10185:2;10173:9;10164:7;10160:23;10156:32;10153:52;;;10201:1;10198;10191:12;10153:52;10233:9;10227:16;10252:31;10277:5;10252:31;:::i;10725:135::-;10764:3;-1:-1:-1;;10785:17:1;;10782:43;;;10805:18;;:::i;:::-;-1:-1:-1;10852:1:1;10841:13;;10725:135::o;11626:127::-;11687:10;11682:3;11678:20;11675:1;11668:31;11718:4;11715:1;11708:15;11742:4;11739:1;11732:15;11758:160;11835:13;;11888:4;11877:16;;11867:27;;11857:55;;11908:1;11905;11898:12;11923:782;12014:6;12067:2;12055:9;12046:7;12042:23;12038:32;12035:52;;;12083:1;12080;12073:12;12035:52;12132:7;12125:4;12114:9;12110:20;12106:34;12096:62;;12154:1;12151;12144:12;12096:62;12187:2;12181:9;12229:2;12221:6;12217:15;12298:6;12286:10;12283:22;12262:18;12250:10;12247:34;12244:62;12241:88;;;12309:18;;:::i;:::-;12345:2;12338:22;12380:6;12424:2;12409:18;;12439:19;;;12436:39;;;12471:1;12468;12461:12;12436:39;12495:9;12513:161;12529:6;12524:3;12521:15;12513:161;;;12597:32;12625:3;12597:32;:::i;:::-;12585:45;;12659:4;12650:14;;;;12546;12513:161;;;-1:-1:-1;12693:6:1;;11923:782;-1:-1:-1;;;;;11923:782:1:o;12710:804::-;12801:6;12832:3;12876:2;12864:9;12855:7;12851:23;12847:32;12844:52;;;12892:1;12889;12882:12;12844:52;12941:7;12934:4;12923:9;12919:20;12915:34;12905:62;;12963:1;12960;12953:12;12905:62;12996:2;12990:9;13038:2;13030:6;13026:15;13107:6;13095:10;13092:22;13071:18;13059:10;13056:34;13053:62;13050:88;;;13118:18;;:::i;:::-;13154:2;13147:22;13218:18;;;;13189:6;13248:19;;;13245:39;;;13280:1;13277;13270:12;13245:39;13304:9;13322:161;13338:6;13333:3;13330:15;13322:161;;;13406:32;13434:3;13406:32;:::i;:::-;13394:45;;13468:4;13459:14;;;;13355;13322:161;;;-1:-1:-1;13502:6:1;;12710:804;-1:-1:-1;;;;;12710:804:1:o;13519:125::-;13559:4;13587:1;13584;13581:8;13578:34;;;13592:18;;:::i;:::-;-1:-1:-1;13629:9:1;;13519:125::o;13649:168::-;13689:7;13755:1;13751;13747:6;13743:14;13740:1;13737:21;13732:1;13725:9;13718:17;13714:45;13711:71;;;13762:18;;:::i;:::-;-1:-1:-1;13802:9:1;;13649:168::o;13822:217::-;13862:1;13888;13878:132;;13932:10;13927:3;13923:20;13920:1;13913:31;13967:4;13964:1;13957:15;13995:4;13992:1;13985:15;13878:132;-1:-1:-1;14024:9:1;;13822:217::o

Swarm Source

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