BNB Price: $621.13 (+0.63%)
 

Overview

Max Total Supply

420,000,000,000CAT

Holders

2,226 (0.00%)

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$98,832.30

Circulating Supply Market Cap

$29,756.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
1 CAT

Value
$0.00 ( ~0 BNB) [0.0000%]
0x802b65b5d9016621E66003aeD0b16615093f328b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Catmeme is a cat theme token that focuses on community decentralization and adoption. $CAT is designed to make memeCoins great again. $CAT is for the people, always. Fueled by pure meme power, $CAT will lead the way.

Market

Volume (24H):$24.18
Market Capitalization:$29,756.00
Circulating Supply:126,453,314,063.00 CAT
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information

Contract Source Code Verified (Exact Match)

Contract Name:
CAT

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2024-10-15
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

/**
 * @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;
    }
}

interface IWETH {
    function deposit() external payable;

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

    function withdraw(uint) external;
}

// 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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;
        }
    }
}

/**
 * @title SafeMathInt
 * @dev Math operations for int256 with overflow safety checks.
 */
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

/**
 * @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);
}

/**
 * @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);
}

/**
 * @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 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);
    }
}

interface IRouter {
    function WETH() external view returns (address);

    function factory() external view returns (address);

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

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

interface IFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

contract CAT is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address payable;

    address public constant zeroAddr = address(0);

    IRouter public router;
    address public swapPair;

    bool private swapping;

    address public marketing;
    address public BuyBack;

    uint256 private supply = 420000000000 * 1e9;

    uint256 public reward = 5;
    uint256 public rewardMkt = 2;
    uint256 public rewardBuyBack = 3;
    mapping(address => bool) public isExcludedFromFee;
    event excludeStatus(address,bool);

    constructor() ERC20("Cat Token", "CAT") {
        router = IRouter(address(0x10ED43C718714eb63d5aA57B78B54704E256024E));
        swapPair = IFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        marketing = address(0x2c5ee2C6E7dFacAc097233f75fE61DDBed923B91);
        BuyBack = address(0x1bc32b76083D629f6A9bfB2aacd08da9227d566a);

        excludeFromFee(marketing, true);
        excludeFromFee(BuyBack, true);
        excludeFromFee(owner(), true);
        excludeFromFee(address(this), true);

        _approve(address(this), address(router), ~uint256(0));

        _mint(owner(), supply);
    }

    receive() external payable {}

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    function excludeFromFee(address account, bool isExcluded) public onlyOwner {
        require(isExcludedFromFee[account] != isExcluded, "The wallet is already has that value.");
        isExcludedFromFee[account] = isExcluded;
        emit excludeStatus(account,isExcluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != zeroAddr, "ERC20: transfer from the zero address");
        require(to != zeroAddr, "ERC20: transfer to the zero address");
        
        uint256 tradingFee = reward;

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 feeInContract = balanceOf(address(this));

        if (
            from != swapPair &&
            !swapping &&
            !isExcludedFromFee[from] &&
            !isExcludedFromFee[to]
        ) {
            swapping = true;
            if(feeInContract > 0) {
                _swapAndTransferFee(feeInContract, tradingFee);
            }
            swapping = false;
        }

        bool takeFee = !swapping;

        if (isExcludedFromFee[from] || isExcludedFromFee[to] || (from != swapPair && to != swapPair)) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 feeAmount = 0;
            feeAmount = amount.mul(tradingFee).div(100);

            if (feeAmount > 0) {
                super._transfer(from, address(this), feeAmount);
                amount = amount.sub(feeAmount);
            }
        }

        super._transfer(from, to, amount);
    }

    function _swapAndTransferFee(uint256 feeAmount,uint256 _tradingFee) private {
        _swapForETH(feeAmount);

        uint256 amount = address(this).balance;
        uint256 amountMkt = amount.mul(rewardMkt).div(_tradingFee);
        uint256 amountBuyBack = amount.sub(amountMkt);
        
        payable(marketing).sendValue(amountMkt);
        payable(BuyBack).sendValue(amountBuyBack);
    }

    function _swapForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

API
[{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"excludeStatus","type":"event"},{"inputs":[],"name":"BuyBack","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardMkt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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":"zeroAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526816c4abbebea0100000600a556005600b556002600c556003600d5534801561002b575f80fd5b506040518060400160405280600981526020016821b0ba102a37b5b2b760b91b8152506040518060400160405280600381526020016210d05560ea1b81525081600390816100799190610713565b5060046100868282610713565b50505061009f61009a6102fa60201b60201c565b6102fe565b600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610101573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012591906107d2565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610184573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a891906107d2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156101f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021691906107d2565b600780546001600160a01b03929092166001600160a01b0319928316179055600880548216732c5ee2c6e7dfacac097233f75fe61ddbed923b9190811790915560098054909216731bc32b76083d629f6a9bfb2aacd08da9227d566a1790915561028190600161034f565b600954610298906001600160a01b0316600161034f565b6102b46102ad6005546001600160a01b031690565b600161034f565b6102bf30600161034f565b6006546102d89030906001600160a01b03165f1961043b565b6102f56102ed6005546001600160a01b031690565b600a5461055e565b610824565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61035761061b565b6001600160a01b0382165f908152600e602052604090205481151560ff9091161515036103d95760405162461bcd60e51b815260206004820152602560248201527f5468652077616c6c657420697320616c7265616479206861732074686174207660448201526430b63ab29760d91b60648201526084015b60405180910390fd5b6001600160a01b0382165f818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f901cf33fa99058338f58a1ad2890c92795108f69df2e890258a0084ed04a2b62910160405180910390a15050565b6001600160a01b03831661049d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103d0565b6001600160a01b0382166104fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103d0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166105b45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103d0565b8060025f8282546105c591906107ff565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b031633146106755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d0565b565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806106a457607f821691505b6020821081036106c257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561067757805f5260205f20601f840160051c810160208510156106ed5750805b601f840160051c820191505b8181101561070c575f81556001016106f9565b5050505050565b81516001600160401b0381111561072c5761072c61067c565b6107408161073a8454610690565b846106c8565b602080601f831160018114610773575f841561075c5750858301515b5f19600386901b1c1916600185901b1785556107ca565b5f85815260208120601f198616915b828110156107a157888601518255948401946001909101908401610782565b50858210156107be57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602082840312156107e2575f80fd5b81516001600160a01b03811681146107f8575f80fd5b9392505050565b8082018082111561081e57634e487b7160e01b5f52601160045260245ffd5b92915050565b6112e8806108315f395ff3fe60806040526004361061014a575f3560e01c8063715018a6116100b3578063a9059cbb1161006d578063a9059cbb146103a3578063cdcb40cb146103c2578063dd62ed3e146103d7578063df8408fe146103f6578063f2fde38b14610415578063f887ea4014610434575f80fd5b8063715018a61461030b5780638da5cb5b1461032157806395d89b411461033e57806396920e3414610352578063a457c2d714610371578063a86f42cb14610390575f80fd5b806326991cc81161010457806326991cc8146102195780632d3e474a14610250578063313ce5671461026f578063395093511461028a5780635342acb4146102a957806370a08231146102d7575f80fd5b806306fdde0314610155578063095ea7b31461017f5780630d0cb54a146101ae57806318160ddd146101d1578063228cb733146101e557806323b872dd146101fa575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b50610169610453565b6040516101769190610faf565b60405180910390f35b34801561018a575f80fd5b5061019e610199366004610ff8565b6104e3565b6040519015158152602001610176565b3480156101b9575f80fd5b506101c3600d5481565b604051908152602001610176565b3480156101dc575f80fd5b506002546101c3565b3480156101f0575f80fd5b506101c3600b5481565b348015610205575f80fd5b5061019e610214366004611022565b6104fc565b348015610224575f80fd5b50600754610238906001600160a01b031681565b6040516001600160a01b039091168152602001610176565b34801561025b575f80fd5b50600854610238906001600160a01b031681565b34801561027a575f80fd5b5060405160098152602001610176565b348015610295575f80fd5b5061019e6102a4366004610ff8565b61051f565b3480156102b4575f80fd5b5061019e6102c3366004611060565b600e6020525f908152604090205460ff1681565b3480156102e2575f80fd5b506101c36102f1366004611060565b6001600160a01b03165f9081526020819052604090205490565b348015610316575f80fd5b5061031f610540565b005b34801561032c575f80fd5b506005546001600160a01b0316610238565b348015610349575f80fd5b50610169610553565b34801561035d575f80fd5b50600954610238906001600160a01b031681565b34801561037c575f80fd5b5061019e61038b366004610ff8565b610562565b34801561039b575f80fd5b506102385f81565b3480156103ae575f80fd5b5061019e6103bd366004610ff8565b6105e1565b3480156103cd575f80fd5b506101c3600c5481565b3480156103e2575f80fd5b506101c36103f136600461107b565b6105ee565b348015610401575f80fd5b5061031f6104103660046110b2565b610618565b348015610420575f80fd5b5061031f61042f366004611060565b6106ff565b34801561043f575f80fd5b50600654610238906001600160a01b031681565b606060038054610462906110e2565b80601f016020809104026020016040519081016040528092919081815260200182805461048e906110e2565b80156104d95780601f106104b0576101008083540402835291602001916104d9565b820191905f5260205f20905b8154815290600101906020018083116104bc57829003601f168201915b5050505050905090565b5f336104f0818585610778565b60019150505b92915050565b5f3361050985828561089b565b610514858585610913565b506001949350505050565b5f336104f081858561053183836105ee565b61053b919061112e565b610778565b610548610b01565b6105515f610b5b565b565b606060048054610462906110e2565b5f338161056f82866105ee565b9050838110156105d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105148286868403610778565b5f336104f0818585610913565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610620610b01565b6001600160a01b0382165f908152600e602052604090205481151560ff90911615150361069d5760405162461bcd60e51b815260206004820152602560248201527f5468652077616c6c657420697320616c7265616479206861732074686174207660448201526430b63ab29760d91b60648201526084016105cb565b6001600160a01b0382165f818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f901cf33fa99058338f58a1ad2890c92795108f69df2e890258a0084ed04a2b62910160405180910390a15050565b610707610b01565b6001600160a01b03811661076c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cb565b61077581610b5b565b50565b6001600160a01b0383166107da5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105cb565b6001600160a01b03821661083b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105cb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6108a684846105ee565b90505f19811461090d57818110156109005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105cb565b61090d8484848403610778565b50505050565b6001600160a01b0383166109395760405162461bcd60e51b81526004016105cb90611141565b6001600160a01b03821661095f5760405162461bcd60e51b81526004016105cb90611186565b600b545f8290036109755761090d84845f610bac565b305f908152602081905260409020546007546001600160a01b038681169116148015906109ac5750600754600160a01b900460ff16155b80156109d057506001600160a01b0385165f908152600e602052604090205460ff16155b80156109f457506001600160a01b0384165f908152600e602052604090205460ff16155b15610a2a576007805460ff60a01b1916600160a01b1790558015610a1c57610a1c8183610cd4565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152600e602052604090205460ff600160a01b909204821615911680610a7657506001600160a01b0385165f908152600e602052604090205460ff165b80610aa857506007546001600160a01b03878116911614801590610aa857506007546001600160a01b03868116911614155b15610ab057505f5b8015610aee575f610acc6064610ac68787610d3e565b90610d50565b90508015610aec57610adf873083610bac565b610ae98582610d5b565b94505b505b610af9868686610bac565b505050505050565b6005546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105cb565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316610bd25760405162461bcd60e51b81526004016105cb90611141565b6001600160a01b038216610bf85760405162461bcd60e51b81526004016105cb90611186565b6001600160a01b0383165f9081526020819052604090205481811015610c6f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105cb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361090d565b610cdd82610d6b565b5f4790505f610cfb83610ac6600c5485610d3e90919063ffffffff16565b90505f610d088383610d5b565b600854909150610d21906001600160a01b031683610e9a565b600954610d37906001600160a01b031682610e9a565b5050505050565b5f610d4982846111c9565b9392505050565b5f610d4982846111e0565b5f610d4982846111ff565b505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610d9e57610d9e611212565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610df5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e199190611226565b81600181518110610e2c57610e2c611212565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790610e719085905f90869030904290600401611241565b5f604051808303815f87803b158015610e88575f80fd5b505af1158015610af9573d5f803e3d5ffd5b80471015610eea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105cb565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610f33576040519150601f19603f3d011682016040523d82523d5f602084013e610f38565b606091505b5050905080610d665760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105cb565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610775575f80fd5b5f8060408385031215611009575f80fd5b823561101481610fe4565b946020939093013593505050565b5f805f60608486031215611034575f80fd5b833561103f81610fe4565b9250602084013561104f81610fe4565b929592945050506040919091013590565b5f60208284031215611070575f80fd5b8135610d4981610fe4565b5f806040838503121561108c575f80fd5b823561109781610fe4565b915060208301356110a781610fe4565b809150509250929050565b5f80604083850312156110c3575f80fd5b82356110ce81610fe4565b9150602083013580151581146110a7575f80fd5b600181811c908216806110f657607f821691505b60208210810361111457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104f6576104f661111a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176104f6576104f661111a565b5f826111fa57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104f6576104f661111a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611236575f80fd5b8151610d4981610fe4565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156112915784516001600160a01b03168352938301939183019160010161126c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d4f5f6e6f8b7edaa8cdc0a05426ecafe1a86d63d2063914e6c8dbfdf63cb6d9964736f6c63430008190033

Deployed Bytecode

0x60806040526004361061014a575f3560e01c8063715018a6116100b3578063a9059cbb1161006d578063a9059cbb146103a3578063cdcb40cb146103c2578063dd62ed3e146103d7578063df8408fe146103f6578063f2fde38b14610415578063f887ea4014610434575f80fd5b8063715018a61461030b5780638da5cb5b1461032157806395d89b411461033e57806396920e3414610352578063a457c2d714610371578063a86f42cb14610390575f80fd5b806326991cc81161010457806326991cc8146102195780632d3e474a14610250578063313ce5671461026f578063395093511461028a5780635342acb4146102a957806370a08231146102d7575f80fd5b806306fdde0314610155578063095ea7b31461017f5780630d0cb54a146101ae57806318160ddd146101d1578063228cb733146101e557806323b872dd146101fa575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b50610169610453565b6040516101769190610faf565b60405180910390f35b34801561018a575f80fd5b5061019e610199366004610ff8565b6104e3565b6040519015158152602001610176565b3480156101b9575f80fd5b506101c3600d5481565b604051908152602001610176565b3480156101dc575f80fd5b506002546101c3565b3480156101f0575f80fd5b506101c3600b5481565b348015610205575f80fd5b5061019e610214366004611022565b6104fc565b348015610224575f80fd5b50600754610238906001600160a01b031681565b6040516001600160a01b039091168152602001610176565b34801561025b575f80fd5b50600854610238906001600160a01b031681565b34801561027a575f80fd5b5060405160098152602001610176565b348015610295575f80fd5b5061019e6102a4366004610ff8565b61051f565b3480156102b4575f80fd5b5061019e6102c3366004611060565b600e6020525f908152604090205460ff1681565b3480156102e2575f80fd5b506101c36102f1366004611060565b6001600160a01b03165f9081526020819052604090205490565b348015610316575f80fd5b5061031f610540565b005b34801561032c575f80fd5b506005546001600160a01b0316610238565b348015610349575f80fd5b50610169610553565b34801561035d575f80fd5b50600954610238906001600160a01b031681565b34801561037c575f80fd5b5061019e61038b366004610ff8565b610562565b34801561039b575f80fd5b506102385f81565b3480156103ae575f80fd5b5061019e6103bd366004610ff8565b6105e1565b3480156103cd575f80fd5b506101c3600c5481565b3480156103e2575f80fd5b506101c36103f136600461107b565b6105ee565b348015610401575f80fd5b5061031f6104103660046110b2565b610618565b348015610420575f80fd5b5061031f61042f366004611060565b6106ff565b34801561043f575f80fd5b50600654610238906001600160a01b031681565b606060038054610462906110e2565b80601f016020809104026020016040519081016040528092919081815260200182805461048e906110e2565b80156104d95780601f106104b0576101008083540402835291602001916104d9565b820191905f5260205f20905b8154815290600101906020018083116104bc57829003601f168201915b5050505050905090565b5f336104f0818585610778565b60019150505b92915050565b5f3361050985828561089b565b610514858585610913565b506001949350505050565b5f336104f081858561053183836105ee565b61053b919061112e565b610778565b610548610b01565b6105515f610b5b565b565b606060048054610462906110e2565b5f338161056f82866105ee565b9050838110156105d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6105148286868403610778565b5f336104f0818585610913565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610620610b01565b6001600160a01b0382165f908152600e602052604090205481151560ff90911615150361069d5760405162461bcd60e51b815260206004820152602560248201527f5468652077616c6c657420697320616c7265616479206861732074686174207660448201526430b63ab29760d91b60648201526084016105cb565b6001600160a01b0382165f818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f901cf33fa99058338f58a1ad2890c92795108f69df2e890258a0084ed04a2b62910160405180910390a15050565b610707610b01565b6001600160a01b03811661076c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cb565b61077581610b5b565b50565b6001600160a01b0383166107da5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105cb565b6001600160a01b03821661083b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105cb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6108a684846105ee565b90505f19811461090d57818110156109005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105cb565b61090d8484848403610778565b50505050565b6001600160a01b0383166109395760405162461bcd60e51b81526004016105cb90611141565b6001600160a01b03821661095f5760405162461bcd60e51b81526004016105cb90611186565b600b545f8290036109755761090d84845f610bac565b305f908152602081905260409020546007546001600160a01b038681169116148015906109ac5750600754600160a01b900460ff16155b80156109d057506001600160a01b0385165f908152600e602052604090205460ff16155b80156109f457506001600160a01b0384165f908152600e602052604090205460ff16155b15610a2a576007805460ff60a01b1916600160a01b1790558015610a1c57610a1c8183610cd4565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152600e602052604090205460ff600160a01b909204821615911680610a7657506001600160a01b0385165f908152600e602052604090205460ff165b80610aa857506007546001600160a01b03878116911614801590610aa857506007546001600160a01b03868116911614155b15610ab057505f5b8015610aee575f610acc6064610ac68787610d3e565b90610d50565b90508015610aec57610adf873083610bac565b610ae98582610d5b565b94505b505b610af9868686610bac565b505050505050565b6005546001600160a01b031633146105515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105cb565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316610bd25760405162461bcd60e51b81526004016105cb90611141565b6001600160a01b038216610bf85760405162461bcd60e51b81526004016105cb90611186565b6001600160a01b0383165f9081526020819052604090205481811015610c6f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105cb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361090d565b610cdd82610d6b565b5f4790505f610cfb83610ac6600c5485610d3e90919063ffffffff16565b90505f610d088383610d5b565b600854909150610d21906001600160a01b031683610e9a565b600954610d37906001600160a01b031682610e9a565b5050505050565b5f610d4982846111c9565b9392505050565b5f610d4982846111e0565b5f610d4982846111ff565b505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610d9e57610d9e611212565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610df5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e199190611226565b81600181518110610e2c57610e2c611212565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790610e719085905f90869030904290600401611241565b5f604051808303815f87803b158015610e88575f80fd5b505af1158015610af9573d5f803e3d5ffd5b80471015610eea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105cb565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610f33576040519150601f19603f3d011682016040523d82523d5f602084013e610f38565b606091505b5050905080610d665760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105cb565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610775575f80fd5b5f8060408385031215611009575f80fd5b823561101481610fe4565b946020939093013593505050565b5f805f60608486031215611034575f80fd5b833561103f81610fe4565b9250602084013561104f81610fe4565b929592945050506040919091013590565b5f60208284031215611070575f80fd5b8135610d4981610fe4565b5f806040838503121561108c575f80fd5b823561109781610fe4565b915060208301356110a781610fe4565b809150509250929050565b5f80604083850312156110c3575f80fd5b82356110ce81610fe4565b9150602083013580151581146110a7575f80fd5b600181811c908216806110f657607f821691505b60208210810361111457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104f6576104f661111a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176104f6576104f661111a565b5f826111fa57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104f6576104f661111a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611236575f80fd5b8151610d4981610fe4565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156112915784516001600160a01b03168352938301939183019160010161126c565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d4f5f6e6f8b7edaa8cdc0a05426ecafe1a86d63d2063914e6c8dbfdf63cb6d9964736f6c63430008190033

Deployed Bytecode Sourcemap

30651:3848:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15460:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17877:226;;;;;;;;;;-1:-1:-1;17877:226:0;;;;;:::i;:::-;;:::i;:::-;;;1058:14:1;;1051:22;1033:41;;1021:2;1006:18;17877:226:0;893:187:1;31089:32:0;;;;;;;;;;;;;;;;;;;1231:25:1;;;1219:2;1204:18;31089:32:0;1085:177:1;16580:108:0;;;;;;;;;;-1:-1:-1;16668:12:0;;16580:108;;31022:25;;;;;;;;;;;;;;;;18683:295;;;;;;;;;;-1:-1:-1;18683:295:0;;;;;:::i;:::-;;:::i;30846:23::-;;;;;;;;;;-1:-1:-1;30846:23:0;;;;-1:-1:-1;;;;;30846:23:0;;;;;;-1:-1:-1;;;;;1892:32:1;;;1874:51;;1862:2;1847:18;30846:23:0;1728:203:1;30908:24:0;;;;;;;;;;-1:-1:-1;30908:24:0;;;;-1:-1:-1;;;;;30908:24:0;;;31942:92;;;;;;;;;;-1:-1:-1;31942:92:0;;32025:1;2078:36:1;;2066:2;2051:18;31942:92:0;1936:184:1;19387:263:0;;;;;;;;;;-1:-1:-1;19387:263:0;;;;;:::i;:::-;;:::i;31128:49::-;;;;;;;;;;-1:-1:-1;31128:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16751:143;;;;;;;;;;-1:-1:-1;16751:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16868:18:0;16841:7;16868:18;;;;;;;;;;;;16751:143;28662:103;;;;;;;;;;;;;:::i;:::-;;28014:87;;;;;;;;;;-1:-1:-1;28087:6:0;;-1:-1:-1;;;;;28087:6:0;28014:87;;15679:104;;;;;;;;;;;;;:::i;30939:22::-;;;;;;;;;;-1:-1:-1;30939:22:0;;;;-1:-1:-1;;;;;30939:22:0;;;20153:498;;;;;;;;;;-1:-1:-1;20153:498:0;;;;;:::i;:::-;;:::i;30764:45::-;;;;;;;;;;;;30807:1;30764:45;;17100:218;;;;;;;;;;-1:-1:-1;17100:218:0;;;;;:::i;:::-;;:::i;31054:28::-;;;;;;;;;;;;;;;;17381:176;;;;;;;;;;-1:-1:-1;17381:176:0;;;;;:::i;:::-;;:::i;32042:283::-;;;;;;;;;;-1:-1:-1;32042:283:0;;;;;:::i;:::-;;:::i;28920:238::-;;;;;;;;;;-1:-1:-1;28920:238:0;;;;;:::i;:::-;;:::i;30818:21::-;;;;;;;;;;-1:-1:-1;30818:21:0;;;;-1:-1:-1;;;;;30818:21:0;;;15460:100;15514:13;15547:5;15540:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15460:100;:::o;17877:226::-;17985:4;680:10;18041:32;680:10;18057:7;18066:6;18041:8;:32::i;:::-;18091:4;18084:11;;;17877:226;;;;;:::o;18683:295::-;18814:4;680:10;18872:38;18888:4;680:10;18903:6;18872:15;:38::i;:::-;18921:27;18931:4;18937:2;18941:6;18921:9;:27::i;:::-;-1:-1:-1;18966:4:0;;18683:295;-1:-1:-1;;;;18683:295:0:o;19387:263::-;19500:4;680:10;19556:64;680:10;19572:7;19609:10;19581:25;680:10;19572:7;19581:9;:25::i;:::-;:38;;;;:::i;:::-;19556:8;:64::i;28662:103::-;27900:13;:11;:13::i;:::-;28727:30:::1;28754:1;28727:18;:30::i;:::-;28662:103::o:0;15679:104::-;15735:13;15768:7;15761:14;;;;;:::i;20153:498::-;20271:4;680:10;20271:4;20354:25;680:10;20371:7;20354:9;:25::i;:::-;20327:52;;20432:15;20412:16;:35;;20390:122;;;;-1:-1:-1;;;20390:122:0;;4264:2:1;20390:122:0;;;4246:21:1;4303:2;4283:18;;;4276:30;4342:34;4322:18;;;4315:62;-1:-1:-1;;;4393:18:1;;;4386:35;4438:19;;20390:122:0;;;;;;;;;20548:60;20557:5;20564:7;20592:15;20573:16;:34;20548:8;:60::i;17100:218::-;17204:4;680:10;17260:28;680:10;17277:2;17281:6;17260:9;:28::i;17381:176::-;-1:-1:-1;;;;;17522:18:0;;;17495:7;17522:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17381:176::o;32042:283::-;27900:13;:11;:13::i;:::-;-1:-1:-1;;;;;32136:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:40;::::1;;:26;::::0;;::::1;:40;;::::0;32128:90:::1;;;::::0;-1:-1:-1;;;32128:90:0;;4670:2:1;32128:90:0::1;::::0;::::1;4652:21:1::0;4709:2;4689:18;;;4682:30;4748:34;4728:18;;;4721:62;-1:-1:-1;;;4799:18:1;;;4792:35;4844:19;;32128:90:0::1;4468:401:1::0;32128:90:0::1;-1:-1:-1::0;;;;;32229:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:39;;-1:-1:-1;;32229:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32284:33;;5042:51:1;;;5109:18;;;5102:50;32284:33:0::1;::::0;5015:18:1;32284:33:0::1;;;;;;;32042:283:::0;;:::o;28920:238::-;27900:13;:11;:13::i;:::-;-1:-1:-1;;;;;29023:22:0;::::1;29001:110;;;::::0;-1:-1:-1;;;29001:110:0;;5365:2:1;29001:110:0::1;::::0;::::1;5347:21:1::0;5404:2;5384:18;;;5377:30;5443:34;5423:18;;;5416:62;-1:-1:-1;;;5494:18:1;;;5487:36;5540:19;;29001:110:0::1;5163:402:1::0;29001:110:0::1;29122:28;29141:8;29122:18;:28::i;:::-;28920:238:::0;:::o;24279:380::-;-1:-1:-1;;;;;24415:19:0;;24407:68;;;;-1:-1:-1;;;24407:68:0;;5772:2:1;24407:68:0;;;5754:21:1;5811:2;5791:18;;;5784:30;5850:34;5830:18;;;5823:62;-1:-1:-1;;;5901:18:1;;;5894:34;5945:19;;24407:68:0;5570:400:1;24407:68:0;-1:-1:-1;;;;;24494:21:0;;24486:68;;;;-1:-1:-1;;;24486:68:0;;6177:2:1;24486:68:0;;;6159:21:1;6216:2;6196:18;;;6189:30;6255:34;6235:18;;;6228:62;-1:-1:-1;;;6306:18:1;;;6299:32;6348:19;;24486:68:0;5975:398:1;24486:68:0;-1:-1:-1;;;;;24567:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24619:32;;1231:25:1;;;24619:32:0;;1204:18:1;24619:32:0;;;;;;;24279:380;;;:::o;24950:502::-;25085:24;25112:25;25122:5;25129:7;25112:9;:25::i;:::-;25085:52;;-1:-1:-1;;25152:16:0;:37;25148:297;;25252:6;25232:16;:26;;25206:117;;;;-1:-1:-1;;;25206:117:0;;6580:2:1;25206:117:0;;;6562:21:1;6619:2;6599:18;;;6592:30;6658:31;6638:18;;;6631:59;6707:18;;25206:117:0;6378:353:1;25206:117:0;25367:51;25376:5;25383:7;25411:6;25392:16;:25;25367:8;:51::i;:::-;25074:378;24950:502;;;:::o;32333:1367::-;-1:-1:-1;;;;;32465:16:0;;32457:66;;;;-1:-1:-1;;;32457:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32542:14:0;;32534:62;;;;-1:-1:-1;;;32534:62:0;;;;;;;:::i;:::-;32638:6;;32617:18;32661:11;;;32657:93;;32689:28;32705:4;32711:2;32715:1;32689:15;:28::i;32657:93::-;32804:4;32762:21;16868:18;;;;;;;;;;;32849:8;;-1:-1:-1;;;;;32841:16:0;;;32849:8;;32841:16;;;;:42;;-1:-1:-1;32875:8:0;;-1:-1:-1;;;32875:8:0;;;;32874:9;32841:42;:83;;;;-1:-1:-1;;;;;;32901:23:0;;;;;;:17;:23;;;;;;;;32900:24;32841:83;:122;;;;-1:-1:-1;;;;;;32942:21:0;;;;;;:17;:21;;;;;;;;32941:22;32841:122;32823:342;;;32990:8;:15;;-1:-1:-1;;;;32990:15:0;-1:-1:-1;;;32990:15:0;;;33023:17;;33020:103;;33061:46;33081:13;33096:10;33061:19;:46::i;:::-;33137:8;:16;;-1:-1:-1;;;;33137:16:0;;;32823:342;33193:8;;-1:-1:-1;;;;;33218:23:0;;33177:12;33218:23;;;:17;:23;;;;;;33193:8;-1:-1:-1;;;33193:8:0;;;;;33192:9;;33218:23;;:48;;-1:-1:-1;;;;;;33245:21:0;;;;;;:17;:21;;;;;;;;33218:48;:88;;;-1:-1:-1;33279:8:0;;-1:-1:-1;;;;;33271:16:0;;;33279:8;;33271:16;;;;:34;;-1:-1:-1;33297:8:0;;-1:-1:-1;;;;;33291:14:0;;;33297:8;;33291:14;;33271:34;33214:136;;;-1:-1:-1;33333:5:0;33214:136;33366:7;33362:285;;;33390:17;33438:31;33465:3;33438:22;:6;33449:10;33438;:22::i;:::-;:26;;:31::i;:::-;33426:43;-1:-1:-1;33490:13:0;;33486:150;;33524:47;33540:4;33554;33561:9;33524:15;:47::i;:::-;33599:21;:6;33610:9;33599:10;:21::i;:::-;33590:30;;33486:150;33375:272;33362:285;33659:33;33675:4;33681:2;33685:6;33659:15;:33::i;:::-;32446:1254;;;32333:1367;;;:::o;28179:132::-;28087:6;;-1:-1:-1;;;;;28087:6:0;680:10;28243:23;28235:68;;;;-1:-1:-1;;;28235:68:0;;7748:2:1;28235:68:0;;;7730:21:1;;;7767:18;;;7760:30;7826:34;7806:18;;;7799:62;7878:18;;28235:68:0;7546:356:1;29318:191:0;29411:6;;;-1:-1:-1;;;;;29428:17:0;;;-1:-1:-1;;;;;;29428:17:0;;;;;;;29461:40;;29411:6;;;29428:17;29411:6;;29461:40;;29392:16;;29461:40;29381:128;29318:191;:::o;21121:877::-;-1:-1:-1;;;;;21252:18:0;;21244:68;;;;-1:-1:-1;;;21244:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21331:16:0;;21323:64;;;;-1:-1:-1;;;21323:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21473:15:0;;21451:19;21473:15;;;;;;;;;;;21521:21;;;;21499:109;;;;-1:-1:-1;;;21499:109:0;;8109:2:1;21499:109:0;;;8091:21:1;8148:2;8128:18;;;8121:30;8187:34;8167:18;;;8160:62;-1:-1:-1;;;8238:18:1;;;8231:36;8284:19;;21499:109:0;7907:402:1;21499:109:0;-1:-1:-1;;;;;21644:15:0;;;:9;:15;;;;;;;;;;;21662:20;;;21644:38;;21862:13;;;;;;;;;;:23;;;;;;21914:26;;1231:25:1;;;21862:13:0;;21914:26;;1204:18:1;21914:26:0;;;;;;;21953:37;26052:125;33708:405;33795:22;33807:9;33795:11;:22::i;:::-;33830:14;33847:21;33830:38;;33879:17;33899:38;33925:11;33899:21;33910:9;;33899:6;:10;;:21;;;;:::i;:38::-;33879:58;-1:-1:-1;33948:21:0;33972;:6;33879:58;33972:10;:21::i;:::-;34022:9;;33948:45;;-1:-1:-1;34014:39:0;;-1:-1:-1;;;;;34022:9:0;34043;34014:28;:39::i;:::-;34072:7;;34064:41;;-1:-1:-1;;;;;34072:7:0;34091:13;34064:26;:41::i;:::-;33784:329;;;33708:405;;:::o;4568:98::-;4626:7;4653:5;4657:1;4653;:5;:::i;:::-;4646:12;4568:98;-1:-1:-1;;;4568:98:0:o;4967:::-;5025:7;5052:5;5056:1;5052;:5;:::i;4211:98::-;4269:7;4296:5;4300:1;4296;:5;:::i;26052:125::-;;;;:::o;34121:375::-;34206:16;;;34220:1;34206:16;;;;;;;;34182:21;;34206:16;;;;;;;;;;-1:-1:-1;34206:16:0;34182:40;;34251:4;34233;34238:1;34233:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34233:23:0;;;:7;;;;;;;;;;:23;;;;34277:6;;:13;;;-1:-1:-1;;;34277:13:0;;;;:6;;;;;:11;;:13;;;;;34233:7;;34277:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34267:4;34272:1;34267:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34267:23:0;;;:7;;;;;;;;;:23;34301:6;;:187;;-1:-1:-1;;;34301:187:0;;:6;;;:57;;:187;;34373:11;;34301:6;;34415:4;;34442;;34462:15;;34301:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30253:391;30382:6;30357:21;:31;;30335:110;;;;-1:-1:-1;;;30335:110:0;;10549:2:1;30335:110:0;;;10531:21:1;10588:2;10568:18;;;10561:30;10627:31;10607:18;;;10600:59;10676:18;;30335:110:0;10347:353:1;30335:110:0;30459:12;30477:9;-1:-1:-1;;;;;30477:14:0;30499:6;30477:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30458:52;;;30543:7;30521:115;;;;-1:-1:-1;;;30521:115:0;;11117:2:1;30521:115:0;;;11099:21:1;11156:2;11136:18;;;11129:30;11195:34;11175:18;;;11168:62;11266:28;11246:18;;;11239:56;11312:19;;30521:115:0;10915:422:1;14:418;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:315;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;878:2;863:18;;;;850:32;;-1:-1:-1;;;573:315:1:o;1267:456::-;1344:6;1352;1360;1413:2;1401:9;1392:7;1388:23;1384:32;1381:52;;;1429:1;1426;1419:12;1381:52;1468:9;1455:23;1487:31;1512:5;1487:31;:::i;:::-;1537:5;-1:-1:-1;1594:2:1;1579:18;;1566:32;1607:33;1566:32;1607:33;:::i;:::-;1267:456;;1659:7;;-1:-1:-1;;;1713:2:1;1698:18;;;;1685:32;;1267:456::o;2125:247::-;2184:6;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;2377:388::-;2445:6;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2561:9;2548:23;2580:31;2605:5;2580:31;:::i;:::-;2630:5;-1:-1:-1;2687:2:1;2672:18;;2659:32;2700:33;2659:32;2700:33;:::i;:::-;2752:7;2742:17;;;2377:388;;;;;:::o;2770:416::-;2835:6;2843;2896:2;2884:9;2875:7;2871:23;2867:32;2864:52;;;2912:1;2909;2902:12;2864:52;2951:9;2938:23;2970:31;2995:5;2970:31;:::i;:::-;3020:5;-1:-1:-1;3077:2:1;3062:18;;3049:32;3119:15;;3112:23;3100:36;;3090:64;;3150:1;3147;3140:12;3415:380;3494:1;3490:12;;;;3537;;;3558:61;;3612:4;3604:6;3600:17;3590:27;;3558:61;3665:2;3657:6;3654:14;3634:18;3631:38;3628:161;;3711:10;3706:3;3702:20;3699:1;3692:31;3746:4;3743:1;3736:15;3774:4;3771:1;3764:15;3628:161;;3415:380;;;:::o;3800:127::-;3861:10;3856:3;3852:20;3849:1;3842:31;3892:4;3889:1;3882:15;3916:4;3913:1;3906:15;3932:125;3997:9;;;4018:10;;;4015:36;;;4031:18;;:::i;6736:401::-;6938:2;6920:21;;;6977:2;6957:18;;;6950:30;7016:34;7011:2;6996:18;;6989:62;-1:-1:-1;;;7082:2:1;7067:18;;7060:35;7127:3;7112:19;;6736:401::o;7142:399::-;7344:2;7326:21;;;7383:2;7363:18;;;7356:30;7422:34;7417:2;7402:18;;7395:62;-1:-1:-1;;;7488:2:1;7473:18;;7466:33;7531:3;7516:19;;7142:399::o;8314:168::-;8387:9;;;8418;;8435:15;;;8429:22;;8415:37;8405:71;;8456:18;;:::i;8487:217::-;8527:1;8553;8543:132;;8597:10;8592:3;8588:20;8585:1;8578:31;8632:4;8629:1;8622:15;8660:4;8657:1;8650:15;8543:132;-1:-1:-1;8689:9:1;;8487:217::o;8709:128::-;8776:9;;;8797:11;;;8794:37;;;8811:18;;:::i;8974:127::-;9035:10;9030:3;9026:20;9023:1;9016:31;9066:4;9063:1;9056:15;9090:4;9087:1;9080:15;9106:251;9176:6;9229:2;9217:9;9208:7;9204:23;9200:32;9197:52;;;9245:1;9242;9235:12;9197:52;9277:9;9271:16;9296:31;9321:5;9296:31;:::i;9362:980::-;9624:4;9672:3;9661:9;9657:19;9703:6;9692:9;9685:25;9729:2;9767:6;9762:2;9751:9;9747:18;9740:34;9810:3;9805:2;9794:9;9790:18;9783:31;9834:6;9869;9863:13;9900:6;9892;9885:22;9938:3;9927:9;9923:19;9916:26;;9977:2;9969:6;9965:15;9951:29;;9998:1;10008:195;10022:6;10019:1;10016:13;10008:195;;;10087:13;;-1:-1:-1;;;;;10083:39:1;10071:52;;10178:15;;;;10143:12;;;;10119:1;10037:9;10008:195;;;-1:-1:-1;;;;;;;10259:32:1;;;;10254:2;10239:18;;10232:60;-1:-1:-1;;;10323:3:1;10308:19;10301:35;10220:3;9362:980;-1:-1:-1;;;9362:980:1:o

Swarm Source

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