ETH Price: $3,331.62 (-1.36%)

Token

Rubber Ducky (RUBB)
 

Overview

Max Total Supply

69,420,000,000 RUBB

Holders

120

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,500 RUBB

Value
$0.00
0xac94238edaf5e8a02130c72968169468d7d1d557
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:
RubberDucky

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// @Website | https://rubb.site
// @Twitter | https://twitter.com/rubbcoin
// @Telegram | https://t.me/rubbcoin
pragma solidity ^0.8.9;

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

/**
 * @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/[email protected]

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

/**
 * @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/[email protected]

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

/**
 * @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
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. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract RubberDucky is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 public maxWalletLimit = 1736000000 * 10 ** decimals();

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    constructor() ERC20("Rubber Ducky", "RUBB") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // CREATE A UNISWAP PAIR FOR THIS NEW TOKEN
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // SET THE REST OF THE CONTRACT VARIABLES
        uniswapV2Router = _uniswapV2Router;

        // MINT INITIAL SUPPLY
        _mint(msg.sender, 69420000000 * 10 ** decimals());
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        if(sender != owner() && recipient != owner()) {
            if(recipient != uniswapV2Pair){
            require(balanceOf(recipient) + amount <= maxWalletLimit, "Exceeds the maxWalletLimit.");
            }
        }

        super._transfer(sender, recipient, amount);
    }

    function changeMaxWalletLimit(uint256 amount) public onlyOwner {
        require(amount > totalSupply().div(200), "value too low");
        maxWalletLimit = amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c0604052620000146200032360201b60201c565b600a6200002291906200070b565b63677942006200003391906200075c565b6006553480156200004357600080fd5b506040518060400160405280600c81526020017f527562626572204475636b7900000000000000000000000000000000000000008152506040518060400160405280600481526020017f52554242000000000000000000000000000000000000000000000000000000008152508160039081620000c1919062000a17565b508060049081620000d3919062000a17565b505050620000f6620000ea6200032c60201b60201c565b6200033460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200015b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000181919062000b68565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020f919062000b68565b6040518363ffffffff1660e01b81526004016200022e92919062000bab565b6020604051808303816000875af11580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000274919062000b68565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200031c33620002f06200032360201b60201c565b600a620002fe91906200070b565b641029c123006200031091906200075c565b620003fa60201b60201c565b5062000cc4565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200046c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004639062000c39565b60405180910390fd5b62000480600083836200056760201b60201c565b806002600082825462000494919062000c5b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000547919062000ca7565b60405180910390a362000563600083836200056c60201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005ff57808604811115620005d757620005d662000571565b5b6001851615620005e75780820291505b8081029050620005f785620005a0565b9450620005b7565b94509492505050565b6000826200061a5760019050620006ed565b816200062a5760009050620006ed565b81600181146200064357600281146200064e5762000684565b6001915050620006ed565b60ff84111562000663576200066262000571565b5b8360020a9150848211156200067d576200067c62000571565b5b50620006ed565b5060208310610133831016604e8410600b8410161715620006be5782820a905083811115620006b857620006b762000571565b5b620006ed565b620006cd8484846001620005ad565b92509050818404811115620006e757620006e662000571565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200071882620006f4565b91506200072583620006fe565b9250620007547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000608565b905092915050565b60006200076982620006f4565b91506200077683620006f4565b92508282026200078681620006f4565b91508282048414831517620007a0576200079f62000571565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200082957607f821691505b6020821081036200083f576200083e620007e1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200086a565b620008b586836200086a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008f8620008f2620008ec84620006f4565b620008cd565b620006f4565b9050919050565b6000819050919050565b6200091483620008d7565b6200092c6200092382620008ff565b84845462000877565b825550505050565b600090565b6200094362000934565b6200095081848462000909565b505050565b5b8181101562000978576200096c60008262000939565b60018101905062000956565b5050565b601f821115620009c757620009918162000845565b6200099c846200085a565b81016020851015620009ac578190505b620009c4620009bb856200085a565b83018262000955565b50505b505050565b600082821c905092915050565b6000620009ec60001984600802620009cc565b1980831691505092915050565b600062000a078383620009d9565b9150826002028217905092915050565b62000a2282620007a7565b67ffffffffffffffff81111562000a3e5762000a3d620007b2565b5b62000a4a825462000810565b62000a578282856200097c565b600060209050601f83116001811462000a8f576000841562000a7a578287015190505b62000a868582620009f9565b86555062000af6565b601f19841662000a9f8662000845565b60005b8281101562000ac95784890151825560018201915060208501945060208101905062000aa2565b8683101562000ae9578489015162000ae5601f891682620009d9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b308262000b03565b9050919050565b62000b428162000b23565b811462000b4e57600080fd5b50565b60008151905062000b628162000b37565b92915050565b60006020828403121562000b815762000b8062000afe565b5b600062000b918482850162000b51565b91505092915050565b62000ba58162000b23565b82525050565b600060408201905062000bc2600083018562000b9a565b62000bd1602083018462000b9a565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c21601f8362000bd8565b915062000c2e8262000be9565b602082019050919050565b6000602082019050818103600083015262000c548162000c12565b9050919050565b600062000c6882620006f4565b915062000c7583620006f4565b925082820190508082111562000c905762000c8f62000571565b5b92915050565b62000ca181620006f4565b82525050565b600060208201905062000cbe600083018462000c96565b92915050565b60805160a051611a6c62000cf16000396000818161055f0152610bb1015260006104540152611a6c6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806366a88d96116100a257806395d89b411161007157806395d89b41146102d3578063a457c2d7146102f1578063a9059cbb14610321578063dd62ed3e14610351578063f2fde38b1461038157610116565b806366a88d961461025d57806370a082311461027b578063715018a6146102ab5780638da5cb5b146102b557610116565b8063212e3b2b116100e9578063212e3b2b146101a557806323b872dd146101c1578063313ce567146101f1578063395093511461020f57806349bd5a5e1461023f57610116565b806306fdde031461011b578063095ea7b3146101395780631694505e1461016957806318160ddd14610187575b600080fd5b61012361039d565b6040516101309190611042565b60405180910390f35b610153600480360381019061014e91906110fd565b61042f565b6040516101609190611158565b60405180910390f35b610171610452565b60405161017e91906111d2565b60405180910390f35b61018f610476565b60405161019c91906111fc565b60405180910390f35b6101bf60048036038101906101ba9190611217565b610480565b005b6101db60048036038101906101d69190611244565b6104ee565b6040516101e89190611158565b60405180910390f35b6101f961051d565b60405161020691906112b3565b60405180910390f35b610229600480360381019061022491906110fd565b610526565b6040516102369190611158565b60405180910390f35b61024761055d565b60405161025491906112dd565b60405180910390f35b610265610581565b60405161027291906111fc565b60405180910390f35b610295600480360381019061029091906112f8565b610587565b6040516102a291906111fc565b60405180910390f35b6102b36105cf565b005b6102bd6105e3565b6040516102ca91906112dd565b60405180910390f35b6102db61060d565b6040516102e89190611042565b60405180910390f35b61030b600480360381019061030691906110fd565b61069f565b6040516103189190611158565b60405180910390f35b61033b600480360381019061033691906110fd565b610716565b6040516103489190611158565b60405180910390f35b61036b60048036038101906103669190611325565b610739565b60405161037891906111fc565b60405180910390f35b61039b600480360381019061039691906112f8565b6107c0565b005b6060600380546103ac90611394565b80601f01602080910402602001604051908101604052809291908181526020018280546103d890611394565b80156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b60008061043a610843565b905061044781858561084b565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610488610a14565b6104a360c8610495610476565b610a9290919063ffffffff16565b81116104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90611411565b60405180910390fd5b8060068190555050565b6000806104f9610843565b9050610506858285610aa8565b610511858585610b34565b60019150509392505050565b60006012905090565b600080610531610843565b90506105528185856105438589610739565b61054d9190611460565b61084b565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105d7610a14565b6105e16000610c6c565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461061c90611394565b80601f016020809104026020016040519081016040528092919081815260200182805461064890611394565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905090565b6000806106aa610843565b905060006106b88286610739565b9050838110156106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490611506565b60405180910390fd5b61070a828686840361084b565b60019250505092915050565b600080610721610843565b905061072e818585610b34565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107c8610a14565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e90611598565b60405180910390fd5b61084081610c6c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b19061162a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610920906116bc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a0791906111fc565b60405180910390a3505050565b610a1c610843565b73ffffffffffffffffffffffffffffffffffffffff16610a3a6105e3565b73ffffffffffffffffffffffffffffffffffffffff1614610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790611728565b60405180910390fd5b565b60008183610aa09190611777565b905092915050565b6000610ab48484610739565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b2e5781811015610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b17906117f4565b60405180910390fd5b610b2d848484840361084b565b5b50505050565b610b3c6105e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610baa5750610b7a6105e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610c5c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c5b5760065481610c0f84610587565b610c199190611460565b1115610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190611860565b60405180910390fd5b5b5b610c67838383610d32565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906118f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790611984565b60405180910390fd5b610e1b838383610fa8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890611a16565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8f91906111fc565b60405180910390a3610fa2848484610fad565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fec578082015181840152602081019050610fd1565b60008484015250505050565b6000601f19601f8301169050919050565b600061101482610fb2565b61101e8185610fbd565b935061102e818560208601610fce565b61103781610ff8565b840191505092915050565b6000602082019050818103600083015261105c8184611009565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061109482611069565b9050919050565b6110a481611089565b81146110af57600080fd5b50565b6000813590506110c18161109b565b92915050565b6000819050919050565b6110da816110c7565b81146110e557600080fd5b50565b6000813590506110f7816110d1565b92915050565b6000806040838503121561111457611113611064565b5b6000611122858286016110b2565b9250506020611133858286016110e8565b9150509250929050565b60008115159050919050565b6111528161113d565b82525050565b600060208201905061116d6000830184611149565b92915050565b6000819050919050565b600061119861119361118e84611069565b611173565b611069565b9050919050565b60006111aa8261117d565b9050919050565b60006111bc8261119f565b9050919050565b6111cc816111b1565b82525050565b60006020820190506111e760008301846111c3565b92915050565b6111f6816110c7565b82525050565b600060208201905061121160008301846111ed565b92915050565b60006020828403121561122d5761122c611064565b5b600061123b848285016110e8565b91505092915050565b60008060006060848603121561125d5761125c611064565b5b600061126b868287016110b2565b935050602061127c868287016110b2565b925050604061128d868287016110e8565b9150509250925092565b600060ff82169050919050565b6112ad81611297565b82525050565b60006020820190506112c860008301846112a4565b92915050565b6112d781611089565b82525050565b60006020820190506112f260008301846112ce565b92915050565b60006020828403121561130e5761130d611064565b5b600061131c848285016110b2565b91505092915050565b6000806040838503121561133c5761133b611064565b5b600061134a858286016110b2565b925050602061135b858286016110b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113ac57607f821691505b6020821081036113bf576113be611365565b5b50919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006113fb600d83610fbd565b9150611406826113c5565b602082019050919050565b6000602082019050818103600083015261142a816113ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061146b826110c7565b9150611476836110c7565b925082820190508082111561148e5761148d611431565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006114f0602583610fbd565b91506114fb82611494565b604082019050919050565b6000602082019050818103600083015261151f816114e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611582602683610fbd565b915061158d82611526565b604082019050919050565b600060208201905081810360008301526115b181611575565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611614602483610fbd565b915061161f826115b8565b604082019050919050565b6000602082019050818103600083015261164381611607565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116a6602283610fbd565b91506116b18261164a565b604082019050919050565b600060208201905081810360008301526116d581611699565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611712602083610fbd565b915061171d826116dc565b602082019050919050565b6000602082019050818103600083015261174181611705565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611782826110c7565b915061178d836110c7565b92508261179d5761179c611748565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117de601d83610fbd565b91506117e9826117a8565b602082019050919050565b6000602082019050818103600083015261180d816117d1565b9050919050565b7f4578636565647320746865206d617857616c6c65744c696d69742e0000000000600082015250565b600061184a601b83610fbd565b915061185582611814565b602082019050919050565b600060208201905081810360008301526118798161183d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006118dc602583610fbd565b91506118e782611880565b604082019050919050565b6000602082019050818103600083015261190b816118cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061196e602383610fbd565b915061197982611912565b604082019050919050565b6000602082019050818103600083015261199d81611961565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a00602683610fbd565b9150611a0b826119a4565b604082019050919050565b60006020820190508181036000830152611a2f816119f3565b905091905056fea2646970667358221220fc8a225677bd6bd002092b0c52131863c27bed642cc674074bab26900de3354664736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c806366a88d96116100a257806395d89b411161007157806395d89b41146102d3578063a457c2d7146102f1578063a9059cbb14610321578063dd62ed3e14610351578063f2fde38b1461038157610116565b806366a88d961461025d57806370a082311461027b578063715018a6146102ab5780638da5cb5b146102b557610116565b8063212e3b2b116100e9578063212e3b2b146101a557806323b872dd146101c1578063313ce567146101f1578063395093511461020f57806349bd5a5e1461023f57610116565b806306fdde031461011b578063095ea7b3146101395780631694505e1461016957806318160ddd14610187575b600080fd5b61012361039d565b6040516101309190611042565b60405180910390f35b610153600480360381019061014e91906110fd565b61042f565b6040516101609190611158565b60405180910390f35b610171610452565b60405161017e91906111d2565b60405180910390f35b61018f610476565b60405161019c91906111fc565b60405180910390f35b6101bf60048036038101906101ba9190611217565b610480565b005b6101db60048036038101906101d69190611244565b6104ee565b6040516101e89190611158565b60405180910390f35b6101f961051d565b60405161020691906112b3565b60405180910390f35b610229600480360381019061022491906110fd565b610526565b6040516102369190611158565b60405180910390f35b61024761055d565b60405161025491906112dd565b60405180910390f35b610265610581565b60405161027291906111fc565b60405180910390f35b610295600480360381019061029091906112f8565b610587565b6040516102a291906111fc565b60405180910390f35b6102b36105cf565b005b6102bd6105e3565b6040516102ca91906112dd565b60405180910390f35b6102db61060d565b6040516102e89190611042565b60405180910390f35b61030b600480360381019061030691906110fd565b61069f565b6040516103189190611158565b60405180910390f35b61033b600480360381019061033691906110fd565b610716565b6040516103489190611158565b60405180910390f35b61036b60048036038101906103669190611325565b610739565b60405161037891906111fc565b60405180910390f35b61039b600480360381019061039691906112f8565b6107c0565b005b6060600380546103ac90611394565b80601f01602080910402602001604051908101604052809291908181526020018280546103d890611394565b80156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b60008061043a610843565b905061044781858561084b565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610488610a14565b6104a360c8610495610476565b610a9290919063ffffffff16565b81116104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90611411565b60405180910390fd5b8060068190555050565b6000806104f9610843565b9050610506858285610aa8565b610511858585610b34565b60019150509392505050565b60006012905090565b600080610531610843565b90506105528185856105438589610739565b61054d9190611460565b61084b565b600191505092915050565b7f0000000000000000000000006b2a291911d6c2dfd08ba8b221dae7b0f47bfeac81565b60065481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105d7610a14565b6105e16000610c6c565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461061c90611394565b80601f016020809104026020016040519081016040528092919081815260200182805461064890611394565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b5050505050905090565b6000806106aa610843565b905060006106b88286610739565b9050838110156106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490611506565b60405180910390fd5b61070a828686840361084b565b60019250505092915050565b600080610721610843565b905061072e818585610b34565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107c8610a14565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e90611598565b60405180910390fd5b61084081610c6c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b19061162a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610920906116bc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a0791906111fc565b60405180910390a3505050565b610a1c610843565b73ffffffffffffffffffffffffffffffffffffffff16610a3a6105e3565b73ffffffffffffffffffffffffffffffffffffffff1614610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790611728565b60405180910390fd5b565b60008183610aa09190611777565b905092915050565b6000610ab48484610739565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b2e5781811015610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b17906117f4565b60405180910390fd5b610b2d848484840361084b565b5b50505050565b610b3c6105e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610baa5750610b7a6105e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610c5c577f0000000000000000000000006b2a291911d6c2dfd08ba8b221dae7b0f47bfeac73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c5b5760065481610c0f84610587565b610c199190611460565b1115610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190611860565b60405180910390fd5b5b5b610c67838383610d32565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906118f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790611984565b60405180910390fd5b610e1b838383610fa8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890611a16565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8f91906111fc565b60405180910390a3610fa2848484610fad565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fec578082015181840152602081019050610fd1565b60008484015250505050565b6000601f19601f8301169050919050565b600061101482610fb2565b61101e8185610fbd565b935061102e818560208601610fce565b61103781610ff8565b840191505092915050565b6000602082019050818103600083015261105c8184611009565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061109482611069565b9050919050565b6110a481611089565b81146110af57600080fd5b50565b6000813590506110c18161109b565b92915050565b6000819050919050565b6110da816110c7565b81146110e557600080fd5b50565b6000813590506110f7816110d1565b92915050565b6000806040838503121561111457611113611064565b5b6000611122858286016110b2565b9250506020611133858286016110e8565b9150509250929050565b60008115159050919050565b6111528161113d565b82525050565b600060208201905061116d6000830184611149565b92915050565b6000819050919050565b600061119861119361118e84611069565b611173565b611069565b9050919050565b60006111aa8261117d565b9050919050565b60006111bc8261119f565b9050919050565b6111cc816111b1565b82525050565b60006020820190506111e760008301846111c3565b92915050565b6111f6816110c7565b82525050565b600060208201905061121160008301846111ed565b92915050565b60006020828403121561122d5761122c611064565b5b600061123b848285016110e8565b91505092915050565b60008060006060848603121561125d5761125c611064565b5b600061126b868287016110b2565b935050602061127c868287016110b2565b925050604061128d868287016110e8565b9150509250925092565b600060ff82169050919050565b6112ad81611297565b82525050565b60006020820190506112c860008301846112a4565b92915050565b6112d781611089565b82525050565b60006020820190506112f260008301846112ce565b92915050565b60006020828403121561130e5761130d611064565b5b600061131c848285016110b2565b91505092915050565b6000806040838503121561133c5761133b611064565b5b600061134a858286016110b2565b925050602061135b858286016110b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113ac57607f821691505b6020821081036113bf576113be611365565b5b50919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006113fb600d83610fbd565b9150611406826113c5565b602082019050919050565b6000602082019050818103600083015261142a816113ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061146b826110c7565b9150611476836110c7565b925082820190508082111561148e5761148d611431565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006114f0602583610fbd565b91506114fb82611494565b604082019050919050565b6000602082019050818103600083015261151f816114e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611582602683610fbd565b915061158d82611526565b604082019050919050565b600060208201905081810360008301526115b181611575565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611614602483610fbd565b915061161f826115b8565b604082019050919050565b6000602082019050818103600083015261164381611607565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006116a6602283610fbd565b91506116b18261164a565b604082019050919050565b600060208201905081810360008301526116d581611699565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611712602083610fbd565b915061171d826116dc565b602082019050919050565b6000602082019050818103600083015261174181611705565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611782826110c7565b915061178d836110c7565b92508261179d5761179c611748565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117de601d83610fbd565b91506117e9826117a8565b602082019050919050565b6000602082019050818103600083015261180d816117d1565b9050919050565b7f4578636565647320746865206d617857616c6c65744c696d69742e0000000000600082015250565b600061184a601b83610fbd565b915061185582611814565b602082019050919050565b600060208201905081810360008301526118798161183d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006118dc602583610fbd565b91506118e782611880565b604082019050919050565b6000602082019050818103600083015261190b816118cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061196e602383610fbd565b915061197982611912565b604082019050919050565b6000602082019050818103600083015261199d81611961565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a00602683610fbd565b9150611a0b826119a4565b604082019050919050565b60006020820190508181036000830152611a2f816119f3565b905091905056fea2646970667358221220fc8a225677bd6bd002092b0c52131863c27bed642cc674074bab26900de3354664736f6c63430008120033

Deployed Bytecode Sourcemap

36362:1438:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9458:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11875:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36513:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10578:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37624:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12681:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10420:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13385:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36571:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36443:61;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10749:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2868:103;;;:::i;:::-;;2220:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9677:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14151:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11098:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11379:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3126:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9458:100;9512:13;9545:5;9538:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9458:100;:::o;11875:226::-;11983:4;12000:13;12016:12;:10;:12::i;:::-;12000:28;;12039:32;12048:5;12055:7;12064:6;12039:8;:32::i;:::-;12089:4;12082:11;;;11875:226;;;;:::o;36513:51::-;;;:::o;10578:108::-;10639:7;10666:12;;10659:19;;10578:108;:::o;37624:173::-;2106:13;:11;:13::i;:::-;37715:22:::1;37733:3;37715:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;37706:6;:31;37698:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37783:6;37766:14;:23;;;;37624:173:::0;:::o;12681:295::-;12812:4;12829:15;12847:12;:10;:12::i;:::-;12829:30;;12870:38;12886:4;12892:7;12901:6;12870:15;:38::i;:::-;12919:27;12929:4;12935:2;12939:6;12919:9;:27::i;:::-;12964:4;12957:11;;;12681:295;;;;;:::o;10420:93::-;10478:5;10503:2;10496:9;;10420:93;:::o;13385:263::-;13498:4;13515:13;13531:12;:10;:12::i;:::-;13515:28;;13554:64;13563:5;13570:7;13607:10;13579:25;13589:5;13596:7;13579:9;:25::i;:::-;:38;;;;:::i;:::-;13554:8;:64::i;:::-;13636:4;13629:11;;;13385:263;;;;:::o;36571:38::-;;;:::o;36443:61::-;;;;:::o;10749:143::-;10839:7;10866:9;:18;10876:7;10866:18;;;;;;;;;;;;;;;;10859:25;;10749:143;;;:::o;2868:103::-;2106:13;:11;:13::i;:::-;2933:30:::1;2960:1;2933:18;:30::i;:::-;2868:103::o:0;2220:87::-;2266:7;2293:6;;;;;;;;;;;2286:13;;2220:87;:::o;9677:104::-;9733:13;9766:7;9759:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9677:104;:::o;14151:498::-;14269:4;14286:13;14302:12;:10;:12::i;:::-;14286:28;;14325:24;14352:25;14362:5;14369:7;14352:9;:25::i;:::-;14325:52;;14430:15;14410:16;:35;;14388:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14546:60;14555:5;14562:7;14590:15;14571:16;:34;14546:8;:60::i;:::-;14637:4;14630:11;;;;14151:498;;;;:::o;11098:218::-;11202:4;11219:13;11235:12;:10;:12::i;:::-;11219:28;;11258;11268:5;11275:2;11279:6;11258:9;:28::i;:::-;11304:4;11297:11;;;11098:218;;;;:::o;11379:176::-;11493:7;11520:11;:18;11532:5;11520:18;;;;;;;;;;;;;;;:27;11539:7;11520:27;;;;;;;;;;;;;;;;11513:34;;11379:176;;;;:::o;3126:238::-;2106:13;:11;:13::i;:::-;3249:1:::1;3229:22;;:8;:22;;::::0;3207:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3328:28;3347:8;3328:18;:28::i;:::-;3126:238:::0;:::o;771:98::-;824:7;851:10;844:17;;771:98;:::o;18277:380::-;18430:1;18413:19;;:5;:19;;;18405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18511:1;18492:21;;:7;:21;;;18484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18595:6;18565:11;:18;18577:5;18565:18;;;;;;;;;;;;;;;:27;18584:7;18565:27;;;;;;;;;;;;;;;:36;;;;18633:7;18617:32;;18626:5;18617:32;;;18642:6;18617:32;;;;;;:::i;:::-;;;;;;;;18277:380;;;:::o;2385:132::-;2460:12;:10;:12::i;:::-;2449:23;;:7;:5;:7::i;:::-;:23;;;2441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2385:132::o;24465:98::-;24523:7;24554:1;24550;:5;;;;:::i;:::-;24543:12;;24465:98;;;;:::o;18948:502::-;19083:24;19110:25;19120:5;19127:7;19110:9;:25::i;:::-;19083:52;;19170:17;19150:16;:37;19146:297;;19250:6;19230:16;:26;;19204:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19365:51;19374:5;19381:7;19409:6;19390:16;:25;19365:8;:51::i;:::-;19146:297;19072:378;18948:502;;;:::o;37193:423::-;37347:7;:5;:7::i;:::-;37337:17;;:6;:17;;;;:41;;;;;37371:7;:5;:7::i;:::-;37358:20;;:9;:20;;;;37337:41;37334:220;;;37411:13;37398:26;;:9;:26;;;37395:148;;37481:14;;37471:6;37448:20;37458:9;37448;:20::i;:::-;:29;;;;:::i;:::-;:47;;37440:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37395:148;37334:220;37566:42;37582:6;37590:9;37601:6;37566:15;:42::i;:::-;37193:423;;;:::o;3524:191::-;3598:16;3617:6;;;;;;;;;;;3598:25;;3643:8;3634:6;;:17;;;;;;;;;;;;;;;;;;3698:8;3667:40;;3688:8;3667:40;;;;;;;;;;;;3587:128;3524:191;:::o;15119:877::-;15266:1;15250:18;;:4;:18;;;15242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15343:1;15329:16;;:2;:16;;;15321:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15398:38;15419:4;15425:2;15429:6;15398:20;:38::i;:::-;15449:19;15471:9;:15;15481:4;15471:15;;;;;;;;;;;;;;;;15449:37;;15534:6;15519:11;:21;;15497:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15674:6;15660:11;:20;15642:9;:15;15652:4;15642:15;;;;;;;;;;;;;;;:38;;;;15877:6;15860:9;:13;15870:2;15860:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15927:2;15912:26;;15921:4;15912:26;;;15931:6;15912:26;;;;;;:::i;:::-;;;;;;;;15951:37;15971:4;15977:2;15981:6;15951:19;:37::i;:::-;15231:765;15119:877;;;:::o;20050:125::-;;;;:::o;20779:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:180::-;7381:77;7378:1;7371:88;7478:4;7475:1;7468:15;7502:4;7499:1;7492:15;7519:320;7563:6;7600:1;7594:4;7590:12;7580:22;;7647:1;7641:4;7637:12;7668:18;7658:81;;7724:4;7716:6;7712:17;7702:27;;7658:81;7786:2;7778:6;7775:14;7755:18;7752:38;7749:84;;7805:18;;:::i;:::-;7749:84;7570:269;7519:320;;;:::o;7845:163::-;7985:15;7981:1;7973:6;7969:14;7962:39;7845:163;:::o;8014:366::-;8156:3;8177:67;8241:2;8236:3;8177:67;:::i;:::-;8170:74;;8253:93;8342:3;8253:93;:::i;:::-;8371:2;8366:3;8362:12;8355:19;;8014:366;;;:::o;8386:419::-;8552:4;8590:2;8579:9;8575:18;8567:26;;8639:9;8633:4;8629:20;8625:1;8614:9;8610:17;8603:47;8667:131;8793:4;8667:131;:::i;:::-;8659:139;;8386:419;;;:::o;8811:180::-;8859:77;8856:1;8849:88;8956:4;8953:1;8946:15;8980:4;8977:1;8970:15;8997:191;9037:3;9056:20;9074:1;9056:20;:::i;:::-;9051:25;;9090:20;9108:1;9090:20;:::i;:::-;9085:25;;9133:1;9130;9126:9;9119:16;;9154:3;9151:1;9148:10;9145:36;;;9161:18;;:::i;:::-;9145:36;8997:191;;;;:::o;9194:224::-;9334:34;9330:1;9322:6;9318:14;9311:58;9403:7;9398:2;9390:6;9386:15;9379:32;9194:224;:::o;9424:366::-;9566:3;9587:67;9651:2;9646:3;9587:67;:::i;:::-;9580:74;;9663:93;9752:3;9663:93;:::i;:::-;9781:2;9776:3;9772:12;9765:19;;9424:366;;;:::o;9796:419::-;9962:4;10000:2;9989:9;9985:18;9977:26;;10049:9;10043:4;10039:20;10035:1;10024:9;10020:17;10013:47;10077:131;10203:4;10077:131;:::i;:::-;10069:139;;9796:419;;;:::o;10221:225::-;10361:34;10357:1;10349:6;10345:14;10338:58;10430:8;10425:2;10417:6;10413:15;10406:33;10221:225;:::o;10452:366::-;10594:3;10615:67;10679:2;10674:3;10615:67;:::i;:::-;10608:74;;10691:93;10780:3;10691:93;:::i;:::-;10809:2;10804:3;10800:12;10793:19;;10452:366;;;:::o;10824:419::-;10990:4;11028:2;11017:9;11013:18;11005:26;;11077:9;11071:4;11067:20;11063:1;11052:9;11048:17;11041:47;11105:131;11231:4;11105:131;:::i;:::-;11097:139;;10824:419;;;:::o;11249:223::-;11389:34;11385:1;11377:6;11373:14;11366:58;11458:6;11453:2;11445:6;11441:15;11434:31;11249:223;:::o;11478:366::-;11620:3;11641:67;11705:2;11700:3;11641:67;:::i;:::-;11634:74;;11717:93;11806:3;11717:93;:::i;:::-;11835:2;11830:3;11826:12;11819:19;;11478:366;;;:::o;11850:419::-;12016:4;12054:2;12043:9;12039:18;12031:26;;12103:9;12097:4;12093:20;12089:1;12078:9;12074:17;12067:47;12131:131;12257:4;12131:131;:::i;:::-;12123:139;;11850:419;;;:::o;12275:221::-;12415:34;12411:1;12403:6;12399:14;12392:58;12484:4;12479:2;12471:6;12467:15;12460:29;12275:221;:::o;12502:366::-;12644:3;12665:67;12729:2;12724:3;12665:67;:::i;:::-;12658:74;;12741:93;12830:3;12741:93;:::i;:::-;12859:2;12854:3;12850:12;12843:19;;12502:366;;;:::o;12874:419::-;13040:4;13078:2;13067:9;13063:18;13055:26;;13127:9;13121:4;13117:20;13113:1;13102:9;13098:17;13091:47;13155:131;13281:4;13155:131;:::i;:::-;13147:139;;12874:419;;;:::o;13299:182::-;13439:34;13435:1;13427:6;13423:14;13416:58;13299:182;:::o;13487:366::-;13629:3;13650:67;13714:2;13709:3;13650:67;:::i;:::-;13643:74;;13726:93;13815:3;13726:93;:::i;:::-;13844:2;13839:3;13835:12;13828:19;;13487:366;;;:::o;13859:419::-;14025:4;14063:2;14052:9;14048:18;14040:26;;14112:9;14106:4;14102:20;14098:1;14087:9;14083:17;14076:47;14140:131;14266:4;14140:131;:::i;:::-;14132:139;;13859:419;;;:::o;14284:180::-;14332:77;14329:1;14322:88;14429:4;14426:1;14419:15;14453:4;14450:1;14443:15;14470:185;14510:1;14527:20;14545:1;14527:20;:::i;:::-;14522:25;;14561:20;14579:1;14561:20;:::i;:::-;14556:25;;14600:1;14590:35;;14605:18;;:::i;:::-;14590:35;14647:1;14644;14640:9;14635:14;;14470:185;;;;:::o;14661:179::-;14801:31;14797:1;14789:6;14785:14;14778:55;14661:179;:::o;14846:366::-;14988:3;15009:67;15073:2;15068:3;15009:67;:::i;:::-;15002:74;;15085:93;15174:3;15085:93;:::i;:::-;15203:2;15198:3;15194:12;15187:19;;14846:366;;;:::o;15218:419::-;15384:4;15422:2;15411:9;15407:18;15399:26;;15471:9;15465:4;15461:20;15457:1;15446:9;15442:17;15435:47;15499:131;15625:4;15499:131;:::i;:::-;15491:139;;15218:419;;;:::o;15643:177::-;15783:29;15779:1;15771:6;15767:14;15760:53;15643:177;:::o;15826:366::-;15968:3;15989:67;16053:2;16048:3;15989:67;:::i;:::-;15982:74;;16065:93;16154:3;16065:93;:::i;:::-;16183:2;16178:3;16174:12;16167:19;;15826:366;;;:::o;16198:419::-;16364:4;16402:2;16391:9;16387:18;16379:26;;16451:9;16445:4;16441:20;16437:1;16426:9;16422:17;16415:47;16479:131;16605:4;16479:131;:::i;:::-;16471:139;;16198:419;;;:::o;16623:224::-;16763:34;16759:1;16751:6;16747:14;16740:58;16832:7;16827:2;16819:6;16815:15;16808:32;16623:224;:::o;16853:366::-;16995:3;17016:67;17080:2;17075:3;17016:67;:::i;:::-;17009:74;;17092:93;17181:3;17092:93;:::i;:::-;17210:2;17205:3;17201:12;17194:19;;16853:366;;;:::o;17225:419::-;17391:4;17429:2;17418:9;17414:18;17406:26;;17478:9;17472:4;17468:20;17464:1;17453:9;17449:17;17442:47;17506:131;17632:4;17506:131;:::i;:::-;17498:139;;17225:419;;;:::o;17650:222::-;17790:34;17786:1;17778:6;17774:14;17767:58;17859:5;17854:2;17846:6;17842:15;17835:30;17650:222;:::o;17878:366::-;18020:3;18041:67;18105:2;18100:3;18041:67;:::i;:::-;18034:74;;18117:93;18206:3;18117:93;:::i;:::-;18235:2;18230:3;18226:12;18219:19;;17878:366;;;:::o;18250:419::-;18416:4;18454:2;18443:9;18439:18;18431:26;;18503:9;18497:4;18493:20;18489:1;18478:9;18474:17;18467:47;18531:131;18657:4;18531:131;:::i;:::-;18523:139;;18250:419;;;:::o;18675:225::-;18815:34;18811:1;18803:6;18799:14;18792:58;18884:8;18879:2;18871:6;18867:15;18860:33;18675:225;:::o;18906:366::-;19048:3;19069:67;19133:2;19128:3;19069:67;:::i;:::-;19062:74;;19145:93;19234:3;19145:93;:::i;:::-;19263:2;19258:3;19254:12;19247:19;;18906:366;;;:::o;19278:419::-;19444:4;19482:2;19471:9;19467:18;19459:26;;19531:9;19525:4;19521:20;19517:1;19506:9;19502:17;19495:47;19559:131;19685:4;19559:131;:::i;:::-;19551:139;;19278:419;;;:::o

Swarm Source

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