ETH Price: $3,318.87 (-0.20%)
Gas: 11 Gwei

Token

Sophia (SOPHIA)
 

Overview

Max Total Supply

1,000,000,000 SOPHIA

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,999,992.9602622984 SOPHIA

Value
$0.00
0x28c0eea46e433131f0d8055aa457652da9f3e81e
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:
Sophia

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-13
*/

// SPDX-License-Identifier: MIT
/**
 * https://sophiaai.vip
 * https://t.me/SophiaAi_eth
 * https://twitter.com/SophiaAi_ERC
 */

pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract Sophia is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    address payable private _taxWallet2;
    uint256 split = 0;
    uint256 firstBlock;

    uint256 private _buyFee = 20;
    uint256 private _sellFee = 30;
    uint256 private _preventSwapBefore = 10;
    uint256 private _buyCount = 0;

    uint256 private _txLimit;
    uint256 private _walletLimit;
    uint256 private _taxSwapThreshold;
    uint256 private _maxTaxSwap;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event TxLimitUpdated(uint _txLimit);

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Sophia", "SOPHIA") {
        uint256 _totalSupply = 1_000_000_000 * 10 ** decimals();

        _txLimit = (_totalSupply * 10) / 1000;
        _walletLimit = (_totalSupply * 10) / 1000;

        _taxSwapThreshold = (_totalSupply * 5) / 10000;
        _maxTaxSwap = (_totalSupply * 300) / 10000;

        _taxWallet = payable(0xe55a158D9E0B4F9012965a1B56810C18b38dec92);
        _taxWallet2 = payable(0xe55a158D9E0B4F9012965a1B56810C18b38dec92);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        _isExcludedFromFee[address(this)] = true;
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
    }

    function lonch() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        _isExcludedFromFee[address(this)] = true;
    }

    function setFeeWallets(
        address payable taxWallet1,
        address payable taxWallet2
    ) external onlyOwner {
        _taxWallet = taxWallet1;
        _taxWallet2 = taxWallet2;
    }

    function setSplit(uint256 newSplit) external onlyOwner {
        split = newSplit;
    }

    function setTxLimit(uint256 newValue) external onlyOwner {
        _txLimit = (totalSupply() * newValue) / 1000;
        emit TxLimitUpdated(newValue);
    }

    function setWalletLimit(uint256 newValue) external onlyOwner {
        _walletLimit = (totalSupply() * newValue) / 1000;
    }

    function setTaxSwapValues(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _taxSwapThreshold = (totalSupply() * taxSwapThreshold) / 10000;
        _maxTaxSwap = (totalSupply() * maxTaxSwap) / 10000;
    }

    function removeLimits() external onlyOwner {
        _txLimit = totalSupply();
        _walletLimit = totalSupply();
        emit TxLimitUpdated(totalSupply());
    }

    function setFees(uint256 buyFee, uint256 sellFee) external onlyOwner {
        _buyFee = buyFee;
        _sellFee = sellFee;
    }

    function recoverETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver pair trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function triggerSwap() external {
        swapTokensForEth(balanceOf(address(this)));
    }

    function excludeFromFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
    }

    function viewValues()
        external
        view
        returns (
            uint256 buyFee,
            uint256 sellFee,
            uint256 txLimit,
            uint256 walletLimit,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            _buyFee,
            _sellFee,
            _txLimit,
            _walletLimit,
            _taxSwapThreshold,
            _maxTaxSwap
        );
    }

    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, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner()) {
            taxAmount = amount.mul(_buyFee).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txLimit, "Exceeds the _txLimit.");
                require(
                    balanceOf(to) + amount <= _walletLimit,
                    "Exceeds the walletLimit."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletLimit,
                    "Exceeds the walletLimit."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_sellFee).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _taxSwapThreshold &&
                _buyCount > _preventSwapBefore
            ) {
                swapTokensForEth(
                    min(amount, min(contractTokenBalance, _maxTaxSwap))
                );
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

    function sendETHToFee(uint256 amount) private {
        uint256 amount2 = amount.mul(split).div(100);
        bool success;
        (success, ) = address(_taxWallet2).call{value: amount2}("");
        (success, ) = address(_taxWallet).call{value: address(this).balance}("");
    }
}

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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txLimit","type":"uint256"}],"name":"TxLimitUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"status","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":[],"name":"lonch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"},{"internalType":"address payable","name":"taxWallet2","type":"address"}],"name":"setFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSplit","type":"uint256"}],"name":"setSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setTaxSwapValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewValues","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"txLimit","type":"uint256"},{"internalType":"uint256","name":"walletLimit","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060098190556014600b819055601e600c55600a600d55600e91909155805461ffff60a81b191690553480156200003b57600080fd5b5060405180604001604052806006815260200165536f7068696160d01b81525060405180604001604052806006815260200165534f5048494160d01b81525081600390816200008b9190620003fd565b5060046200009a8282620003fd565b505050620000b7620000b16200021660201b60201c565b6200021a565b6000620000c76012600a620005de565b620000d790633b9aca00620005f6565b90506103e8620000e982600a620005f6565b620000f5919062000610565b600f556103e86200010882600a620005f6565b62000114919062000610565b60105561271062000127826005620005f6565b62000133919062000610565b601155612710620001478261012c620005f6565b62000153919062000610565b6012556007805473e55a158d9e0b4f9012965a1b56810c18b38dec926001600160a01b03199182168117909255600880549091169091179055600160066000620001a56005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260069093528183208054851660019081179091556007549091168352912080549092161790556200020f620002083390565b826200026c565b5062000649565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002db919062000633565b90915550506001600160a01b038216600090815260208190526040812080548392906200030a90849062000633565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200038457607f821691505b602082108103620003a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035457600081815260208120601f850160051c81016020861015620003d45750805b601f850160051c820191505b81811015620003f557828155600101620003e0565b505050505050565b81516001600160401b0381111562000419576200041962000359565b62000431816200042a84546200036f565b84620003ab565b602080601f831160018114620004695760008415620004505750858301515b600019600386901b1c1916600185901b178555620003f5565b600085815260208120601f198616915b828110156200049a5788860151825594840194600190910190840162000479565b5085821015620004b95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000520578160001904821115620005045762000504620004c9565b808516156200051257918102915b93841c9390800290620004e4565b509250929050565b6000826200053957506001620005d8565b816200054857506000620005d8565b81600181146200056157600281146200056c576200058c565b6001915050620005d8565b60ff841115620005805762000580620004c9565b50506001821b620005d8565b5060208310610133831016604e8410600b8410161715620005b1575081810a620005d8565b620005bd8383620004df565b8060001904821115620005d457620005d4620004c9565b0290505b92915050565b6000620005ef60ff84168362000528565b9392505050565b8082028115828204841417620005d857620005d8620004c9565b6000826200062e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005d857620005d8620004c9565b6120a580620006596000396000f3fe6080604052600436106101a05760003560e01c8063715018a6116100ec578063c9567bf91161008a578063f1d5f51711610064578063f1d5f517146104b1578063f2fde38b146104d1578063fd1fb605146104f1578063ff6ee23f1461051157600080fd5b8063c9567bf914610436578063dd62ed3e1461044b578063df8408fe1461049157600080fd5b80638f937cc4116100c65780638f937cc4146103cc57806395d89b41146103e1578063a457c2d7146103f6578063a9059cbb1461041657600080fd5b8063715018a61461037a578063751039fc1461038f5780638da5cb5b146103a457600080fd5b806323b872dd116101595780633d40d1ae116101335780633d40d1ae146103055780635c85974f1461031a578063674e694f1461033a57806370a082311461035a57600080fd5b806323b872dd146102a9578063313ce567146102c957806339509351146102e557600080fd5b80630614117a146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b78f9c01461021e578063137584631461023e57806318160ddd1461028a57600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610531565b005b3480156101cf57600080fd5b506101d86105cc565b6040516101e59190611c29565b60405180910390f35b3480156101fa57600080fd5b5061020e610209366004611c8c565b61065e565b60405190151581526020016101e5565b34801561022a57600080fd5b506101c1610239366004611cb8565b610675565b34801561024a57600080fd5b50600b54600c54600f54601054601154601254604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e5565b34801561029657600080fd5b506002545b6040519081526020016101e5565b3480156102b557600080fd5b5061020e6102c4366004611cda565b6106aa565b3480156102d557600080fd5b50604051601281526020016101e5565b3480156102f157600080fd5b5061020e610300366004611c8c565b610754565b34801561031157600080fd5b506101c1610790565b34801561032657600080fd5b506101c1610335366004611d1b565b610b13565b34801561034657600080fd5b506101c1610355366004611d1b565b610b97565b34801561036657600080fd5b5061029b610375366004611d34565b610bc6565b34801561038657600080fd5b506101c1610be1565b34801561039b57600080fd5b506101c1610c17565b3480156103b057600080fd5b506005546040516001600160a01b0390911681526020016101e5565b3480156103d857600080fd5b506101c1610c8a565b3480156103ed57600080fd5b506101d8610c9b565b34801561040257600080fd5b5061020e610411366004611c8c565b610caa565b34801561042257600080fd5b5061020e610431366004611c8c565b610d43565b34801561044257600080fd5b506101c1610d50565b34801561045757600080fd5b5061029b610466366004611d51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561049d57600080fd5b506101c16104ac366004611d98565b6110d3565b3480156104bd57600080fd5b506101c16104cc366004611d1b565b611128565b3480156104dd57600080fd5b506101c16104ec366004611d34565b611179565b3480156104fd57600080fd5b506101c161050c366004611d51565b611211565b34801561051d57600080fd5b506101c161052c366004611cb8565b611269565b6007546001600160a01b031633146105905760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792066656520726563656976657220706169722074726967676572000060448201526064015b60405180910390fd5b6007546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105c9573d6000803e3d6000fd5b50565b6060600380546105db90611dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611dc6565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905090565b600061066b3384846112df565b5060015b92915050565b6005546001600160a01b0316331461069f5760405162461bcd60e51b815260040161058790611dfa565b600b91909155600c55565b60006106b7848484611403565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561073c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610587565b61074985338584036112df565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161066b91859061078b908690611e45565b6112df565b6005546001600160a01b031633146107ba5760405162461bcd60e51b815260040161058790611dfa565b601454600160a01b900460ff161561080e5760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561084690309061078b60025490565b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd9190611e58565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109439190611e58565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611e58565b601480546001600160a01b0319166001600160a01b039283161790556013541663f305d71947306109e481610bc6565b6000806109f96005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a1b96959493929190611e75565b60606040518083038185885af1158015610a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5e9190611eb0565b505060145460135460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190611ede565b506014805462ff00ff60a01b19166201000160a01b17905543600a55306000908152600660205260409020805460ff19166001179055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b815260040161058790611dfa565b6103e881610b4a60025490565b610b549190611efb565b610b5e9190611f12565b600f556040518181527fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b9060200160405180910390a150565b6005546001600160a01b03163314610bc15760405162461bcd60e51b815260040161058790611dfa565b600955565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610c0b5760405162461bcd60e51b815260040161058790611dfa565b610c1560006117f9565b565b6005546001600160a01b03163314610c415760405162461bcd60e51b815260040161058790611dfa565b600254600f556002546010557fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b610c7760025490565b60405190815260200160405180910390a1565b610c15610c9630610bc6565b61184b565b6060600480546105db90611dc6565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d2c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610587565b610d3933858584036112df565b5060019392505050565b600061066b338484611403565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b815260040161058790611dfa565b306000908152600660205260409020805460ff19166001179055601454600160a01b900460ff1615610de85760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610e2090309061078b60025490565b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190611e58565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611e58565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8e9190611e58565b601480546001600160a01b0319166001600160a01b039283161790556013541663f305d7194730610fbe81610bc6565b600080610fd36005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610ff596959493929190611e75565b60606040518083038185885af1158015611013573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110389190611eb0565b505060145460135460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ede565b506014805462ff00ff60a01b19166201000160a01b17905543600a55565b6005546001600160a01b031633146110fd5760405162461bcd60e51b815260040161058790611dfa565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111525760405162461bcd60e51b815260040161058790611dfa565b6103e88161115f60025490565b6111699190611efb565b6111739190611f12565b60105550565b6005546001600160a01b031633146111a35760405162461bcd60e51b815260040161058790611dfa565b6001600160a01b0381166112085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b6105c9816117f9565b6005546001600160a01b0316331461123b5760405162461bcd60e51b815260040161058790611dfa565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6005546001600160a01b031633146112935760405162461bcd60e51b815260040161058790611dfa565b612710826112a060025490565b6112aa9190611efb565b6112b49190611f12565b601155612710816112c460025490565b6112ce9190611efb565b6112d89190611f12565b6012555050565b6001600160a01b0383166113415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610587565b6001600160a01b0382166113a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610587565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114295760405162461bcd60e51b815260040161058790611f34565b6001600160a01b03821661144f5760405162461bcd60e51b815260040161058790611f79565b600081116114b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610587565b60006114c56005546001600160a01b031690565b6001600160a01b0316846001600160a01b0316141580156114f457506005546001600160a01b03848116911614155b156117ce576115196064611513600b54856119c590919063ffffffff16565b906119d8565b6014549091506001600160a01b03858116911614801561154757506013546001600160a01b03848116911614155b801561156c57506001600160a01b03831660009081526006602052604090205460ff16155b1561165357600f548211156115bb5760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b239903a3432902fba3c2634b6b4ba1760591b6044820152606401610587565b601054826115c885610bc6565b6115d29190611e45565b111561161b5760405162461bcd60e51b815260206004820152601860248201527722bc31b2b2b239903a3432903bb0b63632ba2634b6b4ba1760411b6044820152606401610587565b43600a54600361162b9190611e45565b111561163d57823b1561163d57600080fd5b600e805490600061164d83611fbc565b91905055505b6014546001600160a01b0384811691161480159061168a57506001600160a01b03831660009081526006602052604090205460ff16155b156116ef576010548261169c85610bc6565b6116a69190611e45565b11156116ef5760405162461bcd60e51b815260206004820152601860248201527722bc31b2b2b239903a3432903bb0b63632ba2634b6b4ba1760411b6044820152606401610587565b6014546001600160a01b03848116911614801561171557506001600160a01b0384163014155b15611737576117346064611513600c54856119c590919063ffffffff16565b90505b600061174230610bc6565b601454909150600160a81b900460ff1615801561176c57506014546001600160a01b038581169116145b80156117815750601454600160b01b900460ff165b801561178e575060115481115b801561179d5750600d54600e54115b156117cc576117ba610c96846117b5846012546119e4565b6119e4565b4780156117ca576117ca476119f9565b505b505b80156117df576117df843083611ac9565b6117f384846117ee8585611c1d565b611ac9565b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014805460ff60a81b1916600160a81b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189357611893611fd5565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190611e58565b8160018151811061192357611923611fd5565b6001600160a01b03928316602091820292909201015260135461194991309116846112df565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611982908590600090869030904290600401611feb565b600060405180830381600087803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b50506014805460ff60a81b1916905550505050565b60006119d18284611efb565b9392505050565b60006119d18284611f12565b60008183116119f357826119d1565b50919050565b6000611a156064611513600954856119c590919063ffffffff16565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611a67576040519150601f19603f3d011682016040523d82523d6000602084013e611a6c565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611abc576040519150601f19603f3d011682016040523d82523d6000602084013e611ac1565b606091505b505050505050565b6001600160a01b038316611aef5760405162461bcd60e51b815260040161058790611f34565b6001600160a01b038216611b155760405162461bcd60e51b815260040161058790611f79565b6001600160a01b03831660009081526020819052604090205481811015611b8d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610587565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611bc4908490611e45565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c1091815260200190565b60405180910390a36117f3565b60006119d1828461205c565b600060208083528351808285015260005b81811015611c5657858101830151858201604001528201611c3a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105c957600080fd5b60008060408385031215611c9f57600080fd5b8235611caa81611c77565b946020939093013593505050565b60008060408385031215611ccb57600080fd5b50508035926020909101359150565b600080600060608486031215611cef57600080fd5b8335611cfa81611c77565b92506020840135611d0a81611c77565b929592945050506040919091013590565b600060208284031215611d2d57600080fd5b5035919050565b600060208284031215611d4657600080fd5b81356119d181611c77565b60008060408385031215611d6457600080fd5b8235611d6f81611c77565b91506020830135611d7f81611c77565b809150509250929050565b80151581146105c957600080fd5b60008060408385031215611dab57600080fd5b8235611db681611c77565b91506020830135611d7f81611d8a565b600181811c90821680611dda57607f821691505b6020821081036119f357634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066f5761066f611e2f565b600060208284031215611e6a57600080fd5b81516119d181611c77565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611ec557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611ef057600080fd5b81516119d181611d8a565b808202811582820484141761066f5761066f611e2f565b600082611f2f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060018201611fce57611fce611e2f565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561203b5784516001600160a01b031683529383019391830191600101612016565b50506001600160a01b03969096166060850152505050608001529392505050565b8181038181111561066f5761066f611e2f56fea2646970667358221220ee62d48a13ca47ae061b4568efb5886293cb7146c3c4db6bd98bc318baf2920164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c8063715018a6116100ec578063c9567bf91161008a578063f1d5f51711610064578063f1d5f517146104b1578063f2fde38b146104d1578063fd1fb605146104f1578063ff6ee23f1461051157600080fd5b8063c9567bf914610436578063dd62ed3e1461044b578063df8408fe1461049157600080fd5b80638f937cc4116100c65780638f937cc4146103cc57806395d89b41146103e1578063a457c2d7146103f6578063a9059cbb1461041657600080fd5b8063715018a61461037a578063751039fc1461038f5780638da5cb5b146103a457600080fd5b806323b872dd116101595780633d40d1ae116101335780633d40d1ae146103055780635c85974f1461031a578063674e694f1461033a57806370a082311461035a57600080fd5b806323b872dd146102a9578063313ce567146102c957806339509351146102e557600080fd5b80630614117a146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b78f9c01461021e578063137584631461023e57806318160ddd1461028a57600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610531565b005b3480156101cf57600080fd5b506101d86105cc565b6040516101e59190611c29565b60405180910390f35b3480156101fa57600080fd5b5061020e610209366004611c8c565b61065e565b60405190151581526020016101e5565b34801561022a57600080fd5b506101c1610239366004611cb8565b610675565b34801561024a57600080fd5b50600b54600c54600f54601054601154601254604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e5565b34801561029657600080fd5b506002545b6040519081526020016101e5565b3480156102b557600080fd5b5061020e6102c4366004611cda565b6106aa565b3480156102d557600080fd5b50604051601281526020016101e5565b3480156102f157600080fd5b5061020e610300366004611c8c565b610754565b34801561031157600080fd5b506101c1610790565b34801561032657600080fd5b506101c1610335366004611d1b565b610b13565b34801561034657600080fd5b506101c1610355366004611d1b565b610b97565b34801561036657600080fd5b5061029b610375366004611d34565b610bc6565b34801561038657600080fd5b506101c1610be1565b34801561039b57600080fd5b506101c1610c17565b3480156103b057600080fd5b506005546040516001600160a01b0390911681526020016101e5565b3480156103d857600080fd5b506101c1610c8a565b3480156103ed57600080fd5b506101d8610c9b565b34801561040257600080fd5b5061020e610411366004611c8c565b610caa565b34801561042257600080fd5b5061020e610431366004611c8c565b610d43565b34801561044257600080fd5b506101c1610d50565b34801561045757600080fd5b5061029b610466366004611d51565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561049d57600080fd5b506101c16104ac366004611d98565b6110d3565b3480156104bd57600080fd5b506101c16104cc366004611d1b565b611128565b3480156104dd57600080fd5b506101c16104ec366004611d34565b611179565b3480156104fd57600080fd5b506101c161050c366004611d51565b611211565b34801561051d57600080fd5b506101c161052c366004611cb8565b611269565b6007546001600160a01b031633146105905760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792066656520726563656976657220706169722074726967676572000060448201526064015b60405180910390fd5b6007546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105c9573d6000803e3d6000fd5b50565b6060600380546105db90611dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611dc6565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905090565b600061066b3384846112df565b5060015b92915050565b6005546001600160a01b0316331461069f5760405162461bcd60e51b815260040161058790611dfa565b600b91909155600c55565b60006106b7848484611403565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561073c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610587565b61074985338584036112df565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161066b91859061078b908690611e45565b6112df565b6005546001600160a01b031633146107ba5760405162461bcd60e51b815260040161058790611dfa565b601454600160a01b900460ff161561080e5760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561084690309061078b60025490565b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd9190611e58565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109439190611e58565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611e58565b601480546001600160a01b0319166001600160a01b039283161790556013541663f305d71947306109e481610bc6565b6000806109f96005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a1b96959493929190611e75565b60606040518083038185885af1158015610a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5e9190611eb0565b505060145460135460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190611ede565b506014805462ff00ff60a01b19166201000160a01b17905543600a55306000908152600660205260409020805460ff19166001179055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b815260040161058790611dfa565b6103e881610b4a60025490565b610b549190611efb565b610b5e9190611f12565b600f556040518181527fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b9060200160405180910390a150565b6005546001600160a01b03163314610bc15760405162461bcd60e51b815260040161058790611dfa565b600955565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610c0b5760405162461bcd60e51b815260040161058790611dfa565b610c1560006117f9565b565b6005546001600160a01b03163314610c415760405162461bcd60e51b815260040161058790611dfa565b600254600f556002546010557fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b610c7760025490565b60405190815260200160405180910390a1565b610c15610c9630610bc6565b61184b565b6060600480546105db90611dc6565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d2c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610587565b610d3933858584036112df565b5060019392505050565b600061066b338484611403565b6005546001600160a01b03163314610d7a5760405162461bcd60e51b815260040161058790611dfa565b306000908152600660205260409020805460ff19166001179055601454600160a01b900460ff1615610de85760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610e2090309061078b60025490565b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190611e58565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611e58565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8e9190611e58565b601480546001600160a01b0319166001600160a01b039283161790556013541663f305d7194730610fbe81610bc6565b600080610fd36005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610ff596959493929190611e75565b60606040518083038185885af1158015611013573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110389190611eb0565b505060145460135460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ede565b506014805462ff00ff60a01b19166201000160a01b17905543600a55565b6005546001600160a01b031633146110fd5760405162461bcd60e51b815260040161058790611dfa565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111525760405162461bcd60e51b815260040161058790611dfa565b6103e88161115f60025490565b6111699190611efb565b6111739190611f12565b60105550565b6005546001600160a01b031633146111a35760405162461bcd60e51b815260040161058790611dfa565b6001600160a01b0381166112085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b6105c9816117f9565b6005546001600160a01b0316331461123b5760405162461bcd60e51b815260040161058790611dfa565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6005546001600160a01b031633146112935760405162461bcd60e51b815260040161058790611dfa565b612710826112a060025490565b6112aa9190611efb565b6112b49190611f12565b601155612710816112c460025490565b6112ce9190611efb565b6112d89190611f12565b6012555050565b6001600160a01b0383166113415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610587565b6001600160a01b0382166113a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610587565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114295760405162461bcd60e51b815260040161058790611f34565b6001600160a01b03821661144f5760405162461bcd60e51b815260040161058790611f79565b600081116114b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610587565b60006114c56005546001600160a01b031690565b6001600160a01b0316846001600160a01b0316141580156114f457506005546001600160a01b03848116911614155b156117ce576115196064611513600b54856119c590919063ffffffff16565b906119d8565b6014549091506001600160a01b03858116911614801561154757506013546001600160a01b03848116911614155b801561156c57506001600160a01b03831660009081526006602052604090205460ff16155b1561165357600f548211156115bb5760405162461bcd60e51b815260206004820152601560248201527422bc31b2b2b239903a3432902fba3c2634b6b4ba1760591b6044820152606401610587565b601054826115c885610bc6565b6115d29190611e45565b111561161b5760405162461bcd60e51b815260206004820152601860248201527722bc31b2b2b239903a3432903bb0b63632ba2634b6b4ba1760411b6044820152606401610587565b43600a54600361162b9190611e45565b111561163d57823b1561163d57600080fd5b600e805490600061164d83611fbc565b91905055505b6014546001600160a01b0384811691161480159061168a57506001600160a01b03831660009081526006602052604090205460ff16155b156116ef576010548261169c85610bc6565b6116a69190611e45565b11156116ef5760405162461bcd60e51b815260206004820152601860248201527722bc31b2b2b239903a3432903bb0b63632ba2634b6b4ba1760411b6044820152606401610587565b6014546001600160a01b03848116911614801561171557506001600160a01b0384163014155b15611737576117346064611513600c54856119c590919063ffffffff16565b90505b600061174230610bc6565b601454909150600160a81b900460ff1615801561176c57506014546001600160a01b038581169116145b80156117815750601454600160b01b900460ff165b801561178e575060115481115b801561179d5750600d54600e54115b156117cc576117ba610c96846117b5846012546119e4565b6119e4565b4780156117ca576117ca476119f9565b505b505b80156117df576117df843083611ac9565b6117f384846117ee8585611c1d565b611ac9565b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014805460ff60a81b1916600160a81b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189357611893611fd5565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119109190611e58565b8160018151811061192357611923611fd5565b6001600160a01b03928316602091820292909201015260135461194991309116846112df565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611982908590600090869030904290600401611feb565b600060405180830381600087803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b50506014805460ff60a81b1916905550505050565b60006119d18284611efb565b9392505050565b60006119d18284611f12565b60008183116119f357826119d1565b50919050565b6000611a156064611513600954856119c590919063ffffffff16565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611a67576040519150601f19603f3d011682016040523d82523d6000602084013e611a6c565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611abc576040519150601f19603f3d011682016040523d82523d6000602084013e611ac1565b606091505b505050505050565b6001600160a01b038316611aef5760405162461bcd60e51b815260040161058790611f34565b6001600160a01b038216611b155760405162461bcd60e51b815260040161058790611f79565b6001600160a01b03831660009081526020819052604090205481811015611b8d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610587565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611bc4908490611e45565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c1091815260200190565b60405180910390a36117f3565b60006119d1828461205c565b600060208083528351808285015260005b81811015611c5657858101830151858201604001528201611c3a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105c957600080fd5b60008060408385031215611c9f57600080fd5b8235611caa81611c77565b946020939093013593505050565b60008060408385031215611ccb57600080fd5b50508035926020909101359150565b600080600060608486031215611cef57600080fd5b8335611cfa81611c77565b92506020840135611d0a81611c77565b929592945050506040919091013590565b600060208284031215611d2d57600080fd5b5035919050565b600060208284031215611d4657600080fd5b81356119d181611c77565b60008060408385031215611d6457600080fd5b8235611d6f81611c77565b91506020830135611d7f81611c77565b809150509250929050565b80151581146105c957600080fd5b60008060408385031215611dab57600080fd5b8235611db681611c77565b91506020830135611d7f81611d8a565b600181811c90821680611dda57607f821691505b6020821081036119f357634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066f5761066f611e2f565b600060208284031215611e6a57600080fd5b81516119d181611c77565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611ec557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611ef057600080fd5b81516119d181611d8a565b808202811582820484141761066f5761066f611e2f565b600082611f2f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060018201611fce57611fce611e2f565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561203b5784516001600160a01b031683529383019391830191600101612016565b50506001600160a01b03969096166060850152505050608001529392505050565b8181038181111561066f5761066f611e2f56fea2646970667358221220ee62d48a13ca47ae061b4568efb5886293cb7146c3c4db6bd98bc318baf2920164736f6c63430008130033

Deployed Bytecode Sourcemap

25415:8887:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30043:170;;;;;;;;;;;;;:::i;:::-;;11013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13246:194;;;;;;;;;;-1:-1:-1;13246:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13246:194:0;1023:187:1;29902:133:0;;;;;;;;;;-1:-1:-1;29902:133:0;;;;;:::i;:::-;;:::i;30458:473::-;;;;;;;;;;-1:-1:-1;30774:7:0;;30796:8;;30819;;30842:12;;30869:17;;30901:11;;30458:473;;;1755:25:1;;;1811:2;1796:18;;1789:34;;;;1839:18;;;1832:34;;;;1897:2;1882:18;;1875:34;1940:3;1925:19;;1918:35;1984:3;1969:19;;1962:35;1742:3;1727:19;30458:473:0;1468:535:1;12133:108:0;;;;;;;;;;-1:-1:-1;12221:12:0;;12133:108;;;2154:25:1;;;2142:2;2127:18;12133:108:0;2008:177:1;13918:529:0;;;;;;;;;;-1:-1:-1;13918:529:0;;;;;:::i;:::-;;:::i;11975:93::-;;;;;;;;;;-1:-1:-1;11975:93:0;;12058:2;2793:36:1;;2781:2;2766:18;11975:93:0;2651:184:1;14852:290:0;;;;;;;;;;-1:-1:-1;14852:290:0;;;;;:::i;:::-;;:::i;27942:898::-;;;;;;;;;;;;;:::i;29154:160::-;;;;;;;;;;-1:-1:-1;29154:160:0;;;;;:::i;:::-;;:::i;29056:90::-;;;;;;;;;;-1:-1:-1;29056:90:0;;;;;:::i;:::-;;:::i;12304:143::-;;;;;;;;;;-1:-1:-1;12304:143:0;;;;;:::i;:::-;;:::i;22352:103::-;;;;;;;;;;;;;:::i;29724:170::-;;;;;;;;;;;;;:::i;21701:87::-;;;;;;;;;;-1:-1:-1;21774:6:0;;21701:87;;-1:-1:-1;;;;;21774:6:0;;;3423:51:1;;3411:2;3396:18;21701:87:0;3277:203:1;30221:93:0;;;;;;;;;;;;;:::i;11232:104::-;;;;;;;;;;;;;:::i;15641:475::-;;;;;;;;;;-1:-1:-1;15641:475:0;;;;;:::i;:::-;;:::i;12660:200::-;;;;;;;;;;-1:-1:-1;12660:200:0;;;;;:::i;:::-;;:::i;27030:904::-;;;;;;;;;;;;;:::i;12923:176::-;;;;;;;;;;-1:-1:-1;12923:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13064:18:0;;;13037:7;13064:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12923:176;30322:128;;;;;;;;;;-1:-1:-1;30322:128:0;;;;;:::i;:::-;;:::i;29322:::-;;;;;;;;;;-1:-1:-1;29322:128:0;;;;;:::i;:::-;;:::i;22610:238::-;;;;;;;;;;-1:-1:-1;22610:238:0;;;;;:::i;:::-;;:::i;28848:200::-;;;;;;;;;;-1:-1:-1;28848:200:0;;;;;:::i;:::-;;:::i;29458:258::-;;;;;;;;;;-1:-1:-1;29458:258:0;;;;;:::i;:::-;;:::i;30043:170::-;30107:10;;-1:-1:-1;;;;;30107:10:0;30093;:24;30085:67;;;;-1:-1:-1;;;30085:67:0;;4999:2:1;30085:67:0;;;4981:21:1;5038:2;5018:18;;;5011:30;5077:32;5057:18;;;5050:60;5127:18;;30085:67:0;;;;;;;;;30163:10;;:42;;-1:-1:-1;;;;;30163:10:0;;;;30183:21;30163:42;;;;;:10;:42;:10;:42;30183:21;30163:10;:42;;;;;;;;;;;;;;;;;;;;;30043:170::o;11013:100::-;11067:13;11100:5;11093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:100;:::o;13246:194::-;13354:4;13371:39;10099:10;13394:7;13403:6;13371:8;:39::i;:::-;-1:-1:-1;13428:4:0;13246:194;;;;;:::o;29902:133::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29982:7:::1;:16:::0;;;;30009:8:::1;:18:::0;29902:133::o;13918:529::-;14058:4;14075:36;14085:6;14093:9;14104:6;14075:9;:36::i;:::-;-1:-1:-1;;;;;14151:19:0;;14124:24;14151:19;;;:11;:19;;;;;;;;10099:10;14151:33;;;;;;;;14217:26;;;;14195:116;;;;-1:-1:-1;;;14195:116:0;;6104:2:1;14195:116:0;;;6086:21:1;6143:2;6123:18;;;6116:30;6182:34;6162:18;;;6155:62;-1:-1:-1;;;6233:18:1;;;6226:38;6281:19;;14195:116:0;5902:404:1;14195:116:0;14347:57;14356:6;10099:10;14397:6;14378:16;:25;14347:8;:57::i;:::-;-1:-1:-1;14435:4:0;;13918:529;-1:-1:-1;;;;13918:529:0:o;14852:290::-;10099:10;14965:4;15054:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15054:34:0;;;;;;;;;;14965:4;;14982:130;;15032:7;;15054:47;;15091:10;;15054:47;:::i;:::-;14982:8;:130::i;27942:898::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;27998:11:::1;::::0;-1:-1:-1;;;27998:11:0;::::1;;;27997:12;27989:48;;;::::0;-1:-1:-1;;;27989:48:0;;6775:2:1;27989:48:0::1;::::0;::::1;6757:21:1::0;6814:2;6794:18;;;6787:30;-1:-1:-1;;;6833:18:1;;;6826:53;6896:18;;27989:48:0::1;6573:347:1::0;27989:48:0::1;28048:15;:96:::0;;-1:-1:-1;;;;;;28048:96:0::1;28091:42;28048:96:::0;;::::1;::::0;;;28155:64:::1;::::0;28172:4:::1;::::0;28205:13:::1;12221:12:::0;;;12133:108;28155:64:::1;28258:15;;;;;;;;;-1:-1:-1::0;;;;;28258:15:0::1;-1:-1:-1::0;;;;;28258:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28246:49:0::1;;28318:4;28338:15;;;;;;;;;-1:-1:-1::0;;;;;28338:15:0::1;-1:-1:-1::0;;;;;28338:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28246:125;::::0;-1:-1:-1;;;;;;28246:125:0::1;::::0;;;;;;-1:-1:-1;;;;;7411:15:1;;;28246:125:0::1;::::0;::::1;7393:34:1::0;7463:15;;7443:18;;;7436:43;7328:18;;28246:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28230:13;:141:::0;;-1:-1:-1;;;;;;28230:141:0::1;-1:-1:-1::0;;;;;28230:141:0;;::::1;;::::0;;28382:15:::1;::::0;::::1;:31;28421:21;28466:4;28486:24;28466:4:::0;28486:9:::1;:24::i;:::-;28525:1;28541::::0;28557:7:::1;21774:6:::0;;-1:-1:-1;;;;;21774:6:0;;21701:87;28557:7:::1;28579:15;28382:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28623:13:0::1;::::0;28654:15:::1;::::0;28616:71:::1;::::0;-1:-1:-1;;;28616:71:0;;-1:-1:-1;;;;;28654:15:0;;::::1;28616:71;::::0;::::1;8587:51:1::0;-1:-1:-1;;8654:18:1;;;8647:34;28623:13:0;::::1;::::0;-1:-1:-1;28616:29:0::1;::::0;8560:18:1;;28616:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28698:11:0::1;:18:::0;;-1:-1:-1;;;;28727:18:0;-1:-1:-1;;;28727:18:0;;;28769:12:::1;28756:10;:25:::0;28819:4:::1;-1:-1:-1::0;28792:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;28792:40:0::1;-1:-1:-1::0;28792:40:0::1;::::0;;27942:898::o;29154:160::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29262:4:::1;29250:8;29234:13;12221:12:::0;;;12133:108;29234:13:::1;:24;;;;:::i;:::-;29233:33;;;;:::i;:::-;29222:8;:44:::0;29282:24:::1;::::0;2154:25:1;;;29282:24:0::1;::::0;2142:2:1;2127:18;29282:24:0::1;;;;;;;29154:160:::0;:::o;29056:90::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29122:5:::1;:16:::0;29056:90::o;12304:143::-;-1:-1:-1;;;;;12421:18:0;12394:7;12421:18;;;;;;;;;;;;12304:143::o;22352:103::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;22417:30:::1;22444:1;22417:18;:30::i;:::-;22352:103::o:0;29724:170::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;12221:12;;29778:8:::1;:24:::0;12221:12;;29813::::1;:28:::0;29857:29:::1;29872:13;12221:12:::0;;;12133:108;29872:13:::1;29857:29;::::0;2154:25:1;;;2142:2;2127:18;29857:29:0::1;;;;;;;29724:170::o:0;30221:93::-;30264:42;30281:24;30299:4;30281:9;:24::i;:::-;30264:16;:42::i;11232:104::-;11288:13;11321:7;11314:14;;;;;:::i;15641:475::-;10099:10;15759:4;15803:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15803:34:0;;;;;;;;;;15870:35;;;;15848:122;;;;-1:-1:-1;;;15848:122:0;;9539:2:1;15848:122:0;;;9521:21:1;9578:2;9558:18;;;9551:30;9617:34;9597:18;;;9590:62;-1:-1:-1;;;9668:18:1;;;9661:35;9713:19;;15848:122:0;9337:401:1;15848:122:0;16006:67;10099:10;16029:7;16057:15;16038:16;:34;16006:8;:67::i;:::-;-1:-1:-1;16104:4:0;;15641:475;-1:-1:-1;;;15641:475:0:o;12660:200::-;12771:4;12788:42;10099:10;12812:9;12823:6;12788:9;:42::i;27030:904::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;27110:4:::1;27083:33;::::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;27083:40:0::1;27119:4;27083:40;::::0;;27143:11:::1;::::0;-1:-1:-1;;;27143:11:0;::::1;27083:40;27143:11;27142:12;27134:48;;;::::0;-1:-1:-1;;;27134:48:0;;6775:2:1;27134:48:0::1;::::0;::::1;6757:21:1::0;6814:2;6794:18;;;6787:30;-1:-1:-1;;;6833:18:1;;;6826:53;6896:18;;27134:48:0::1;6573:347:1::0;27134:48:0::1;27193:15;:96:::0;;-1:-1:-1;;;;;;27193:96:0::1;27236:42;27193:96:::0;;::::1;::::0;;;27300:64:::1;::::0;27317:4:::1;::::0;27350:13:::1;12221:12:::0;;;12133:108;27300:64:::1;27403:15;;;;;;;;;-1:-1:-1::0;;;;;27403:15:0::1;-1:-1:-1::0;;;;;27403:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27391:49:0::1;;27463:4;27483:15;;;;;;;;;-1:-1:-1::0;;;;;27483:15:0::1;-1:-1:-1::0;;;;;27483:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27391:125;::::0;-1:-1:-1;;;;;;27391:125:0::1;::::0;;;;;;-1:-1:-1;;;;;7411:15:1;;;27391:125:0::1;::::0;::::1;7393:34:1::0;7463:15;;7443:18;;;7436:43;7328:18;;27391:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27375:13;:141:::0;;-1:-1:-1;;;;;;27375:141:0::1;-1:-1:-1::0;;;;;27375:141:0;;::::1;;::::0;;27527:15:::1;::::0;::::1;:31;27566:21;27611:4;27631:24;27611:4:::0;27631:9:::1;:24::i;:::-;27670:1;27686::::0;27702:7:::1;21774:6:::0;;-1:-1:-1;;;;;21774:6:0;;21701:87;27702:7:::1;27724:15;27527:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27768:13:0::1;::::0;27799:15:::1;::::0;27761:71:::1;::::0;-1:-1:-1;;;27761:71:0;;-1:-1:-1;;;;;27799:15:0;;::::1;27761:71;::::0;::::1;8587:51:1::0;-1:-1:-1;;8654:18:1;;;8647:34;27768:13:0;::::1;::::0;-1:-1:-1;27761:29:0::1;::::0;8560:18:1;;27761:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27843:11:0::1;:18:::0;;-1:-1:-1;;;;27872:18:0;-1:-1:-1;;;27872:18:0;;;27914:12:::1;27901:10;:25:::0;27030:904::o;30322:128::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30406:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;30406:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30322:128::o;29322:::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29438:4:::1;29426:8;29410:13;12221:12:::0;;;12133:108;29410:13:::1;:24;;;;:::i;:::-;29409:33;;;;:::i;:::-;29394:12;:48:::0;-1:-1:-1;29322:128:0:o;22610:238::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22713:22:0;::::1;22691:110;;;::::0;-1:-1:-1;;;22691:110:0;;9945:2:1;22691:110:0::1;::::0;::::1;9927:21:1::0;9984:2;9964:18;;;9957:30;10023:34;10003:18;;;9996:62;-1:-1:-1;;;10074:18:1;;;10067:36;10120:19;;22691:110:0::1;9743:402:1::0;22691:110:0::1;22812:28;22831:8;22812:18;:28::i;28848:200::-:0;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;28982:10:::1;:23:::0;;-1:-1:-1;;;;;28982:23:0;;::::1;-1:-1:-1::0;;;;;;28982:23:0;;::::1;;::::0;;;29016:11:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;28848:200::o;29458:258::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29642:5:::1;29622:16;29606:13;12221:12:::0;;;12133:108;29606:13:::1;:32;;;;:::i;:::-;29605:42;;;;:::i;:::-;29585:17;:62:::0;29703:5:::1;29689:10:::0;29673:13:::1;12221:12:::0;;;12133:108;29673:13:::1;:26;;;;:::i;:::-;29672:36;;;;:::i;:::-;29658:11;:50:::0;-1:-1:-1;;29458:258:0:o;19424:380::-;-1:-1:-1;;;;;19560:19:0;;19552:68;;;;-1:-1:-1;;;19552:68:0;;10352:2:1;19552:68:0;;;10334:21:1;10391:2;10371:18;;;10364:30;10430:34;10410:18;;;10403:62;-1:-1:-1;;;10481:18:1;;;10474:34;10525:19;;19552:68:0;10150:400:1;19552:68:0;-1:-1:-1;;;;;19639:21:0;;19631:68;;;;-1:-1:-1;;;19631:68:0;;10757:2:1;19631:68:0;;;10739:21:1;10796:2;10776:18;;;10769:30;10835:34;10815:18;;;10808:62;-1:-1:-1;;;10886:18:1;;;10879:32;10928:19;;19631:68:0;10555:398:1;19631:68:0;-1:-1:-1;;;;;19712:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19764:32;;2154:25:1;;;19764:32:0;;2127:18:1;19764:32:0;;;;;;;19424:380;;;:::o;30939:2258::-;-1:-1:-1;;;;;31071:18:0;;31063:68;;;;-1:-1:-1;;;31063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31150:16:0;;31142:64;;;;-1:-1:-1;;;31142:64:0;;;;;;;:::i;:::-;31234:1;31225:6;:10;31217:64;;;;-1:-1:-1;;;31217:64:0;;11970:2:1;31217:64:0;;;11952:21:1;12009:2;11989:18;;;11982:30;12048:34;12028:18;;;12021:62;-1:-1:-1;;;12099:18:1;;;12092:39;12148:19;;31217:64:0;11768:405:1;31217:64:0;31292:17;31336:7;21774:6;;-1:-1:-1;;;;;21774:6:0;;21701:87;31336:7;-1:-1:-1;;;;;31328:15:0;:4;-1:-1:-1;;;;;31328:15:0;;;:32;;;;-1:-1:-1;21774:6:0;;-1:-1:-1;;;;;31347:13:0;;;21774:6;;31347:13;;31328:32;31324:1702;;;31389:28;31413:3;31389:19;31400:7;;31389:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;31464:13;;31377:40;;-1:-1:-1;;;;;;31456:21:0;;;31464:13;;31456:21;:72;;;;-1:-1:-1;31512:15:0;;-1:-1:-1;;;;;31498:30:0;;;31512:15;;31498:30;;31456:72;:116;;;;-1:-1:-1;;;;;;31550:22:0;;;;;;:18;:22;;;;;;;;31549:23;31456:116;31434:548;;;31625:8;;31615:6;:18;;31607:52;;;;-1:-1:-1;;;31607:52:0;;12380:2:1;31607:52:0;;;12362:21:1;12419:2;12399:18;;;12392:30;-1:-1:-1;;;12438:18:1;;;12431:51;12499:18;;31607:52:0;12178:345:1;31607:52:0;31734:12;;31724:6;31708:13;31718:2;31708:9;:13::i;:::-;:22;;;;:::i;:::-;:38;;31678:136;;;;-1:-1:-1;;;31678:136:0;;12730:2:1;31678:136:0;;;12712:21:1;12769:2;12749:18;;;12742:30;-1:-1:-1;;;12788:18:1;;;12781:54;12852:18;;31678:136:0;12528:348:1;31678:136:0;31856:12;31839:10;;31852:1;31839:14;;;;:::i;:::-;:29;31835:102;;;33451:20;;33499:8;31893:24;;;;;;31955:9;:11;;;:9;:11;;;:::i;:::-;;;;;;31434:548;32008:13;;-1:-1:-1;;;;;32002:19:0;;;32008:13;;32002:19;;;;:46;;-1:-1:-1;;;;;;32026:22:0;;;;;;:18;:22;;;;;;;;32025:23;32002:46;31998:223;;;32125:12;;32115:6;32099:13;32109:2;32099:9;:13::i;:::-;:22;;;;:::i;:::-;:38;;32069:136;;;;-1:-1:-1;;;32069:136:0;;12730:2:1;32069:136:0;;;12712:21:1;12769:2;12749:18;;;12742:30;-1:-1:-1;;;12788:18:1;;;12781:54;12852:18;;32069:136:0;12528:348:1;32069:136:0;32247:13;;-1:-1:-1;;;;;32241:19:0;;;32247:13;;32241:19;:44;;;;-1:-1:-1;;;;;;32264:21:0;;32280:4;32264:21;;32241:44;32237:126;;;32318:29;32343:3;32318:20;32329:8;;32318:6;:10;;:20;;;;:::i;:29::-;32306:41;;32237:126;32379:28;32410:24;32428:4;32410:9;:24::i;:::-;32472:6;;32379:55;;-1:-1:-1;;;;32472:6:0;;;;32471:7;:47;;;;-1:-1:-1;32505:13:0;;-1:-1:-1;;;;;32499:19:0;;;32505:13;;32499:19;32471:47;:79;;;;-1:-1:-1;32539:11:0;;-1:-1:-1;;;32539:11:0;;;;32471:79;:140;;;;;32594:17;;32571:20;:40;32471:140;:191;;;;;32644:18;;32632:9;;:30;32471:191;32449:566;;;32697:109;32736:51;32740:6;32748:38;32752:20;32774:11;;32748:3;:38::i;:::-;32736:3;:51::i;32697:109::-;32854:21;32898:22;;32894:106;;32945:35;32958:21;32945:12;:35::i;:::-;32678:337;32449:566;31362:1664;31324:1702;33042:13;;33038:93;;33072:47;33088:4;33102;33109:9;33072:15;:47::i;:::-;33141:48;33157:4;33163:2;33167:21;:6;33178:9;33167:10;:21::i;:::-;33141:15;:48::i;:::-;31052:2145;30939:2258;;;:::o;23008:191::-;23101:6;;;-1:-1:-1;;;;;23118:17:0;;;-1:-1:-1;;;;;;23118:17:0;;;;;;;23151:40;;23101:6;;;23118:17;23101:6;;23151:40;;23082:16;;23151:40;23071:128;23008:191;:::o;33523:483::-;26248:6;:13;;-1:-1:-1;;;;26248:13:0;-1:-1:-1;;;26248:13:0;;;33625:16:::1;::::0;;33639:1:::1;33625:16:::0;;;;;::::1;::::0;;-1:-1:-1;;33625:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33625:16:0::1;33601:40;;33670:4;33652;33657:1;33652:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33652:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;33696:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;33696:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;33652:7;;33696:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33686:4;33691:1;33686:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33686:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;33761:15:::1;::::0;33729:62:::1;::::0;33746:4:::1;::::0;33761:15:::1;33779:11:::0;33729:8:::1;:62::i;:::-;33802:15;::::0;:196:::1;::::0;-1:-1:-1;;;33802:196:0;;-1:-1:-1;;;;;33802:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;33883:11;;33802:15:::1;::::0;33925:4;;33952::::1;::::0;33972:15:::1;::::0;33802:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26284:6:0;:14;;-1:-1:-1;;;;26284:14:0;;;-1:-1:-1;;;;33523:483:0:o;3378:98::-;3436:7;3463:5;3467:1;3463;:5;:::i;:::-;3456:12;3378:98;-1:-1:-1;;;3378:98:0:o;3777:::-;3835:7;3862:5;3866:1;3862;:5;:::i;33205:107::-;33262:7;33294:1;33290;:5;33289:15;;33303:1;33289:15;;;-1:-1:-1;33299:1:0;33205:107;-1:-1:-1;33205:107:0:o;34014:285::-;34071:15;34089:26;34111:3;34089:17;34100:5;;34089:6;:10;;:17;;;;:::i;:26::-;34171:11;;34163:45;;34071:44;;-1:-1:-1;34126:12:0;;-1:-1:-1;;;;;34171:11:0;;;;34071:44;;34126:12;34163:45;34126:12;34163:45;34071:44;34171:11;34163:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34241:10:0;;34233:58;;34149:59;;-1:-1:-1;;;;;;34241:10:0;;34265:21;;34233:58;;;;34265:21;34241:10;34233:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34014:285:0:o;16606:770::-;-1:-1:-1;;;;;16746:20:0;;16738:70;;;;-1:-1:-1;;;16738:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16827:23:0;;16819:71;;;;-1:-1:-1;;;16819:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16987:17:0;;16963:21;16987:17;;;;;;;;;;;17037:23;;;;17015:111;;;;-1:-1:-1;;;17015:111:0;;14682:2:1;17015:111:0;;;14664:21:1;14721:2;14701:18;;;14694:30;14760:34;14740:18;;;14733:62;-1:-1:-1;;;14811:18:1;;;14804:36;14857:19;;17015:111:0;14480:402:1;17015:111:0;-1:-1:-1;;;;;17162:17:0;;;:9;:17;;;;;;;;;;;17182:22;;;17162:42;;17226:20;;;;;;;;:30;;17198:6;;17162:9;17226:30;;17198:6;;17226:30;:::i;:::-;;;;;;;;17291:9;-1:-1:-1;;;;;17274:35:0;17283:6;-1:-1:-1;;;;;17274:35:0;;17302:6;17274:35;;;;2154:25:1;;2142:2;2127:18;;2008:177;17274:35:0;;;;;;;;17322:46;20404:125;3021:98;3079:7;3106:5;3110:1;3106;:5;:::i;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;1215:248::-;1283:6;1291;1344:2;1332:9;1323:7;1319:23;1315:32;1312:52;;;1360:1;1357;1350:12;1312:52;-1:-1:-1;;1383:23:1;;;1453:2;1438:18;;;1425:32;;-1:-1:-1;1215:248:1:o;2190:456::-;2267:6;2275;2283;2336:2;2324:9;2315:7;2311:23;2307:32;2304:52;;;2352:1;2349;2342:12;2304:52;2391:9;2378:23;2410:31;2435:5;2410:31;:::i;:::-;2460:5;-1:-1:-1;2517:2:1;2502:18;;2489:32;2530:33;2489:32;2530:33;:::i;:::-;2190:456;;2582:7;;-1:-1:-1;;;2636:2:1;2621:18;;;;2608:32;;2190:456::o;2840:180::-;2899:6;2952:2;2940:9;2931:7;2927:23;2923:32;2920:52;;;2968:1;2965;2958:12;2920:52;-1:-1:-1;2991:23:1;;2840:180;-1:-1:-1;2840:180:1:o;3025:247::-;3084:6;3137:2;3125:9;3116:7;3112:23;3108:32;3105:52;;;3153:1;3150;3143:12;3105:52;3192:9;3179:23;3211:31;3236:5;3211:31;:::i;3485:388::-;3553:6;3561;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;3669:9;3656:23;3688:31;3713:5;3688:31;:::i;:::-;3738:5;-1:-1:-1;3795:2:1;3780:18;;3767:32;3808:33;3767:32;3808:33;:::i;:::-;3860:7;3850:17;;;3485:388;;;;;:::o;3878:118::-;3964:5;3957:13;3950:21;3943:5;3940:32;3930:60;;3986:1;3983;3976:12;4001:382;4066:6;4074;4127:2;4115:9;4106:7;4102:23;4098:32;4095:52;;;4143:1;4140;4133:12;4095:52;4182:9;4169:23;4201:31;4226:5;4201:31;:::i;:::-;4251:5;-1:-1:-1;4308:2:1;4293:18;;4280:32;4321:30;4280:32;4321:30;:::i;5156:380::-;5235:1;5231:12;;;;5278;;;5299:61;;5353:4;5345:6;5341:17;5331:27;;5299:61;5406:2;5398:6;5395:14;5375:18;5372:38;5369:161;;5452:10;5447:3;5443:20;5440:1;5433:31;5487:4;5484:1;5477:15;5515:4;5512:1;5505:15;5541:356;5743:2;5725:21;;;5762:18;;;5755:30;5821:34;5816:2;5801:18;;5794:62;5888:2;5873:18;;5541:356::o;6311:127::-;6372:10;6367:3;6363:20;6360:1;6353:31;6403:4;6400:1;6393:15;6427:4;6424:1;6417:15;6443:125;6508:9;;;6529:10;;;6526:36;;;6542:18;;:::i;6925:251::-;6995:6;7048:2;7036:9;7027:7;7023:23;7019:32;7016:52;;;7064:1;7061;7054:12;7016:52;7096:9;7090:16;7115:31;7140:5;7115:31;:::i;7490:607::-;-1:-1:-1;;;;;7849:15:1;;;7831:34;;7896:2;7881:18;;7874:34;;;;7939:2;7924:18;;7917:34;;;;7982:2;7967:18;;7960:34;;;;8031:15;;;8025:3;8010:19;;8003:44;7811:3;8063:19;;8056:35;;;;7780:3;7765:19;;7490:607::o;8102:306::-;8190:6;8198;8206;8259:2;8247:9;8238:7;8234:23;8230:32;8227:52;;;8275:1;8272;8265:12;8227:52;8304:9;8298:16;8288:26;;8354:2;8343:9;8339:18;8333:25;8323:35;;8398:2;8387:9;8383:18;8377:25;8367:35;;8102:306;;;;;:::o;8692:245::-;8759:6;8812:2;8800:9;8791:7;8787:23;8783:32;8780:52;;;8828:1;8825;8818:12;8780:52;8860:9;8854:16;8879:28;8901:5;8879:28;:::i;8942:168::-;9015:9;;;9046;;9063:15;;;9057:22;;9043:37;9033:71;;9084:18;;:::i;9115:217::-;9155:1;9181;9171:132;;9225:10;9220:3;9216:20;9213:1;9206:31;9260:4;9257:1;9250:15;9288:4;9285:1;9278:15;9171:132;-1:-1:-1;9317:9:1;;9115:217::o;10958:401::-;11160:2;11142:21;;;11199:2;11179:18;;;11172:30;11238:34;11233:2;11218:18;;11211:62;-1:-1:-1;;;11304:2:1;11289:18;;11282:35;11349:3;11334:19;;10958:401::o;11364:399::-;11566:2;11548:21;;;11605:2;11585:18;;;11578:30;11644:34;11639:2;11624:18;;11617:62;-1:-1:-1;;;11710:2:1;11695:18;;11688:33;11753:3;11738:19;;11364:399::o;12881:135::-;12920:3;12941:17;;;12938:43;;12961:18;;:::i;:::-;-1:-1:-1;13008:1:1;12997:13;;12881:135::o;13153:127::-;13214:10;13209:3;13205:20;13202:1;13195:31;13245:4;13242:1;13235:15;13269:4;13266:1;13259:15;13285:980;13547:4;13595:3;13584:9;13580:19;13626:6;13615:9;13608:25;13652:2;13690:6;13685:2;13674:9;13670:18;13663:34;13733:3;13728:2;13717:9;13713:18;13706:31;13757:6;13792;13786:13;13823:6;13815;13808:22;13861:3;13850:9;13846:19;13839:26;;13900:2;13892:6;13888:15;13874:29;;13921:1;13931:195;13945:6;13942:1;13939:13;13931:195;;;14010:13;;-1:-1:-1;;;;;14006:39:1;13994:52;;14101:15;;;;14066:12;;;;14042:1;13960:9;13931:195;;;-1:-1:-1;;;;;;;14182:32:1;;;;14177:2;14162:18;;14155:60;-1:-1:-1;;;14246:3:1;14231:19;14224:35;14143:3;13285:980;-1:-1:-1;;;13285:980:1:o;14887:128::-;14954:9;;;14975:11;;;14972:37;;;14989:18;;:::i

Swarm Source

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