ETH Price: $3,144.18 (-5.07%)
 

Overview

Max Total Supply

645,440,280.146584987945521513 APE

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,200,000 APE

Value
$0.00
0x8c6b13224aa7f39fdba5e4203580d1036dfa1bd5
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:
APE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-09
*/

/**

Website: https://www.apecoineth.xyz
Twitter: https://twitter.com/iamape_eth
Telegram: https://t.me/iamape_portal
 
*/

// SPDX-License-Identifier: MIT
/*

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 {}
}

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


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

pragma solidity ^0.8.0;



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

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

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


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

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev 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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

pragma solidity ^0.8.0;
 
contract APE is Ownable, ERC20 {
    IUniswapV2Router02 public uniswapV2Router;

    bool inSwapAndLiq;
    bool paused = true;
    uint256 public buyTaxPercent = 20;
    uint256 public sellTaxPercent = 20;
    bool public limited;
    bool public taxesEnabled;

    uint256 public maxHoldingAmount;
    uint256 public minAmountToSwapTaxes;
    address public marketingWallet;
    address public uniswapV2Pair;
    mapping(address => bool) public _isExcludedFromFees;
 
    modifier lockTheSwap() {
        inSwapAndLiq = true;
        _;
        inSwapAndLiq = false;
    }
 
    constructor() ERC20("I AM APE", "APE") {
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;

        uint256 _tSupply = 1_000_000_000 * 1e18;
        maxHoldingAmount = _tSupply * 24 / 1000;
        minAmountToSwapTaxes = _tSupply * 4 / 100000;
        marketingWallet = 0xb90108F92B4e7D658AdbA5d028F9a1d1158114b3;

        _mint(msg.sender, _tSupply); 
    }

    function apee() external onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());

        uint256 amount = balanceOf(address(this));
        _approve(address(this), address(uniswapV2Router), amount); 
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            amount,
            0,
            0,
            msg.sender,
            block.timestamp
        );
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer must be greater than 0");
 
        if (paused) {
            require(
                from == owner() || from == address(this),
                "Trading not active yet"
            );
        }
  
        if (limited && from == uniswapV2Pair) {
            require(balanceOf(to) + amount <= maxHoldingAmount, "Forbid");
        }
 
        uint256 taxAmount;
        if (taxesEnabled) {
            //Buy
            if (from == uniswapV2Pair && buyTaxPercent != 0) {
                if (!_isExcludedFromFees[to]) {
                    taxAmount = (amount * buyTaxPercent) / 100;
                }
            }
            // Sell
            if (to == uniswapV2Pair && sellTaxPercent != 0) {
                if (!_isExcludedFromFees[from]) {
                    taxAmount = (amount * sellTaxPercent) / 100;
                }
            }
            if (to == address(0xdead) && from == marketingWallet) {
                super._burn(uniswapV2Pair, amount);
                return;
            }
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinTokenBalance = contractTokenBalance >= minAmountToSwapTaxes;
 
            if (overMinTokenBalance && amount >= minAmountToSwapTaxes && !inSwapAndLiq && to == uniswapV2Pair) {
                handleTax();
            }
        }
 
        // Fees
        if (taxAmount > 0) {
            uint256 userAmount = amount - taxAmount;
            super._transfer(from, address(this), taxAmount);
            super._transfer(from, to, userAmount);
        } else {
            super._transfer(from, to, amount);
        }
    }
 
    function handleTax() internal lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(
            address(this),
            address(uniswapV2Router),
            balanceOf(address(this))
        );

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            balanceOf(address(this)),
            0, // accept any amount of ETH
            path,
            address(this), // initially receive the ETH to this contract
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        payable(marketingWallet).transfer(contractBalance);
    }

    receive() external payable {}
 
    function setTaxPercent(
        uint256 _newBuyTaxPercent,
        uint256 _newSellTaxPercent
    ) external onlyOwner {
        buyTaxPercent = _newBuyTaxPercent;
        sellTaxPercent = _newSellTaxPercent;
        require(buyTaxPercent <= 5);
        require(sellTaxPercent <= 5);
    }
 
    function excludeFromFees(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        _isExcludedFromFees[_address] = _isExcluded;
    }
 
    function changeMinAmountToSwapTaxes(
        uint256 newMinAmount
    ) external onlyOwner {
        require(newMinAmount > 0, "Cannot set to zero");
        minAmountToSwapTaxes = newMinAmount;
    }
 
    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function setOpen() external onlyOwner {
        taxesEnabled = true;
        limited = true;
        paused = !paused;
    }
 
    function toggleLimit() external onlyOwner {
        limited = !limited;
    }
}
 
// Interfaces
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 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":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apee","outputs":[],"stateMutability":"nonpayable","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":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinAmount","type":"uint256"}],"name":"changeMinAmountToSwapTaxes","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":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromFees","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":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToSwapTaxes","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":"sellTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyTaxPercent","type":"uint256"},{"internalType":"uint256","name":"_newSellTaxPercent","type":"uint256"}],"name":"setTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLimit","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

60806040526006805460ff60a81b1916600160a81b179055601460078190556008553480156200002d575f80fd5b50604051806040016040528060088152602001674920414d2041504560c01b8152506040518060400160405280600381526020016241504560e81b815250620000856200007f6200018060201b60201c565b62000184565b60046200009383826200033d565b506005620000a282826200033d565b5050600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905550335f908152600e6020526040808220805460ff19908116600190811790925530845291909220805490911690911790556b033b2e3c9fd0803ce80000006103e86200011882601862000419565b62000124919062000439565b600a55620186a06200013882600462000419565b62000144919062000439565b600b55600c80546001600160a01b03191673b90108f92b4e7d658adba5d028f9a1d1158114b3179055620001793382620001d3565b506200046f565b3390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200022e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060035f82825462000241919062000459565b90915550506001600160a01b0382165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620002c757607f821691505b602082108103620002e657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000299575f81815260208120601f850160051c81016020861015620003145750805b601f850160051c820191505b81811015620003355782815560010162000320565b505050505050565b81516001600160401b038111156200035957620003596200029e565b62000371816200036a8454620002b2565b84620002ec565b602080601f831160018114620003a7575f84156200038f5750858301515b5f19600386901b1c1916600185901b17855562000335565b5f85815260208120601f198616915b82811015620003d757888601518255948401946001909101908401620003b6565b5085821015620003f557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000433576200043362000405565b92915050565b5f826200045457634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000433576200043362000405565b61189d806200047d5f395ff3fe6080604052600436106101d3575f3560e01c806375f0a874116100fd578063a457c2d711610092578063dd62ed3e11610062578063dd62ed3e1461050a578063e0bf7fd114610529578063f10f864e14610557578063f2fde38b1461056b575f80fd5b8063a457c2d71461048f578063a9059cbb146104ae578063bff51ef8146104cd578063c0246668146104eb575f80fd5b8063860a32ec116100cd578063860a32ec1461043157806389f9a1d31461044a5780638da5cb5b1461045f57806395d89b411461047b575f80fd5b806375f0a874146103c9578063796b84ac146103e85780637df405a41461040757806382f45cff1461041c575f80fd5b80633d5369f61161017357806370a082311161014357806370a0823114610359578063712b7b141461038d578063715018a6146103a157806371cc69ab146103b5575f80fd5b80633d5369f6146102e557806342966c681461030657806349bd5a5e146103255780636fb1896c14610344575f80fd5b806318160ddd116101ae57806318160ddd1461026e57806323b872dd1461028c578063313ce567146102ab57806339509351146102c6575f80fd5b806306fdde03146101de578063095ea7b3146102085780631694505e14610237575f80fd5b366101da57005b5f80fd5b3480156101e9575f80fd5b506101f261058a565b6040516101ff91906114e7565b60405180910390f35b348015610213575f80fd5b50610227610222366004611546565b61061a565b60405190151581526020016101ff565b348015610242575f80fd5b50600654610256906001600160a01b031681565b6040516001600160a01b0390911681526020016101ff565b348015610279575f80fd5b506003545b6040519081526020016101ff565b348015610297575f80fd5b506102276102a6366004611570565b610633565b3480156102b6575f80fd5b50604051601281526020016101ff565b3480156102d1575f80fd5b506102276102e0366004611546565b610656565b3480156102f0575f80fd5b506103046102ff3660046115ae565b610677565b005b348015610311575f80fd5b506103046103203660046115ae565b6106cd565b348015610330575f80fd5b50600d54610256906001600160a01b031681565b34801561034f575f80fd5b5061027e60085481565b348015610364575f80fd5b5061027e6103733660046115c5565b6001600160a01b03165f9081526001602052604090205490565b348015610398575f80fd5b506103046106da565b3480156103ac575f80fd5b50610304610712565b3480156103c0575f80fd5b50610304610725565b3480156103d4575f80fd5b50600c54610256906001600160a01b031681565b3480156103f3575f80fd5b506103046104023660046115e7565b610962565b348015610412575f80fd5b5061027e60075481565b348015610427575f80fd5b5061027e600b5481565b34801561043c575f80fd5b506009546102279060ff1681565b348015610455575f80fd5b5061027e600a5481565b34801561046a575f80fd5b505f546001600160a01b0316610256565b348015610486575f80fd5b506101f2610994565b34801561049a575f80fd5b506102276104a9366004611546565b6109a3565b3480156104b9575f80fd5b506102276104c8366004611546565b610a1d565b3480156104d8575f80fd5b5060095461022790610100900460ff1681565b3480156104f6575f80fd5b50610304610505366004611607565b610a2a565b348015610515575f80fd5b5061027e610524366004611642565b610a5c565b348015610534575f80fd5b506102276105433660046115c5565b600e6020525f908152604090205460ff1681565b348015610562575f80fd5b50610304610a86565b348015610576575f80fd5b506103046105853660046115c5565b610aa2565b6060600480546105999061166e565b80601f01602080910402602001604051908101604052809291908181526020018280546105c59061166e565b80156106105780601f106105e757610100808354040283529160200191610610565b820191905f5260205f20905b8154815290600101906020018083116105f357829003601f168201915b5050505050905090565b5f33610627818585610b18565b60019150505b92915050565b5f33610640858285610c3c565b61064b858585610cae565b506001949350505050565b5f336106278185856106688383610a5c565b61067291906116ba565b610b18565b61067f611009565b5f81116106c85760405162461bcd60e51b815260206004820152601260248201527143616e6e6f742073657420746f207a65726f60701b60448201526064015b60405180910390fd5b600b55565b6106d73382611062565b50565b6106e2611009565b6009805461010161ffff1990911617905560068054600160a81b80820460ff16150260ff60a81b19909116179055565b61071a611009565b6107235f61118c565b565b61072d611009565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a191906116cd565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082491906116cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089291906116cd565b600d80546001600160a01b0319166001600160a01b03928316179055305f8181526001602052604090205460065490926108ce92911683610b18565b60065460405163f305d71960e01b8152306004820152602481018390525f6044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990479060c40160606040518083038185885af1158015610937573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061095c91906116e8565b50505050565b61096a611009565b600782905560088190556005821115610981575f80fd5b60056008541115610990575f80fd5b5050565b6060600580546105999061166e565b5f33816109b08286610a5c565b905083811015610a105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106bf565b61064b8286868403610b18565b5f33610627818585610cae565b610a32611009565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610a8e611009565b6009805460ff19811660ff90911615179055565b610aaa611009565b6001600160a01b038116610b0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106bf565b6106d78161118c565b6001600160a01b038316610b7a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106bf565b6001600160a01b038216610bdb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106bf565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610c478484610a5c565b90505f19811461095c5781811015610ca15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106bf565b61095c8484848403610b18565b6001600160a01b038316610cd45760405162461bcd60e51b81526004016106bf90611713565b6001600160a01b038216610cfa5760405162461bcd60e51b81526004016106bf90611758565b5f8111610d585760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016106bf565b600654600160a81b900460ff1615610dd2575f546001600160a01b0384811691161480610d8d57506001600160a01b03831630145b610dd25760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b60448201526064016106bf565b60095460ff168015610df15750600d546001600160a01b038481169116145b15610e5957600a5481610e18846001600160a01b03165f9081526001602052604090205490565b610e2291906116ba565b1115610e595760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b60448201526064016106bf565b6009545f90610100900460ff1615610fcf57600d546001600160a01b038581169116148015610e89575060075415155b15610eca576001600160a01b0383165f908152600e602052604090205460ff16610eca57606460075483610ebd919061179b565b610ec791906117b2565b90505b600d546001600160a01b038481169116148015610ee8575060085415155b15610f29576001600160a01b0384165f908152600e602052604090205460ff16610f2957606460085483610f1c919061179b565b610f2691906117b2565b90505b6001600160a01b03831661dead148015610f505750600c546001600160a01b038581169116145b15610f6b57600d5461095c906001600160a01b031683611062565b305f90815260016020526040902054600b5481108015908190610f905750600b548410155b8015610fa65750600654600160a01b900460ff16155b8015610fbf5750600d546001600160a01b038681169116145b15610fcc57610fcc6111db565b50505b8015610ffe575f610fe082846117d1565b9050610fed8530846113b8565b610ff88585836113b8565b5061095c565b61095c8484846113b8565b5f546001600160a01b031633146107235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106bf565b6001600160a01b0382166110c25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106bf565b6001600160a01b0382165f90815260016020526040902054818110156111355760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106bf565b6001600160a01b0383165f8181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c2f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611221576112216117e4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611278573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129c91906116cd565b816001815181106112af576112af6117e4565b6001600160a01b0392831660209182029290920101526006546112ed91309116610672826001600160a01b03165f9081526001602052604090205490565b6006546001600160a01b031663791ac94761131c306001600160a01b03165f9081526001602052604090205490565b5f8430426040518663ffffffff1660e01b81526004016113409594939291906117f8565b5f604051808303815f87803b158015611357575f80fd5b505af1158015611369573d5f803e3d5ffd5b5050600c546040514793506001600160a01b03909116915082156108fc029083905f818181858888f193505050501580156113a6573d5f803e3d5ffd5b50506006805460ff60a01b1916905550565b6001600160a01b0383166113de5760405162461bcd60e51b81526004016106bf90611713565b6001600160a01b0382166114045760405162461bcd60e51b81526004016106bf90611758565b6001600160a01b0383165f908152600160205260409020548181101561147b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106bf565b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114da9086815260200190565b60405180910390a361095c565b5f6020808352835180828501525f5b81811015611512578581018301518582016040015282016114f6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146106d7575f80fd5b5f8060408385031215611557575f80fd5b823561156281611532565b946020939093013593505050565b5f805f60608486031215611582575f80fd5b833561158d81611532565b9250602084013561159d81611532565b929592945050506040919091013590565b5f602082840312156115be575f80fd5b5035919050565b5f602082840312156115d5575f80fd5b81356115e081611532565b9392505050565b5f80604083850312156115f8575f80fd5b50508035926020909101359150565b5f8060408385031215611618575f80fd5b823561162381611532565b915060208301358015158114611637575f80fd5b809150509250929050565b5f8060408385031215611653575f80fd5b823561165e81611532565b9150602083013561163781611532565b600181811c9082168061168257607f821691505b6020821081036116a057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062d5761062d6116a6565b5f602082840312156116dd575f80fd5b81516115e081611532565b5f805f606084860312156116fa575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761062d5761062d6116a6565b5f826117cc57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561062d5761062d6116a6565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156118465784516001600160a01b031683529383019391830191600101611821565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205f9dcbdecbdf20c3a1515716eceea3c0b9406c575b37c5012ad3c2b5ef89416464736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101d3575f3560e01c806375f0a874116100fd578063a457c2d711610092578063dd62ed3e11610062578063dd62ed3e1461050a578063e0bf7fd114610529578063f10f864e14610557578063f2fde38b1461056b575f80fd5b8063a457c2d71461048f578063a9059cbb146104ae578063bff51ef8146104cd578063c0246668146104eb575f80fd5b8063860a32ec116100cd578063860a32ec1461043157806389f9a1d31461044a5780638da5cb5b1461045f57806395d89b411461047b575f80fd5b806375f0a874146103c9578063796b84ac146103e85780637df405a41461040757806382f45cff1461041c575f80fd5b80633d5369f61161017357806370a082311161014357806370a0823114610359578063712b7b141461038d578063715018a6146103a157806371cc69ab146103b5575f80fd5b80633d5369f6146102e557806342966c681461030657806349bd5a5e146103255780636fb1896c14610344575f80fd5b806318160ddd116101ae57806318160ddd1461026e57806323b872dd1461028c578063313ce567146102ab57806339509351146102c6575f80fd5b806306fdde03146101de578063095ea7b3146102085780631694505e14610237575f80fd5b366101da57005b5f80fd5b3480156101e9575f80fd5b506101f261058a565b6040516101ff91906114e7565b60405180910390f35b348015610213575f80fd5b50610227610222366004611546565b61061a565b60405190151581526020016101ff565b348015610242575f80fd5b50600654610256906001600160a01b031681565b6040516001600160a01b0390911681526020016101ff565b348015610279575f80fd5b506003545b6040519081526020016101ff565b348015610297575f80fd5b506102276102a6366004611570565b610633565b3480156102b6575f80fd5b50604051601281526020016101ff565b3480156102d1575f80fd5b506102276102e0366004611546565b610656565b3480156102f0575f80fd5b506103046102ff3660046115ae565b610677565b005b348015610311575f80fd5b506103046103203660046115ae565b6106cd565b348015610330575f80fd5b50600d54610256906001600160a01b031681565b34801561034f575f80fd5b5061027e60085481565b348015610364575f80fd5b5061027e6103733660046115c5565b6001600160a01b03165f9081526001602052604090205490565b348015610398575f80fd5b506103046106da565b3480156103ac575f80fd5b50610304610712565b3480156103c0575f80fd5b50610304610725565b3480156103d4575f80fd5b50600c54610256906001600160a01b031681565b3480156103f3575f80fd5b506103046104023660046115e7565b610962565b348015610412575f80fd5b5061027e60075481565b348015610427575f80fd5b5061027e600b5481565b34801561043c575f80fd5b506009546102279060ff1681565b348015610455575f80fd5b5061027e600a5481565b34801561046a575f80fd5b505f546001600160a01b0316610256565b348015610486575f80fd5b506101f2610994565b34801561049a575f80fd5b506102276104a9366004611546565b6109a3565b3480156104b9575f80fd5b506102276104c8366004611546565b610a1d565b3480156104d8575f80fd5b5060095461022790610100900460ff1681565b3480156104f6575f80fd5b50610304610505366004611607565b610a2a565b348015610515575f80fd5b5061027e610524366004611642565b610a5c565b348015610534575f80fd5b506102276105433660046115c5565b600e6020525f908152604090205460ff1681565b348015610562575f80fd5b50610304610a86565b348015610576575f80fd5b506103046105853660046115c5565b610aa2565b6060600480546105999061166e565b80601f01602080910402602001604051908101604052809291908181526020018280546105c59061166e565b80156106105780601f106105e757610100808354040283529160200191610610565b820191905f5260205f20905b8154815290600101906020018083116105f357829003601f168201915b5050505050905090565b5f33610627818585610b18565b60019150505b92915050565b5f33610640858285610c3c565b61064b858585610cae565b506001949350505050565b5f336106278185856106688383610a5c565b61067291906116ba565b610b18565b61067f611009565b5f81116106c85760405162461bcd60e51b815260206004820152601260248201527143616e6e6f742073657420746f207a65726f60701b60448201526064015b60405180910390fd5b600b55565b6106d73382611062565b50565b6106e2611009565b6009805461010161ffff1990911617905560068054600160a81b80820460ff16150260ff60a81b19909116179055565b61071a611009565b6107235f61118c565b565b61072d611009565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a191906116cd565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082491906116cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089291906116cd565b600d80546001600160a01b0319166001600160a01b03928316179055305f8181526001602052604090205460065490926108ce92911683610b18565b60065460405163f305d71960e01b8152306004820152602481018390525f6044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990479060c40160606040518083038185885af1158015610937573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061095c91906116e8565b50505050565b61096a611009565b600782905560088190556005821115610981575f80fd5b60056008541115610990575f80fd5b5050565b6060600580546105999061166e565b5f33816109b08286610a5c565b905083811015610a105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106bf565b61064b8286868403610b18565b5f33610627818585610cae565b610a32611009565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610a8e611009565b6009805460ff19811660ff90911615179055565b610aaa611009565b6001600160a01b038116610b0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106bf565b6106d78161118c565b6001600160a01b038316610b7a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106bf565b6001600160a01b038216610bdb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106bf565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610c478484610a5c565b90505f19811461095c5781811015610ca15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106bf565b61095c8484848403610b18565b6001600160a01b038316610cd45760405162461bcd60e51b81526004016106bf90611713565b6001600160a01b038216610cfa5760405162461bcd60e51b81526004016106bf90611758565b5f8111610d585760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016106bf565b600654600160a81b900460ff1615610dd2575f546001600160a01b0384811691161480610d8d57506001600160a01b03831630145b610dd25760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b60448201526064016106bf565b60095460ff168015610df15750600d546001600160a01b038481169116145b15610e5957600a5481610e18846001600160a01b03165f9081526001602052604090205490565b610e2291906116ba565b1115610e595760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b60448201526064016106bf565b6009545f90610100900460ff1615610fcf57600d546001600160a01b038581169116148015610e89575060075415155b15610eca576001600160a01b0383165f908152600e602052604090205460ff16610eca57606460075483610ebd919061179b565b610ec791906117b2565b90505b600d546001600160a01b038481169116148015610ee8575060085415155b15610f29576001600160a01b0384165f908152600e602052604090205460ff16610f2957606460085483610f1c919061179b565b610f2691906117b2565b90505b6001600160a01b03831661dead148015610f505750600c546001600160a01b038581169116145b15610f6b57600d5461095c906001600160a01b031683611062565b305f90815260016020526040902054600b5481108015908190610f905750600b548410155b8015610fa65750600654600160a01b900460ff16155b8015610fbf5750600d546001600160a01b038681169116145b15610fcc57610fcc6111db565b50505b8015610ffe575f610fe082846117d1565b9050610fed8530846113b8565b610ff88585836113b8565b5061095c565b61095c8484846113b8565b5f546001600160a01b031633146107235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106bf565b6001600160a01b0382166110c25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106bf565b6001600160a01b0382165f90815260016020526040902054818110156111355760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106bf565b6001600160a01b0383165f8181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c2f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611221576112216117e4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611278573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129c91906116cd565b816001815181106112af576112af6117e4565b6001600160a01b0392831660209182029290920101526006546112ed91309116610672826001600160a01b03165f9081526001602052604090205490565b6006546001600160a01b031663791ac94761131c306001600160a01b03165f9081526001602052604090205490565b5f8430426040518663ffffffff1660e01b81526004016113409594939291906117f8565b5f604051808303815f87803b158015611357575f80fd5b505af1158015611369573d5f803e3d5ffd5b5050600c546040514793506001600160a01b03909116915082156108fc029083905f818181858888f193505050501580156113a6573d5f803e3d5ffd5b50506006805460ff60a01b1916905550565b6001600160a01b0383166113de5760405162461bcd60e51b81526004016106bf90611713565b6001600160a01b0382166114045760405162461bcd60e51b81526004016106bf90611758565b6001600160a01b0383165f908152600160205260409020548181101561147b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106bf565b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114da9086815260200190565b60405180910390a361095c565b5f6020808352835180828501525f5b81811015611512578581018301518582016040015282016114f6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146106d7575f80fd5b5f8060408385031215611557575f80fd5b823561156281611532565b946020939093013593505050565b5f805f60608486031215611582575f80fd5b833561158d81611532565b9250602084013561159d81611532565b929592945050506040919091013590565b5f602082840312156115be575f80fd5b5035919050565b5f602082840312156115d5575f80fd5b81356115e081611532565b9392505050565b5f80604083850312156115f8575f80fd5b50508035926020909101359150565b5f8060408385031215611618575f80fd5b823561162381611532565b915060208301358015158114611637575f80fd5b809150509250929050565b5f8060408385031215611653575f80fd5b823561165e81611532565b9150602083013561163781611532565b600181811c9082168061168257607f821691505b6020821081036116a057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062d5761062d6116a6565b5f602082840312156116dd575f80fd5b81516115e081611532565b5f805f606084860312156116fa575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761062d5761062d6116a6565b5f826117cc57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561062d5761062d6116a6565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156118465784516001600160a01b031683529383019391830191600101611821565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205f9dcbdecbdf20c3a1515716eceea3c0b9406c575b37c5012ad3c2b5ef89416464736f6c63430008140033

Deployed Bytecode Sourcemap

21613:5535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6735:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9095:201;;;;;;;;;;-1:-1:-1;9095:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9095:201:0;1023:187:1;21651:41:0;;;;;;;;;;-1:-1:-1;21651:41:0;;;;-1:-1:-1;;;;;21651:41:0;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;21651:41:0;1215:230:1;7864:108:0;;;;;;;;;;-1:-1:-1;7952:12:0;;7864:108;;;1596:25:1;;;1584:2;1569:18;7864:108:0;1450:177:1;9876:261:0;;;;;;;;;;-1:-1:-1;9876:261:0;;;;;:::i;:::-;;:::i;7706:93::-;;;;;;;;;;-1:-1:-1;7706:93:0;;7789:2;2235:36:1;;2223:2;2208:18;7706:93:0;2093:184:1;10546:238:0;;;;;;;;;;-1:-1:-1;10546:238:0;;;;;:::i;:::-;;:::i;26626:205::-;;;;;;;;;;-1:-1:-1;26626:205:0;;;;;:::i;:::-;;:::i;:::-;;26840:81;;;;;;;;;;-1:-1:-1;26840:81:0;;;;;:::i;:::-;;:::i;22007:28::-;;;;;;;;;;-1:-1:-1;22007:28:0;;;;-1:-1:-1;;;;;22007:28:0;;;21790:34;;;;;;;;;;;;;;;;8035:127;;;;;;;;;;-1:-1:-1;8035:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8136:18:0;8109:7;8136:18;;;:9;:18;;;;;;;8035:127;26929:128;;;;;;;;;;;;;:::i;20768:103::-;;;;;;;;;;;;;:::i;22766:520::-;;;;;;;;;;;;;:::i;21970:30::-;;;;;;;;;;-1:-1:-1;21970:30:0;;;;-1:-1:-1;;;;;21970:30:0;;;26144:297;;;;;;;;;;-1:-1:-1;26144:297:0;;;;;:::i;:::-;;:::i;21750:33::-;;;;;;;;;;;;;;;;21928:35;;;;;;;;;;;;;;;;21831:19;;;;;;;;;;-1:-1:-1;21831:19:0;;;;;;;;21890:31;;;;;;;;;;;;;;;;20127:87;;;;;;;;;;-1:-1:-1;20173:7:0;20200:6;-1:-1:-1;;;;;20200:6:0;20127:87;;6954:104;;;;;;;;;;;;;:::i;11287:436::-;;;;;;;;;;-1:-1:-1;11287:436:0;;;;;:::i;:::-;;:::i;8368:193::-;;;;;;;;;;-1:-1:-1;8368:193:0;;;;;:::i;:::-;;:::i;21857:24::-;;;;;;;;;;-1:-1:-1;21857:24:0;;;;;;;;;;;26450:167;;;;;;;;;;-1:-1:-1;26450:167:0;;;;;:::i;:::-;;:::i;8624:151::-;;;;;;;;;;-1:-1:-1;8624:151:0;;;;;:::i;:::-;;:::i;22042:51::-;;;;;;;;;;-1:-1:-1;22042:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27066:79;;;;;;;;;;;;;:::i;21026:201::-;;;;;;;;;;-1:-1:-1;21026:201:0;;;;;:::i;:::-;;:::i;6735:100::-;6789:13;6822:5;6815:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6735:100;:::o;9095:201::-;9178:4;4453:10;9234:32;4453:10;9250:7;9259:6;9234:8;:32::i;:::-;9284:4;9277:11;;;9095:201;;;;;:::o;9876:261::-;9973:4;4453:10;10031:38;10047:4;4453:10;10062:6;10031:15;:38::i;:::-;10080:27;10090:4;10096:2;10100:6;10080:9;:27::i;:::-;-1:-1:-1;10125:4:0;;9876:261;-1:-1:-1;;;;9876:261:0:o;10546:238::-;10634:4;4453:10;10690:64;4453:10;10706:7;10743:10;10715:25;4453:10;10706:7;10715:9;:25::i;:::-;:38;;;;:::i;:::-;10690:8;:64::i;26626:205::-;20013:13;:11;:13::i;:::-;26753:1:::1;26738:12;:16;26730:47;;;::::0;-1:-1:-1;;;26730:47:0;;4843:2:1;26730:47:0::1;::::0;::::1;4825:21:1::0;4882:2;4862:18;;;4855:30;-1:-1:-1;;;4901:18:1;;;4894:48;4959:18;;26730:47:0::1;;;;;;;;;26788:20;:35:::0;26626:205::o;26840:81::-;26889:24;26895:10;26907:5;26889;:24::i;:::-;26840:81;:::o;26929:128::-;20013:13;:11;:13::i;:::-;26978:12:::1;:19:::0;;27008:14;-1:-1:-1;;27008:14:0;;;;;;27043:6:::1;::::0;;-1:-1:-1;;;27043:6:0;;::::1;26978:19;27043:6;27042:7;27033:16;-1:-1:-1::0;;;;27033:16:0;;::::1;;::::0;;26929:128::o;20768:103::-;20013:13;:11;:13::i;:::-;20833:30:::1;20860:1;20833:18;:30::i;:::-;20768:103::o:0;22766:520::-;20013:13;:11;:13::i;:::-;22846:15:::1;;;;;;;;;-1:-1:-1::0;;;;;22846:15:0::1;-1:-1:-1::0;;;;;22846:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22828:69:0::1;;22906:4;22913:15;;;;;;;;;-1:-1:-1::0;;;;;22913:15:0::1;-1:-1:-1::0;;;;;22913:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22828:108;::::0;-1:-1:-1;;;;;;22828:108:0::1;::::0;;;;;;-1:-1:-1;;;;;5474:15:1;;;22828:108:0::1;::::0;::::1;5456:34:1::0;5526:15;;5506:18;;;5499:43;5391:18;;22828:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22812:13;:124:::0;;-1:-1:-1;;;;;;22812:124:0::1;-1:-1:-1::0;;;;;22812:124:0;;::::1;;::::0;;22984:4:::1;-1:-1:-1::0;8136:18:0;;;-1:-1:-1;8136:18:0;;;;;;23033:15:::1;::::0;8136:18;;23001:57:::1;::::0;22984:4;23033:15:::1;8136:18:::0;23001:8:::1;:57::i;:::-;23070:15;::::0;:208:::1;::::0;-1:-1:-1;;;23070:208:0;;23154:4:::1;23070:208;::::0;::::1;5894:34:1::0;5944:18;;;5937:34;;;23070:15:0::1;5987:18:1::0;;;5980:34;;;6030:18;;;6023:34;23227:10:0::1;6073:19:1::0;;;6066:44;23252:15:0::1;6126:19:1::0;;;6119:35;-1:-1:-1;;;;;23070:15:0;;::::1;::::0;:31:::1;::::0;23109:21:::1;::::0;5828:19:1;;23070:208:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22801:485;22766:520::o:0;26144:297::-;20013:13;:11;:13::i;:::-;26277::::1;:33:::0;;;26321:14:::1;:35:::0;;;26392:1:::1;26375:18:::0;::::1;;26367:27;;;::::0;::::1;;26431:1;26413:14;;:19;;26405:28;;;::::0;::::1;;26144:297:::0;;:::o;6954:104::-;7010:13;7043:7;7036:14;;;;;:::i;11287:436::-;11380:4;4453:10;11380:4;11463:25;4453:10;11480:7;11463:9;:25::i;:::-;11436:52;;11527:15;11507:16;:35;;11499:85;;;;-1:-1:-1;;;11499:85:0;;6678:2:1;11499:85:0;;;6660:21:1;6717:2;6697:18;;;6690:30;6756:34;6736:18;;;6729:62;-1:-1:-1;;;6807:18:1;;;6800:35;6852:19;;11499:85:0;6476:401:1;11499:85:0;11620:60;11629:5;11636:7;11664:15;11645:16;:34;11620:8;:60::i;8368:193::-;8447:4;4453:10;8503:28;4453:10;8520:2;8524:6;8503:9;:28::i;26450:167::-;20013:13;:11;:13::i;:::-;-1:-1:-1;;;;;26566:29:0;;;::::1;;::::0;;;:19:::1;:29;::::0;;;;:43;;-1:-1:-1;;26566:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26450:167::o;8624:151::-;-1:-1:-1;;;;;8740:18:0;;;8713:7;8740:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8624:151::o;27066:79::-;20013:13;:11;:13::i;:::-;27130:7:::1;::::0;;-1:-1:-1;;27119:18:0;::::1;27130:7;::::0;;::::1;27129:8;27119:18;::::0;;27066:79::o;21026:201::-;20013:13;:11;:13::i;:::-;-1:-1:-1;;;;;21115:22:0;::::1;21107:73;;;::::0;-1:-1:-1;;;21107:73:0;;7084:2:1;21107:73:0::1;::::0;::::1;7066:21:1::0;7123:2;7103:18;;;7096:30;7162:34;7142:18;;;7135:62;-1:-1:-1;;;7213:18:1;;;7206:36;7259:19;;21107:73:0::1;6882:402:1::0;21107:73:0::1;21191:28;21210:8;21191:18;:28::i;15280:346::-:0;-1:-1:-1;;;;;15382:19:0;;15374:68;;;;-1:-1:-1;;;15374:68:0;;7491:2:1;15374:68:0;;;7473:21:1;7530:2;7510:18;;;7503:30;7569:34;7549:18;;;7542:62;-1:-1:-1;;;7620:18:1;;;7613:34;7664:19;;15374:68:0;7289:400:1;15374:68:0;-1:-1:-1;;;;;15461:21:0;;15453:68;;;;-1:-1:-1;;;15453:68:0;;7896:2:1;15453:68:0;;;7878:21:1;7935:2;7915:18;;;7908:30;7974:34;7954:18;;;7947:62;-1:-1:-1;;;8025:18:1;;;8018:32;8067:19;;15453:68:0;7694:398:1;15453:68:0;-1:-1:-1;;;;;15534:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15586:32;;1596:25:1;;;15586:32:0;;1569:18:1;15586:32:0;;;;;;;;15280:346;;;:::o;15917:419::-;16018:24;16045:25;16055:5;16062:7;16045:9;:25::i;:::-;16018:52;;-1:-1:-1;;16085:16:0;:37;16081:248;;16167:6;16147:16;:26;;16139:68;;;;-1:-1:-1;;;16139:68:0;;8299:2:1;16139:68:0;;;8281:21:1;8338:2;8318:18;;;8311:30;8377:31;8357:18;;;8350:59;8426:18;;16139:68:0;8097:353:1;16139:68:0;16251:51;16260:5;16267:7;16295:6;16276:16;:25;16251:8;:51::i;23295:1975::-;-1:-1:-1;;;;;23427:18:0;;23419:68;;;;-1:-1:-1;;;23419:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23506:16:0;;23498:64;;;;-1:-1:-1;;;23498:64:0;;;;;;;:::i;:::-;23590:1;23581:6;:10;23573:61;;;;-1:-1:-1;;;23573:61:0;;9467:2:1;23573:61:0;;;9449:21:1;9506:2;9486:18;;;9479:30;9545:34;9525:18;;;9518:62;-1:-1:-1;;;9596:18:1;;;9589:36;9642:19;;23573:61:0;9265:402:1;23573:61:0;23652:6;;-1:-1:-1;;;23652:6:0;;;;23648:163;;;20173:7;20200:6;-1:-1:-1;;;;;23701:15:0;;;20200:6;;23701:15;;:40;;-1:-1:-1;;;;;;23720:21:0;;23736:4;23720:21;23701:40;23675:124;;;;-1:-1:-1;;;23675:124:0;;9874:2:1;23675:124:0;;;9856:21:1;9913:2;9893:18;;;9886:30;-1:-1:-1;;;9932:18:1;;;9925:52;9994:18;;23675:124:0;9672:346:1;23675:124:0;23829:7;;;;:32;;;;-1:-1:-1;23848:13:0;;-1:-1:-1;;;;;23840:21:0;;;23848:13;;23840:21;23829:32;23825:126;;;23912:16;;23902:6;23886:13;23896:2;-1:-1:-1;;;;;8136:18:0;8109:7;8136:18;;;:9;:18;;;;;;;8035:127;23886:13;:22;;;;:::i;:::-;:42;;23878:61;;;;-1:-1:-1;;;23878:61:0;;10225:2:1;23878:61:0;;;10207:21:1;10264:1;10244:18;;;10237:29;-1:-1:-1;;;10282:18:1;;;10275:36;10328:18;;23878:61:0;10023:329:1;23878:61:0;23996:12;;23964:17;;23996:12;;;;;23992:976;;;24056:13;;-1:-1:-1;;;;;24048:21:0;;;24056:13;;24048:21;:43;;;;-1:-1:-1;24073:13:0;;:18;;24048:43;24044:198;;;-1:-1:-1;;;;;24117:23:0;;;;;;:19;:23;;;;;;;;24112:115;;24204:3;24187:13;;24178:6;:22;;;;:::i;:::-;24177:30;;;;:::i;:::-;24165:42;;24112:115;24287:13;;-1:-1:-1;;;;;24281:19:0;;;24287:13;;24281:19;:42;;;;-1:-1:-1;24304:14:0;;:19;;24281:42;24277:200;;;-1:-1:-1;;;;;24349:25:0;;;;;;:19;:25;;;;;;;;24344:118;;24439:3;24421:14;;24412:6;:23;;;;:::i;:::-;24411:31;;;;:::i;:::-;24399:43;;24344:118;-1:-1:-1;;;;;24495:21:0;;24509:6;24495:21;:48;;;;-1:-1:-1;24528:15:0;;-1:-1:-1;;;;;24520:23:0;;;24528:15;;24520:23;24495:48;24491:148;;;24576:13;;24564:34;;-1:-1:-1;;;;;24576:13:0;24591:6;24564:11;:34::i;24491:148::-;24702:4;24653:28;8136:18;;;:9;:18;;;;;;24774:20;;24750:44;;;;;;;24816:53;;;24849:20;;24839:6;:30;;24816:53;:70;;;;-1:-1:-1;24874:12:0;;-1:-1:-1;;;24874:12:0;;;;24873:13;24816:70;:93;;;;-1:-1:-1;24896:13:0;;-1:-1:-1;;;;;24890:19:0;;;24896:13;;24890:19;24816:93;24812:145;;;24930:11;:9;:11::i;:::-;24010:958;;23992:976;25002:13;;24998:265;;25032:18;25053;25062:9;25053:6;:18;:::i;:::-;25032:39;;25086:47;25102:4;25116;25123:9;25086:15;:47::i;:::-;25148:37;25164:4;25170:2;25174:10;25148:15;:37::i;:::-;25017:180;24998:265;;;25218:33;25234:4;25240:2;25244:6;25218:15;:33::i;20292:132::-;20173:7;20200:6;-1:-1:-1;;;;;20200:6:0;4453:10;20356:23;20348:68;;;;-1:-1:-1;;;20348:68:0;;11087:2:1;20348:68:0;;;11069:21:1;;;11106:18;;;11099:30;11165:34;11145:18;;;11138:62;11217:18;;20348:68:0;10885:356:1;14167:675:0;-1:-1:-1;;;;;14251:21:0;;14243:67;;;;-1:-1:-1;;;14243:67:0;;11448:2:1;14243:67:0;;;11430:21:1;11487:2;11467:18;;;11460:30;11526:34;11506:18;;;11499:62;-1:-1:-1;;;11577:18:1;;;11570:31;11618:19;;14243:67:0;11246:397:1;14243:67:0;-1:-1:-1;;;;;14410:18:0;;14385:22;14410:18;;;:9;:18;;;;;;14447:24;;;;14439:71;;;;-1:-1:-1;;;14439:71:0;;11850:2:1;14439:71:0;;;11832:21:1;11889:2;11869:18;;;11862:30;11928:34;11908:18;;;11901:62;-1:-1:-1;;;11979:18:1;;;11972:32;12021:19;;14439:71:0;11648:398:1;14439:71:0;-1:-1:-1;;;;;14546:18:0;;;;;;:9;:18;;;;;;;;14567:23;;;14546:44;;14685:12;:22;;;;;;;14736:37;1596:25:1;;;14546:18:0;;;14736:37;;1569:18:1;14736:37:0;1450:177:1;21387:191:0;21461:16;21480:6;;-1:-1:-1;;;;;21497:17:0;;;-1:-1:-1;;;;;;21497:17:0;;;;;;21530:40;;21480:6;;;;;;;21530:40;;21461:16;21530:40;21450:128;21387:191;:::o;25279:819::-;22137:12;:19;;-1:-1:-1;;;;22137:19:0;-1:-1:-1;;;22137:19:0;;;25416:16:::1;::::0;;25430:1:::1;25416:16:::0;;;;;::::1;::::0;;-1:-1:-1;;25416:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25416:16:0::1;25392:40;;25461:4;25443;25448:1;25443:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25443:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25487:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;25487:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;25443:7;;25487:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25477:4;25482:1;25477:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25477:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;25581:15:::1;::::0;25522:125:::1;::::0;25553:4:::1;::::0;25581:15:::1;25612:24;25553:4:::0;-1:-1:-1;;;;;8136:18:0;8109:7;8136:18;;;:9;:18;;;;;;;8035:127;25522:125:::1;25686:15;::::0;-1:-1:-1;;;;;25686:15:0::1;:66;25767:24;25785:4;-1:-1:-1::0;;;;;8136:18:0;8109:7;8136:18;;;:9;:18;;;;;;;8035:127;25767:24:::1;25806:1;25850:4;25877;25943:15;25686:283;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26048:15:0::1;::::0;26040:50:::1;::::0;26008:21:::1;::::0;-1:-1:-1;;;;;;26048:15:0;;::::1;::::0;-1:-1:-1;26040:50:0;::::1;;;::::0;26008:21;;25982:23:::1;26040:50:::0;25982:23;26040:50;26008:21;26048:15;26040:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22179:12:0;:20;;-1:-1:-1;;;;22179:20:0;;;-1:-1:-1;25279:819:0:o;12193:806::-;-1:-1:-1;;;;;12290:18:0;;12282:68;;;;-1:-1:-1;;;12282:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12369:16:0;;12361:64;;;;-1:-1:-1;;;12361:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12511:15:0;;12489:19;12511:15;;;:9;:15;;;;;;12545:21;;;;12537:72;;;;-1:-1:-1;;;12537:72:0;;13502:2:1;12537:72:0;;;13484:21:1;13541:2;13521:18;;;13514:30;13580:34;13560:18;;;13553:62;-1:-1:-1;;;13631:18:1;;;13624:36;13677:19;;12537:72:0;13300:402:1;12537:72:0;-1:-1:-1;;;;;12645:15:0;;;;;;;:9;:15;;;;;;12663:20;;;12645:38;;12863:13;;;;;;;;;;:23;;;;;;12915:26;;;;;;12677:6;1596:25:1;;1584:2;1569:18;;1450:177;12915:26:0;;;;;;;;12954:37;14167:675;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2282:180::-;2341:6;2394:2;2382:9;2373:7;2369:23;2365:32;2362:52;;;2410:1;2407;2400:12;2362:52;-1:-1:-1;2433:23:1;;2282:180;-1:-1:-1;2282:180:1:o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;:::-;2911:5;2675:247;-1:-1:-1;;;2675:247:1:o;2927:248::-;2995:6;3003;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;-1:-1:-1;;3095:23:1;;;3165:2;3150:18;;;3137:32;;-1:-1:-1;2927:248:1:o;3180:416::-;3245:6;3253;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3361:9;3348:23;3380:31;3405:5;3380:31;:::i;:::-;3430:5;-1:-1:-1;3487:2:1;3472:18;;3459:32;3529:15;;3522:23;3510:36;;3500:64;;3560:1;3557;3550:12;3500:64;3583:7;3573:17;;;3180:416;;;;;:::o;3601:388::-;3669:6;3677;3730:2;3718:9;3709:7;3705:23;3701:32;3698:52;;;3746:1;3743;3736:12;3698:52;3785:9;3772:23;3804:31;3829:5;3804:31;:::i;:::-;3854:5;-1:-1:-1;3911:2:1;3896:18;;3883:32;3924:33;3883:32;3924:33;:::i;3994:380::-;4073:1;4069:12;;;;4116;;;4137:61;;4191:4;4183:6;4179:17;4169:27;;4137:61;4244:2;4236:6;4233:14;4213:18;4210:38;4207:161;;4290:10;4285:3;4281:20;4278:1;4271:31;4325:4;4322:1;4315:15;4353:4;4350:1;4343:15;4207:161;;3994:380;;;:::o;4379:127::-;4440:10;4435:3;4431:20;4428:1;4421:31;4471:4;4468:1;4461:15;4495:4;4492:1;4485:15;4511:125;4576:9;;;4597:10;;;4594:36;;;4610:18;;:::i;4988:251::-;5058:6;5111:2;5099:9;5090:7;5086:23;5082:32;5079:52;;;5127:1;5124;5117:12;5079:52;5159:9;5153:16;5178:31;5203:5;5178:31;:::i;6165:306::-;6253:6;6261;6269;6322:2;6310:9;6301:7;6297:23;6293:32;6290:52;;;6338:1;6335;6328:12;6290:52;6367:9;6361:16;6351:26;;6417:2;6406:9;6402:18;6396:25;6386:35;;6461:2;6450:9;6446:18;6440:25;6430:35;;6165:306;;;;;:::o;8455:401::-;8657:2;8639:21;;;8696:2;8676:18;;;8669:30;8735:34;8730:2;8715:18;;8708:62;-1:-1:-1;;;8801:2:1;8786:18;;8779:35;8846:3;8831:19;;8455:401::o;8861:399::-;9063:2;9045:21;;;9102:2;9082:18;;;9075:30;9141:34;9136:2;9121:18;;9114:62;-1:-1:-1;;;9207:2:1;9192:18;;9185:33;9250:3;9235:19;;8861:399::o;10357:168::-;10430:9;;;10461;;10478:15;;;10472:22;;10458:37;10448:71;;10499:18;;:::i;10530:217::-;10570:1;10596;10586:132;;10640:10;10635:3;10631:20;10628:1;10621:31;10675:4;10672:1;10665:15;10703:4;10700:1;10693:15;10586:132;-1:-1:-1;10732:9:1;;10530:217::o;10752:128::-;10819:9;;;10840:11;;;10837:37;;;10854:18;;:::i;12183:127::-;12244:10;12239:3;12235:20;12232:1;12225:31;12275:4;12272:1;12265:15;12299:4;12296:1;12289:15;12315:980;12577:4;12625:3;12614:9;12610:19;12656:6;12645:9;12638:25;12682:2;12720:6;12715:2;12704:9;12700:18;12693:34;12763:3;12758:2;12747:9;12743:18;12736:31;12787:6;12822;12816:13;12853:6;12845;12838:22;12891:3;12880:9;12876:19;12869:26;;12930:2;12922:6;12918:15;12904:29;;12951:1;12961:195;12975:6;12972:1;12969:13;12961:195;;;13040:13;;-1:-1:-1;;;;;13036:39:1;13024:52;;13131:15;;;;13096:12;;;;13072:1;12990:9;12961:195;;;-1:-1:-1;;;;;;;13212:32:1;;;;13207:2;13192:18;;13185:60;-1:-1:-1;;;13276:3:1;13261:19;13254:35;13173:3;12315:980;-1:-1:-1;;;12315:980:1:o

Swarm Source

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