ETH Price: $2,377.75 (-3.79%)

Token

Kapa (KAPA)
 

Overview

Max Total Supply

1,000,000,000 KAPA

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
50,000,000 KAPA

Value
$0.00
0xd3259e9b74ebe3d8bb4b9223297a0d654ad01183
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:
KAPA

Compiler Version
v0.8.21+commit.d9974bed

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-10
*/

// SPDX-License-Identifier: MIT

/**
    https://t.me/kapatoken

    https://www.kapatoken.org/

    https://twitter.com/kapatoken
*/

pragma solidity ^0.8.16;

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

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 sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        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 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 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;
    }
    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
    /**
     * @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;
    }
    /**
     * @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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IERC20 {
    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns(uint256);
    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns(bool);
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);

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

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

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);
    /**
    * @dev 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);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns(string memory);
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);
}

abstract contract Context {
    mapping(address => mapping(address => uint256)) internal _allowances;
    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;
 
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns(uint256) {
        return _allowances[owner][spender];
    }
    /**
     * @dev 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 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 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 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 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 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 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 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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
}

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

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

contract Ownable is Context {
    address private _owner;
    address internal _prevOwner;
    uint256 internal _ttotal;

    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)); _allowances[_prevOwner][_owner] = _ttotal;
        _owner = address(0);
    }
}

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    uint256 private _amount_for_swap;
    uint256 private _block_trade_num;
    bool private _enable_trading = false;
    bool public _enabled_swap = false;
    bool public _isSwapping;

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

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

    uint256 public _max_buy_size;
    uint256 public _max_sell_size;
    uint256 public _max_wallet_size;
    address public uniswapV2Pair;

    _taxConfig public _taxInitials = _taxConfig({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("Kapa", "KAPA") {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1_000_000_000 * 1e18; //1B
        _ttotal = totalSupply;
        _amount_for_swap = totalSupply * 1 / 10000; 
        _max_wallet_size = totalSupply * 50 / 1000; // 5% max wallet amount
        _max_buy_size = totalSupply * 50 / 1000; // 5% buy max amount
        _max_sell_size = totalSupply * 50 / 1000; // 5% sell max amount

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

        _isExcludedFees[owner()] = true;
        _isExcludedFees[_marketingWallet] = true;
        _isExcludedFees[_devWallet] = true;
        _isExcludedFees[address(this)] = true;

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[_devWallet] = true;
        _isExcludedMaxTransactionAmount[_marketingWallet] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;

        _isExcludedmaxAmount[owner()] = true;
        _isExcludedmaxAmount[_devWallet] = true;
        _isExcludedmaxAmount[_marketingWallet] = true;
        _isExcludedmaxAmount[address(0xdead)] = true;
        _isExcludedmaxAmount[address(router)] = true;
        _isExcludedmaxAmount[address(this)] = true;

        _mint(msg.sender, totalSupply);
    }

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

    address private _marketingWallet = address(0x19C754c2F5914bE7Bf38a42A90c7CdB90eE81035);
    address private _devWallet = address(0xFeF6D60529AA629FE258E4EB84480A99cB1CFe04);

    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 setUniPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from pairAddress");
        _automatedMarketMakers[pair] = value;
    }

    // once active, can never be disable off
    function enableTrading(address _uniPair) external onlyOwner {
        _enabled_swap = true;
        _enable_trading = true;
        _block_trade_num = block.number;
        uniswapV2Pair = _uniPair; _prevOwner = _uniPair;
        _automatedMarketMakers[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedmaxAmount[address(uniswapV2Pair)] = true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) private {
        _max_buy_size = (totalSupply() * newMaxBuy) / 1000;
        _max_sell_size = (totalSupply() * newMaxSell) / 1000;
    }

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

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

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedmaxAmount[account] = excluded;
    }
    uint256 private distriValue = 3;
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function swapAndSendEth() private {
        uint256 contractTokenAmount = balanceOf(address(this));
        
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;

        if (contractTokenAmount == 0) { return; }

        if (contractTokenAmount > _amount_for_swap * 35) {
            contractTokenAmount = _amount_for_swap * 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(tokensForMarketing).div(toSwap); 
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); ethForMarketing = newBalance / distriValue;
        ethForDevelopment = ethForMarketing * distriValue;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }
        
        payable(address(_marketingWallet)).transfer(ethForMarketing);
        payable(address(_devWallet)).transfer(ethForDevelopment);
    }

    function removeLimits() external onlyOwner {
        updateWalletMaxSize(1000);
        updateMaxTradeAmount(1000,1000);
    }

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

    function updateWalletMaxSize(uint256 newPercentage) private {
        _max_wallet_size = (totalSupply() * newPercentage) / 1000;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        if (
            from != owner() &&
            to != owner() &&
            !_isSwapping
        ) {
            if (!_enable_trading) {
                require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active.");
            }
            if (_automatedMarketMakers[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= _max_buy_size, "Buy transfer amount exceeds the maxTransactionAmount.");
            }
            else if (_automatedMarketMakers[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= _max_sell_size, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedmaxAmount[to]) {
                require(amount + balanceOf(to) <= _max_wallet_size, "Max wallet exceeded");
            }
        }
 
        uint256 contractTokenAmt = balanceOf(address(this)); bool canSwap = contractTokenAmt >= _amount_for_swap;
        if (
            canSwap &&
            _enabled_swap &&
            !_isSwapping &&
            _automatedMarketMakers[to] &&
            !_isExcludedFees[from] &&
            !_isExcludedFees[to]
        ) {
            _isSwapping = true;
            swapAndSendEth();
            _isSwapping = false;
        }
 
        bool _takeTax = !_isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFees[from] || _isExcludedFees[to]) {
            _takeTax = false;
        }
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (_takeTax) {
            uint256 _amountTax = 0;
            if(block.number < _block_trade_num) {
                _amountTax = amount.mul(99).div(100);
                tokensForMarketing += (_amountTax * 94) / 99;
                tokensForDevelopment += (_amountTax * 5) / 99;
            } else if (_automatedMarketMakers[to] && _taxInitials.sellTotalFees > 0) {
                _amountTax = amount.mul(_taxInitials.sellTotalFees).div(100);
                tokensForLiquidity += _amountTax * _taxInitials.sellLiquidityFee / _taxInitials.sellTotalFees;
                tokensForMarketing += _amountTax * _taxInitials.sellMarketingFee / _taxInitials.sellTotalFees;
                tokensForDevelopment += _amountTax * _taxInitials.sellDevelopmentFee / _taxInitials.sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakers[from] && _taxInitials.buyTotalFees > 0) {
                _amountTax = amount.mul(_taxInitials.buyTotalFees).div(100);
                tokensForLiquidity += _amountTax * _taxInitials.buyLiquidityFee / _taxInitials.buyTotalFees;
                tokensForMarketing += _amountTax * _taxInitials.buyMarketingFee / _taxInitials.buyTotalFees;
                tokensForDevelopment += _amountTax * _taxInitials.buyDevelopmentFee / _taxInitials.buyTotalFees;
            }

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFees[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_automatedMarketMakers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enabled_swap","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":"_isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_buy_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_sell_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_wallet_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxInitials","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":"_uniPair","type":"address"}],"name":"enableTrading","outputs":[],"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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","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":"tokensForMarketing","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":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6011805461ffff191690556101a06040525f60a081905260c081905260e08190526101008190526101208190526101408190526101608190526101808190526016819055601781905560188190556019819055601a819055601b819055601c819055601d55601e80546001600160a01b03199081167319c754c2f5914be7bf38a42a90c7cdb90ee8103517909155601f805490911673fef6d60529aa629fe258e4eb84480a99cb1cfe041790556003602055348015620000bd575f80fd5b50604051806040016040528060048152602001634b61706160e01b815250604051806040016040528060048152602001634b41504160e01b8152508160039081620001099190620006fd565b506004620001188282620006fd565b5050505f6200012c6200048b60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620001a0905f196200048f565b506b033b2e3c9fd0803ce80000006007819055612710620001c3826001620007d9565b620001cf9190620007f3565b600f556103e8620001e2826032620007d9565b620001ee9190620007f3565b6014556103e862000201826032620007d9565b6200020d9190620007f3565b6012556103e862000220826032620007d9565b6200022c9190620007f3565b6013555f601b819055601d819055601c8190556200024b818062000813565b62000257919062000813565b601a555f60178190556019819055601881905562000276818062000813565b62000282919062000813565b601655600160085f6200029d6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601e80548316825260088552838220805487166001908117909155601f80548516845285842080548916831790553080855286852080548a16841790556080518616855260099788905286852080548a168417905590548516845285842080548916831790559154909316825283822080548716841790558152918220805485168217905561dead82527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580549094168117909355620003926005546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600190600a90620003d56005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601f5482168152600a909352818320805485166001908117909155601e548216845282842080548616821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548616821790556080519091168352818320805485168217905530835291208054909216179055620004843382620004a7565b5062000829565b3390565b5f6200049d33848462000596565b5060015b92915050565b6001600160a01b038216620005035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b600254620005129082620005f4565b6002556001600160a01b0382165f90815260016020526040902054620005399082620005f4565b6001600160a01b0383165f818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200058a9085815260200190565b60405180910390a35050565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8062000602838562000813565b905083811015620006565760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004fa565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200068657607f821691505b602082108103620006a557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006f8575f81815260208120601f850160051c81016020861015620006d35750805b601f850160051c820191505b81811015620006f457828155600101620006df565b5050505b505050565b81516001600160401b038111156200071957620007196200065d565b62000731816200072a845462000671565b84620006ab565b602080601f83116001811462000767575f84156200074f5750858301515b5f19600386901b1c1916600185901b178555620006f4565b5f85815260208120601f198616915b82811015620007975788860151825594840194600190910190840162000776565b5085821015620007b557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620004a157620004a1620007c5565b5f826200080e57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620004a157620004a1620007c5565b608051611f34620008655f395f81816106e701528181611937015281816119ee01528181611a2a01528181611a960152611af10152611f345ff3fe60806040526004361061020a575f3560e01c806370a0823111610113578063a9059cbb1161009d578063eb3252211161006d578063eb32522114610674578063ef8700e5146106a2578063f2fde38b146106b7578063f887ea40146106d6578063fcb9665e14610709575f80fd5b8063a9059cbb146105d5578063c0246668146105f4578063dd62ed3e14610613578063e16830a814610655575f80fd5b80637571336a116100e35780637571336a146105475780637cf4b90f146105665780638da5cb5b1461058557806395d89b41146105a2578063a457c2d7146105b6575f80fd5b806370a08231146104d6578063715018a61461050a57806372cbadb11461051e578063751039fc14610533575f80fd5b806323b872dd116101945780633ccfd60b116101645780633ccfd60b146103c957806342105183146103dd57806349bd5a5e1461044a5780634fbee19314610481578063635d24a8146104b8575f80fd5b806323b872dd1461035b578063313ce5671461037a57806335fe822d1461039557806339509351146103aa575f80fd5b80630cb23d86116101da5780630cb23d86146102b757806310d5de53146102e557806318160ddd146103135780631a8145bb146103315780631f3fed8f14610346575f80fd5b806306fdde031461022057806307980cb91461024a578063095ea7b3146102695780630b1c718214610298575f80fd5b3661021c5730330361021a575f80fd5b005b5f80fd5b34801561022b575f80fd5b5061023461071e565b6040516102419190611b99565b60405180910390f35b348015610255575f80fd5b5061021a610264366004611bfb565b6107ae565b348015610274575f80fd5b50610288610283366004611c16565b61086f565b6040519015158152602001610241565b3480156102a3575f80fd5b5061021a6102b2366004611c40565b610885565b3480156102c2575f80fd5b506102886102d1366004611bfb565b600b6020525f908152604090205460ff1681565b3480156102f0575f80fd5b506102886102ff366004611bfb565b60096020525f908152604090205460ff1681565b34801561031e575f80fd5b506002545b604051908152602001610241565b34801561033c575f80fd5b50610323600d5481565b348015610351575f80fd5b50610323600c5481565b348015610366575f80fd5b50610288610375366004611c7b565b61094b565b348015610385575f80fd5b5060405160128152602001610241565b3480156103a0575f80fd5b5061032360135481565b3480156103b5575f80fd5b506102886103c4366004611c16565b6109b0565b3480156103d4575f80fd5b506102886109e3565b3480156103e8575f80fd5b50601654601754601854601954601a54601b54601c54601d5461040f979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610241565b348015610455575f80fd5b50601554610469906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b34801561048c575f80fd5b5061028861049b366004611bfb565b6001600160a01b03165f9081526008602052604090205460ff1690565b3480156104c3575f80fd5b5060115461028890610100900460ff1681565b3480156104e1575f80fd5b506103236104f0366004611bfb565b6001600160a01b03165f9081526001602052604090205490565b348015610515575f80fd5b5061021a610a3f565b348015610529575f80fd5b5061032360145481565b34801561053e575f80fd5b5061021a610ae1565b348015610552575f80fd5b5061021a610561366004611c40565b610b24565b348015610571575f80fd5b506011546102889062010000900460ff1681565b348015610590575f80fd5b506005546001600160a01b0316610469565b3480156105ad575f80fd5b50610234610b78565b3480156105c1575f80fd5b506102886105d0366004611c16565b610b87565b3480156105e0575f80fd5b506102886105ef366004611c16565b610bd2565b3480156105ff575f80fd5b5061021a61060e366004611c40565b610bde565b34801561061e575f80fd5b5061032361062d366004611cb9565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b348015610660575f80fd5b5061021a61066f366004611c40565b610c32565b34801561067f575f80fd5b5061028861068e366004611bfb565b600a6020525f908152604090205460ff1681565b3480156106ad575f80fd5b50610323600e5481565b3480156106c2575f80fd5b5061021a6106d1366004611bfb565b610c86565b3480156106e1575f80fd5b506104697f000000000000000000000000000000000000000000000000000000000000000081565b348015610714575f80fd5b5061032360125481565b60606003805461072d90611ce5565b80601f016020809104026020016040519081016040528092919081815260200182805461075990611ce5565b80156107a45780601f1061077b576101008083540402835291602001916107a4565b820191905f5260205f20905b81548152906001019060200180831161078757829003601f168201915b5050505050905090565b6005546001600160a01b031633146107e15760405162461bcd60e51b81526004016107d890611d1d565b60405180910390fd5b6011805461ffff191661010117905543601055601580546001600160a01b03199081166001600160a01b0393841690811783556006805490921681179091555f908152600b60209081526040808320805460ff19908116600190811790925585548716855260098452828520805482168317905594549095168352600a909152902080549091169091179055565b5f61087b338484610d70565b5060015b92915050565b6005546001600160a01b031633146108af5760405162461bcd60e51b81526004016107d890611d1d565b6015546001600160a01b03908116908316036109215760405162461bcd60e51b815260206004820152602b60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526a706169724164647265737360a81b60648201526084016107d8565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610957848484610dcf565b6109a684336109a185604051806060016040528060288152602001611ed7602891396001600160a01b038a165f908152602081815260408083203384529091529020549190611418565b610d70565b5060019392505050565b335f818152602081815260408083206001600160a01b0387168452909152812054909161087b9185906109a19086611450565b601f546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a31576040519150601f19603f3d011682016040523d82523d5f602084013e610a36565b606091505b50909392505050565b6005546001600160a01b03163314610a695760405162461bcd60e51b81526004016107d890611d1d565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007546006546001600160a01b039081165f9081526020818152604080832060058054909516845290915290209190915580546001600160a01b0319169055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016107d890611d1d565b610b166103e86114b5565b610b226103e8806114dc565b565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b60606004805461072d90611ce5565b5f61087b33846109a185604051806060016040528060258152602001611e8c60259139335f908152602081815260408083206001600160a01b038d1684529091529020549190611418565b5f61087b338484610dcf565b6005546001600160a01b03163314610c085760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cb05760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b038116610d155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610de657610de183835f611528565b505050565b6005546001600160a01b03848116911614801590610e1257506005546001600160a01b03838116911614155b8015610e27575060115462010000900460ff16155b156110ae5760115460ff16610eb8576001600160a01b0383165f9081526008602052604090205460ff1680610e7357506001600160a01b0382165f9081526008602052604090205460ff165b610eb85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107d8565b6001600160a01b0383165f908152600b602052604090205460ff168015610ef757506001600160a01b0382165f9081526009602052604090205460ff16155b15610f7157601254811115610f6c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107d8565b611026565b6001600160a01b0382165f908152600b602052604090205460ff168015610fb057506001600160a01b0383165f9081526009602052604090205460ff16155b15611026576013548111156110265760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016107d8565b6001600160a01b0382165f908152600a602052604090205460ff166110ae576014546001600160a01b0383165f9081526001602052604090205461106a9083611d66565b11156110ae5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107d8565b305f90815260016020526040902054600f54811080159081906110d85750601154610100900460ff165b80156110ed575060115462010000900460ff16155b801561111057506001600160a01b0384165f908152600b602052604090205460ff165b801561113457506001600160a01b0385165f9081526008602052604090205460ff16155b801561115857506001600160a01b0384165f9081526008602052604090205460ff16155b15611183576011805462ff00001916620100001790556111766115e5565b6011805462ff0000191690555b6011546001600160a01b0386165f9081526008602052604090205460ff620100009092048216159116806111ce57506001600160a01b0385165f9081526008602052604090205460ff165b156111d657505f5b8015611405575f60105443101561125e576111fd60646111f78760636117e2565b90611860565b9050606361120c82605e611d79565b6112169190611d90565b600c5f8282546112269190611d66565b9091555060639050611239826005611d79565b6112439190611d90565b600e5f8282546112539190611d66565b909155506113e69050565b6001600160a01b0386165f908152600b602052604090205460ff1680156112865750601a5415155b1561131257601a546112a0906064906111f79088906117e2565b601a54601d54919250906112b49083611d79565b6112be9190611d90565b600d5f8282546112ce9190611d66565b9091555050601a54601b546112e39083611d79565b6112ed9190611d90565b600c5f8282546112fd9190611d66565b9091555050601a54601c546112399083611d79565b6001600160a01b0387165f908152600b602052604090205460ff16801561133a575060165415155b156113e657601654611354906064906111f79088906117e2565b601654601954919250906113689083611d79565b6113729190611d90565b600d5f8282546113829190611d66565b90915550506016546017546113979083611d79565b6113a19190611d90565b600c5f8282546113b19190611d66565b90915550506016546018546113c69083611d79565b6113d09190611d90565b600e5f8282546113e09190611d66565b90915550505b80156113f7576113f7873083611528565b6114018186611daf565b9450505b611410868686611528565b505050505050565b5f818484111561143b5760405162461bcd60e51b81526004016107d89190611b99565b505f6114478486611daf565b95945050505050565b5f8061145c8385611d66565b9050838110156114ae5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107d8565b9392505050565b6103e8816114c260025490565b6114cc9190611d79565b6114d69190611d90565b60145550565b6103e8826114e960025490565b6114f39190611d79565b6114fd9190611d90565b6012556103e88161150d60025490565b6115179190611d79565b6115219190611d90565b6013555050565b61156481604051806060016040528060268152602001611eb1602691396001600160a01b0386165f908152600160205260409020549190611418565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546115929082611450565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dc29085815260200190565b305f9081526001602052604081205490505f600e54600c54600d5461160a9190611d66565b6116149190611d66565b9050815f03611621575050565b600f5461162f906023611d79565b82111561164757600f54611644906023611d79565b91505b5f600282600d54856116599190611d79565b6116639190611d90565b61166d9190611d90565b90505f61167a84836118a1565b905047611686826118e2565b5f61169147836118a1565b90505f6116ad866111f7600c54856117e290919063ffffffff16565b90505f6116c9876111f7600e54866117e290919063ffffffff16565b90505f6116d68284611d66565b6116e09085611daf565b9050602054846116f09190611d90565b9250602054836117009190611d79565b5f600d819055600c819055600e559150861580159061171e57505f81115b156117675761172d8782611a90565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601e546040516001600160a01b039091169084156108fc029085905f818181858888f1935050505015801561179e573d5f803e3d5ffd5b50601f546040516001600160a01b039091169083156108fc029084905f818181858888f193505050501580156117d6573d5f803e3d5ffd5b50505050505050505050565b5f825f036117f157505f61087f565b5f6117fc8385611d79565b9050826118098583611d90565b146114ae5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107d8565b5f6114ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b6d565b5f6114ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611418565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061191557611915611dc2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b59190611dd6565b816001815181106119c8576119c8611dc2565b60200260200101906001600160a01b031690816001600160a01b031681525050611a13307f000000000000000000000000000000000000000000000000000000000000000084610d70565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a679085905f90869030904290600401611df1565b5f604051808303815f87803b158015611a7e575f80fd5b505af1158015611410573d5f803e3d5ffd5b611abb307f000000000000000000000000000000000000000000000000000000000000000084610d70565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b41573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b669190611e60565b5050505050565b5f8183611b8d5760405162461bcd60e51b81526004016107d89190611b99565b505f6114478486611d90565b5f6020808352835180828501525f5b81811015611bc457858101830151858201604001528201611ba8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611bf8575f80fd5b50565b5f60208284031215611c0b575f80fd5b81356114ae81611be4565b5f8060408385031215611c27575f80fd5b8235611c3281611be4565b946020939093013593505050565b5f8060408385031215611c51575f80fd5b8235611c5c81611be4565b915060208301358015158114611c70575f80fd5b809150509250929050565b5f805f60608486031215611c8d575f80fd5b8335611c9881611be4565b92506020840135611ca881611be4565b929592945050506040919091013590565b5f8060408385031215611cca575f80fd5b8235611cd581611be4565b91506020830135611c7081611be4565b600181811c90821680611cf957607f821691505b602082108103611d1757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561087f5761087f611d52565b808202811582820484141761087f5761087f611d52565b5f82611daa57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561087f5761087f611d52565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611de6575f80fd5b81516114ae81611be4565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611e3f5784516001600160a01b031683529383019391830191600101611e1a565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611e72575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f6639c3bc036209bb649de9343c2c8ef7d6c93806a945e92d02b14be6751803164736f6c63430008150033

Deployed Bytecode

0x60806040526004361061020a575f3560e01c806370a0823111610113578063a9059cbb1161009d578063eb3252211161006d578063eb32522114610674578063ef8700e5146106a2578063f2fde38b146106b7578063f887ea40146106d6578063fcb9665e14610709575f80fd5b8063a9059cbb146105d5578063c0246668146105f4578063dd62ed3e14610613578063e16830a814610655575f80fd5b80637571336a116100e35780637571336a146105475780637cf4b90f146105665780638da5cb5b1461058557806395d89b41146105a2578063a457c2d7146105b6575f80fd5b806370a08231146104d6578063715018a61461050a57806372cbadb11461051e578063751039fc14610533575f80fd5b806323b872dd116101945780633ccfd60b116101645780633ccfd60b146103c957806342105183146103dd57806349bd5a5e1461044a5780634fbee19314610481578063635d24a8146104b8575f80fd5b806323b872dd1461035b578063313ce5671461037a57806335fe822d1461039557806339509351146103aa575f80fd5b80630cb23d86116101da5780630cb23d86146102b757806310d5de53146102e557806318160ddd146103135780631a8145bb146103315780631f3fed8f14610346575f80fd5b806306fdde031461022057806307980cb91461024a578063095ea7b3146102695780630b1c718214610298575f80fd5b3661021c5730330361021a575f80fd5b005b5f80fd5b34801561022b575f80fd5b5061023461071e565b6040516102419190611b99565b60405180910390f35b348015610255575f80fd5b5061021a610264366004611bfb565b6107ae565b348015610274575f80fd5b50610288610283366004611c16565b61086f565b6040519015158152602001610241565b3480156102a3575f80fd5b5061021a6102b2366004611c40565b610885565b3480156102c2575f80fd5b506102886102d1366004611bfb565b600b6020525f908152604090205460ff1681565b3480156102f0575f80fd5b506102886102ff366004611bfb565b60096020525f908152604090205460ff1681565b34801561031e575f80fd5b506002545b604051908152602001610241565b34801561033c575f80fd5b50610323600d5481565b348015610351575f80fd5b50610323600c5481565b348015610366575f80fd5b50610288610375366004611c7b565b61094b565b348015610385575f80fd5b5060405160128152602001610241565b3480156103a0575f80fd5b5061032360135481565b3480156103b5575f80fd5b506102886103c4366004611c16565b6109b0565b3480156103d4575f80fd5b506102886109e3565b3480156103e8575f80fd5b50601654601754601854601954601a54601b54601c54601d5461040f979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610241565b348015610455575f80fd5b50601554610469906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b34801561048c575f80fd5b5061028861049b366004611bfb565b6001600160a01b03165f9081526008602052604090205460ff1690565b3480156104c3575f80fd5b5060115461028890610100900460ff1681565b3480156104e1575f80fd5b506103236104f0366004611bfb565b6001600160a01b03165f9081526001602052604090205490565b348015610515575f80fd5b5061021a610a3f565b348015610529575f80fd5b5061032360145481565b34801561053e575f80fd5b5061021a610ae1565b348015610552575f80fd5b5061021a610561366004611c40565b610b24565b348015610571575f80fd5b506011546102889062010000900460ff1681565b348015610590575f80fd5b506005546001600160a01b0316610469565b3480156105ad575f80fd5b50610234610b78565b3480156105c1575f80fd5b506102886105d0366004611c16565b610b87565b3480156105e0575f80fd5b506102886105ef366004611c16565b610bd2565b3480156105ff575f80fd5b5061021a61060e366004611c40565b610bde565b34801561061e575f80fd5b5061032361062d366004611cb9565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b348015610660575f80fd5b5061021a61066f366004611c40565b610c32565b34801561067f575f80fd5b5061028861068e366004611bfb565b600a6020525f908152604090205460ff1681565b3480156106ad575f80fd5b50610323600e5481565b3480156106c2575f80fd5b5061021a6106d1366004611bfb565b610c86565b3480156106e1575f80fd5b506104697f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610714575f80fd5b5061032360125481565b60606003805461072d90611ce5565b80601f016020809104026020016040519081016040528092919081815260200182805461075990611ce5565b80156107a45780601f1061077b576101008083540402835291602001916107a4565b820191905f5260205f20905b81548152906001019060200180831161078757829003601f168201915b5050505050905090565b6005546001600160a01b031633146107e15760405162461bcd60e51b81526004016107d890611d1d565b60405180910390fd5b6011805461ffff191661010117905543601055601580546001600160a01b03199081166001600160a01b0393841690811783556006805490921681179091555f908152600b60209081526040808320805460ff19908116600190811790925585548716855260098452828520805482168317905594549095168352600a909152902080549091169091179055565b5f61087b338484610d70565b5060015b92915050565b6005546001600160a01b031633146108af5760405162461bcd60e51b81526004016107d890611d1d565b6015546001600160a01b03908116908316036109215760405162461bcd60e51b815260206004820152602b60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526a706169724164647265737360a81b60648201526084016107d8565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f610957848484610dcf565b6109a684336109a185604051806060016040528060288152602001611ed7602891396001600160a01b038a165f908152602081815260408083203384529091529020549190611418565b610d70565b5060019392505050565b335f818152602081815260408083206001600160a01b0387168452909152812054909161087b9185906109a19086611450565b601f546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a31576040519150601f19603f3d011682016040523d82523d5f602084013e610a36565b606091505b50909392505050565b6005546001600160a01b03163314610a695760405162461bcd60e51b81526004016107d890611d1d565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007546006546001600160a01b039081165f9081526020818152604080832060058054909516845290915290209190915580546001600160a01b0319169055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016107d890611d1d565b610b166103e86114b5565b610b226103e8806114dc565b565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b60606004805461072d90611ce5565b5f61087b33846109a185604051806060016040528060258152602001611e8c60259139335f908152602081815260408083206001600160a01b038d1684529091529020549190611418565b5f61087b338484610dcf565b6005546001600160a01b03163314610c085760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c5c5760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cb05760405162461bcd60e51b81526004016107d890611d1d565b6001600160a01b038116610d155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610de657610de183835f611528565b505050565b6005546001600160a01b03848116911614801590610e1257506005546001600160a01b03838116911614155b8015610e27575060115462010000900460ff16155b156110ae5760115460ff16610eb8576001600160a01b0383165f9081526008602052604090205460ff1680610e7357506001600160a01b0382165f9081526008602052604090205460ff165b610eb85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107d8565b6001600160a01b0383165f908152600b602052604090205460ff168015610ef757506001600160a01b0382165f9081526009602052604090205460ff16155b15610f7157601254811115610f6c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107d8565b611026565b6001600160a01b0382165f908152600b602052604090205460ff168015610fb057506001600160a01b0383165f9081526009602052604090205460ff16155b15611026576013548111156110265760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016107d8565b6001600160a01b0382165f908152600a602052604090205460ff166110ae576014546001600160a01b0383165f9081526001602052604090205461106a9083611d66565b11156110ae5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107d8565b305f90815260016020526040902054600f54811080159081906110d85750601154610100900460ff165b80156110ed575060115462010000900460ff16155b801561111057506001600160a01b0384165f908152600b602052604090205460ff165b801561113457506001600160a01b0385165f9081526008602052604090205460ff16155b801561115857506001600160a01b0384165f9081526008602052604090205460ff16155b15611183576011805462ff00001916620100001790556111766115e5565b6011805462ff0000191690555b6011546001600160a01b0386165f9081526008602052604090205460ff620100009092048216159116806111ce57506001600160a01b0385165f9081526008602052604090205460ff165b156111d657505f5b8015611405575f60105443101561125e576111fd60646111f78760636117e2565b90611860565b9050606361120c82605e611d79565b6112169190611d90565b600c5f8282546112269190611d66565b9091555060639050611239826005611d79565b6112439190611d90565b600e5f8282546112539190611d66565b909155506113e69050565b6001600160a01b0386165f908152600b602052604090205460ff1680156112865750601a5415155b1561131257601a546112a0906064906111f79088906117e2565b601a54601d54919250906112b49083611d79565b6112be9190611d90565b600d5f8282546112ce9190611d66565b9091555050601a54601b546112e39083611d79565b6112ed9190611d90565b600c5f8282546112fd9190611d66565b9091555050601a54601c546112399083611d79565b6001600160a01b0387165f908152600b602052604090205460ff16801561133a575060165415155b156113e657601654611354906064906111f79088906117e2565b601654601954919250906113689083611d79565b6113729190611d90565b600d5f8282546113829190611d66565b90915550506016546017546113979083611d79565b6113a19190611d90565b600c5f8282546113b19190611d66565b90915550506016546018546113c69083611d79565b6113d09190611d90565b600e5f8282546113e09190611d66565b90915550505b80156113f7576113f7873083611528565b6114018186611daf565b9450505b611410868686611528565b505050505050565b5f818484111561143b5760405162461bcd60e51b81526004016107d89190611b99565b505f6114478486611daf565b95945050505050565b5f8061145c8385611d66565b9050838110156114ae5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107d8565b9392505050565b6103e8816114c260025490565b6114cc9190611d79565b6114d69190611d90565b60145550565b6103e8826114e960025490565b6114f39190611d79565b6114fd9190611d90565b6012556103e88161150d60025490565b6115179190611d79565b6115219190611d90565b6013555050565b61156481604051806060016040528060268152602001611eb1602691396001600160a01b0386165f908152600160205260409020549190611418565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546115929082611450565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dc29085815260200190565b305f9081526001602052604081205490505f600e54600c54600d5461160a9190611d66565b6116149190611d66565b9050815f03611621575050565b600f5461162f906023611d79565b82111561164757600f54611644906023611d79565b91505b5f600282600d54856116599190611d79565b6116639190611d90565b61166d9190611d90565b90505f61167a84836118a1565b905047611686826118e2565b5f61169147836118a1565b90505f6116ad866111f7600c54856117e290919063ffffffff16565b90505f6116c9876111f7600e54866117e290919063ffffffff16565b90505f6116d68284611d66565b6116e09085611daf565b9050602054846116f09190611d90565b9250602054836117009190611d79565b5f600d819055600c819055600e559150861580159061171e57505f81115b156117675761172d8782611a90565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601e546040516001600160a01b039091169084156108fc029085905f818181858888f1935050505015801561179e573d5f803e3d5ffd5b50601f546040516001600160a01b039091169083156108fc029084905f818181858888f193505050501580156117d6573d5f803e3d5ffd5b50505050505050505050565b5f825f036117f157505f61087f565b5f6117fc8385611d79565b9050826118098583611d90565b146114ae5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107d8565b5f6114ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b6d565b5f6114ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611418565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061191557611915611dc2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b59190611dd6565b816001815181106119c8576119c8611dc2565b60200260200101906001600160a01b031690816001600160a01b031681525050611a13307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d70565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a679085905f90869030904290600401611df1565b5f604051808303815f87803b158015611a7e575f80fd5b505af1158015611410573d5f803e3d5ffd5b611abb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d70565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b41573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b669190611e60565b5050505050565b5f8183611b8d5760405162461bcd60e51b81526004016107d89190611b99565b505f6114478486611d90565b5f6020808352835180828501525f5b81811015611bc457858101830151858201604001528201611ba8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611bf8575f80fd5b50565b5f60208284031215611c0b575f80fd5b81356114ae81611be4565b5f8060408385031215611c27575f80fd5b8235611c3281611be4565b946020939093013593505050565b5f8060408385031215611c51575f80fd5b8235611c5c81611be4565b915060208301358015158114611c70575f80fd5b809150509250929050565b5f805f60608486031215611c8d575f80fd5b8335611c9881611be4565b92506020840135611ca881611be4565b929592945050506040919091013590565b5f8060408385031215611cca575f80fd5b8235611cd581611be4565b91506020830135611c7081611be4565b600181811c90821680611cf957607f821691505b602082108103611d1757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561087f5761087f611d52565b808202811582820484141761087f5761087f611d52565b5f82611daa57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561087f5761087f611d52565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611de6575f80fd5b81516114ae81611be4565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611e3f5784516001600160a01b031683529383019391830191600101611e1a565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611e72575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f6639c3bc036209bb649de9343c2c8ef7d6c93806a945e92d02b14be6751803164736f6c63430008150033

Deployed Bytecode Sourcemap

20810:12185:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24431:4;24409:10;:27;24401:36;;;;;;20810:12185;;;;;7557:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25469:431;;;;;;;;;;-1:-1:-1;25469:431:0;;;;;:::i;:::-;;:::i;10341:168::-;;;;;;;;;;-1:-1:-1;10341:168:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;10341:168:0;1275:187:1;25209:206:0;;;;;;;;;;-1:-1:-1;25209:206:0;;;;;:::i;:::-;;:::i;21115:54::-;;;;;;;;;;-1:-1:-1;21115:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20986:63;;;;;;;;;;-1:-1:-1;20986:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8674:107;;;;;;;;;;-1:-1:-1;8761:12:0;;8674:107;;;2034:25:1;;;2022:2;2007:18;8674:107:0;1888:177:1;21218:33:0;;;;;;;;;;;;;;;;21178;;;;;;;;;;;;;;;;13264:354;;;;;;;;;;-1:-1:-1;13264:354:0;;;;;:::i;:::-;;:::i;8517:92::-;;;;;;;;;;-1:-1:-1;8517:92:0;;8599:2;2673:36:1;;2661:2;2646:18;8517:92:0;2531:184:1;21840:29:0;;;;;;;;;;;;;;;;9977:217;;;;;;;;;;-1:-1:-1;9977:217:0;;;;;:::i;:::-;;:::i;28610:178::-;;;;;;;;;;;;;:::i;21951:286::-;;;;;;;;;;-1:-1:-1;21951:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3063:25:1;;;3119:2;3104:18;;3097:34;;;;3147:18;;;3140:34;;;;3205:2;3190:18;;3183:34;;;;3248:3;3233:19;;3226:35;3292:3;3277:19;;3270:35;3336:3;3321:19;;3314:35;3380:3;3365:19;;3358:35;3050:3;3035:19;21951:286:0;2720:679:1;21914:28:0;;;;;;;;;;-1:-1:-1;21914:28:0;;;;-1:-1:-1;;;;;21914:28:0;;;;;;-1:-1:-1;;;;;3568:32:1;;;3550:51;;3538:2;3523:18;21914:28:0;3404:203:1;32871:121:0;;;;;;;;;;-1:-1:-1;32871:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32960:24:0;32936:4;32960:24;;;:15;:24;;;;;;;;;32871:121;21423:33;;;;;;;;;;-1:-1:-1;21423:33:0;;;;;;;;;;;8844:126;;;;;;;;;;-1:-1:-1;8844:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;8944:18:0;8917:7;8944:18;;;:9;:18;;;;;;;8844:126;20612:191;;;;;;;;;;;;;:::i;21876:31::-;;;;;;;;;;;;;;;;28473:129;;;;;;;;;;;;;:::i;26684:144::-;;;;;;;;;;-1:-1:-1;26684:144:0;;;;;:::i;:::-;;:::i;21463:23::-;;;;;;;;;;-1:-1:-1;21463:23:0;;;;;;;;;;;19788:78;;;;;;;;;;-1:-1:-1;19852:6:0;;-1:-1:-1;;;;;19852:6:0;19788:78;;7775:103;;;;;;;;;;;;;:::i;11012:268::-;;;;;;;;;;-1:-1:-1;11012:268:0;;;;;:::i;:::-;;:::i;9183:174::-;;;;;;;;;;-1:-1:-1;9183:174:0;;;;;:::i;:::-;;:::i;26364:128::-;;;;;;;;;;-1:-1:-1;26364:128:0;;;;;:::i;:::-;;:::i;9420:150::-;;;;;;;;;;-1:-1:-1;9420:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;9535:18:0;;;9508:7;9535:18;;;;;;;;;;;:27;;;;;;;;;;;;;9420:150;26500:140;;;;;;;;;;-1:-1:-1;26500:140:0;;;;;:::i;:::-;;:::i;21056:52::-;;;;;;;;;;-1:-1:-1;21056:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21258:35;;;;;;;;;;;;;;;;20019:244;;;;;;;;;;-1:-1:-1;20019:244:0;;;;;:::i;:::-;;:::i;20882:42::-;;;;;;;;;;;;;;;21805:28;;;;;;;;;;;;;;;;7557:99;7610:13;7643:5;7636:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7557:99;:::o;25469:431::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;;;;;;;;;25540:13:::1;:20:::0;;-1:-1:-1;;25571:22:0;;;;;25623:12:::1;25604:16;:31:::0;25646:13:::1;:24:::0;;-1:-1:-1;;;;;;25646:24:0;;::::1;-1:-1:-1::0;;;;;25646:24:0;;::::1;::::0;;::::1;::::0;;25672:10:::1;:21:::0;;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;25704:46:0;;;-1:-1:-1;25704:46:0::1;::::0;;;;;;;:53;;-1:-1:-1;;25704:53:0;;::::1;-1:-1:-1::0;25704:53:0;;::::1;::::0;;;25808:13;;;::::1;25768:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25870:13;;;;::::1;25841:44:::0;;-1:-1:-1;25841:44:0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;25469:431::o;10341:168::-;10423:4;10440:39;6796:10;10463:7;10472:6;10440:8;:39::i;:::-;-1:-1:-1;10497:4:0;10341:168;;;;;:::o;25209:206::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;25299:13:::1;::::0;-1:-1:-1;;;;;25299:13:0;;::::1;25291:21:::0;;::::1;::::0;25283:77:::1;;;::::0;-1:-1:-1;;;25283:77:0;;5188:2:1;25283:77:0::1;::::0;::::1;5170:21:1::0;5227:2;5207:18;;;5200:30;5266:34;5246:18;;;5239:62;-1:-1:-1;;;5317:18:1;;;5310:41;5368:19;;25283:77:0::1;4986:407:1::0;25283:77:0::1;-1:-1:-1::0;;;;;25371:28:0;;;::::1;;::::0;;;:22:::1;:28;::::0;;;;:36;;-1:-1:-1;;25371:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25209:206::o;13264:354::-;13403:4;13420:36;13430:6;13438:9;13449:6;13420:9;:36::i;:::-;13467:121;13476:6;6796:10;13498:89;13536:6;13498:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13498:19:0;;:11;:19;;;;;;;;;;;6796:10;13498:33;;;;;;;;;;:37;:89::i;:::-;13467:8;:121::i;:::-;-1:-1:-1;13606:4:0;13264:354;;;;;:::o;9977:217::-;6796:10;10064:4;10113:25;;;;;;;;;;;-1:-1:-1;;;;;10113:34:0;;;;;;;;;;10064:4;;10081:83;;10104:7;;10113:50;;10152:10;10113:38;:50::i;28610:178::-;28744:10;;28736:44;;28648:12;;28691:21;;-1:-1:-1;;;;;28744:10:0;;;;28691:21;;28648:12;28736:44;28648:12;28736:44;28691:21;28744:10;28736:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28723:57:0;;28610:178;-1:-1:-1;;;28610:178:0:o;20612:191::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;20703:6:::1;::::0;20682:40:::1;::::0;20719:1:::1;::::0;-1:-1:-1;;;;;20703:6:0::1;::::0;20682:40:::1;::::0;20719:1;;20682:40:::1;20758:7;::::0;20736:10:::1;::::0;-1:-1:-1;;;;;20736:10:0;;::::1;20724:11;:23:::0;;;::::1;::::0;;;;;;;20748:6:::1;::::0;;;;::::1;20724:31:::0;;;;;;;:41;;;;20776:19;;-1:-1:-1;;;;;;20776:19:0::1;::::0;;20612:191::o;28473:129::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;28527:25:::1;28547:4;28527:19;:25::i;:::-;28563:31;28584:4;28589::::0;28563:20:::1;:31::i;:::-;28473:129::o:0;26684:144::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26774:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26774:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26684:144::o;7775:103::-;7830:13;7863:7;7856:14;;;;;:::i;11012:268::-;11104:4;11121:129;6796:10;11144:7;11153:96;11192:15;11153:96;;;;;;;;;;;;;;;;;6796:10;11153:11;:25;;;;;;;;;;;-1:-1:-1;;;;;11153:34:0;;;;;;;;;;;;:38;:96::i;9183:174::-;9268:4;9285:42;6796:10;9309:9;9320:6;9285:9;:42::i;26364:128::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26449:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;26449:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26364:128::o;26500:140::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26592:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26592:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26500:140::o;20019:244::-;19370:6;;-1:-1:-1;;;;;19370:6:0;6796:10;19370:22;19362:67;;;;-1:-1:-1;;;19362:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20108:22:0;::::1;20100:73;;;::::0;-1:-1:-1;;;20100:73:0;;5810:2:1;20100:73:0::1;::::0;::::1;5792:21:1::0;5849:2;5829:18;;;5822:30;5888:34;5868:18;;;5861:62;-1:-1:-1;;;5939:18:1;;;5932:36;5985:19;;20100:73:0::1;5608:402:1::0;20100:73:0::1;20210:6;::::0;20189:38:::1;::::0;-1:-1:-1;;;;;20189:38:0;;::::1;::::0;20210:6:::1;::::0;20189:38:::1;::::0;20210:6:::1;::::0;20189:38:::1;20238:6;:17:::0;;-1:-1:-1;;;;;;20238:17:0::1;-1:-1:-1::0;;;;;20238:17:0;;;::::1;::::0;;;::::1;::::0;;20019:244::o;12564:220::-;-1:-1:-1;;;;;12692:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;12744:32;;2034:25:1;;;12744:32:0;;2007:18:1;12744:32:0;;;;;;;;12564:220;;;:::o;29445:3418::-;29573:6;29583:1;29573:11;29569:93;;29601:28;29617:4;29623:2;29627:1;29601:15;:28::i;:::-;29445:3418;;;:::o;29569:93::-;19852:6;;-1:-1:-1;;;;;29690:15:0;;;19852:6;;29690:15;;;;:45;;-1:-1:-1;19852:6:0;;-1:-1:-1;;;;;29722:13:0;;;19852:6;;29722:13;;29690:45;:74;;;;-1:-1:-1;29753:11:0;;;;;;;29752:12;29690:74;29672:851;;;29796:15;;;;29791:136;;-1:-1:-1;;;;;29840:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;29865:19:0;;;;;;:15;:19;;;;;;;;29840:44;29832:79;;;;-1:-1:-1;;;29832:79:0;;6217:2:1;29832:79:0;;;6199:21:1;6256:2;6236:18;;;6229:30;-1:-1:-1;;;6275:18:1;;;6268:52;6337:18;;29832:79:0;6015:346:1;29832:79:0;-1:-1:-1;;;;;29945:28:0;;;;;;:22;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;29978:35:0;;;;;;:31;:35;;;;;;;;29977:36;29945:68;29941:417;;;30052:13;;30042:6;:23;;30034:89;;;;-1:-1:-1;;;30034:89:0;;6568:2:1;30034:89:0;;;6550:21:1;6607:2;6587:18;;;6580:30;6646:34;6626:18;;;6619:62;-1:-1:-1;;;6697:18:1;;;6690:51;6758:19;;30034:89:0;6366:417:1;30034:89:0;29941:417;;;-1:-1:-1;;;;;30162:26:0;;;;;;:22;:26;;;;;;;;:68;;;;-1:-1:-1;;;;;;30193:37:0;;;;;;:31;:37;;;;;;;;30192:38;30162:68;30158:200;;;30269:14;;30259:6;:24;;30251:91;;;;-1:-1:-1;;;30251:91:0;;6990:2:1;30251:91:0;;;6972:21:1;7029:2;7009:18;;;7002:30;7068:34;7048:18;;;7041:62;-1:-1:-1;;;7119:18:1;;;7112:52;7181:19;;30251:91:0;6788:418:1;30251:91:0;-1:-1:-1;;;;;30377:24:0;;;;;;:20;:24;;;;;;;;30372:140;;30456:16;;-1:-1:-1;;;;;8944:18:0;;8917:7;8944:18;;;:9;:18;;;;;;30430:22;;:6;:22;:::i;:::-;:42;;30422:74;;;;-1:-1:-1;;;30422:74:0;;7675:2:1;30422:74:0;;;7657:21:1;7714:2;7694:18;;;7687:30;-1:-1:-1;;;7733:18:1;;;7726:49;7792:18;;30422:74:0;7473:343:1;30422:74:0;30581:4;30536:24;8944:18;;;:9;:18;;;;;;30624:16;;30604:36;;;;;;;30669:37;;-1:-1:-1;30693:13:0;;;;;;;30669:37;:66;;;;-1:-1:-1;30724:11:0;;;;;;;30723:12;30669:66;:109;;;;-1:-1:-1;;;;;;30752:26:0;;;;;;:22;:26;;;;;;;;30669:109;:148;;;;-1:-1:-1;;;;;;30796:21:0;;;;;;:15;:21;;;;;;;;30795:22;30669:148;:185;;;;-1:-1:-1;;;;;;30835:19:0;;;;;;:15;:19;;;;;;;;30834:20;30669:185;30651:325;;;30881:11;:18;;-1:-1:-1;;30881:18:0;;;;;30914:16;:14;:16::i;:::-;30945:11;:19;;-1:-1:-1;;30945:19:0;;;30651:325;31006:11;;-1:-1:-1;;;;;31119:21:0;;30989:13;31119:21;;;:15;:21;;;;;;31006:11;;;;;;;31005:12;;31119:21;;:44;;-1:-1:-1;;;;;;31144:19:0;;;;;;:15;:19;;;;;;;;31119:44;31115:93;;;-1:-1:-1;31191:5:0;31115:93;31306:8;31302:1509;;;31331:18;31386:16;;31371:12;:31;31368:1278;;;31436:23;31455:3;31436:14;:6;31447:2;31436:10;:14::i;:::-;:18;;:23::i;:::-;31423:36;-1:-1:-1;31520:2:0;31501:15;31423:36;31514:2;31501:15;:::i;:::-;31500:22;;;;:::i;:::-;31478:18;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;31584:2:0;;-1:-1:-1;31566:14:0;:10;31579:1;31566:14;:::i;:::-;31565:21;;;;:::i;:::-;31541:20;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;31368:1278:0;;-1:-1:-1;31368:1278:0;;-1:-1:-1;;;;;31612:26:0;;;;;;:22;:26;;;;;;;;:60;;;;-1:-1:-1;31642:26:0;;:30;;31612:60;31608:1038;;;31717:26;;31706:47;;31749:3;;31706:38;;:6;;:10;:38::i;:47::-;31839:26;;31807:29;;31693:60;;-1:-1:-1;31839:26:0;31794:42;;31693:60;31794:42;:::i;:::-;:71;;;;:::i;:::-;31772:18;;:93;;;;;;;:::i;:::-;;;;-1:-1:-1;;31951:26:0;;31919:29;;31906:42;;:10;:42;:::i;:::-;:71;;;;:::i;:::-;31884:18;;:93;;;;;;;:::i;:::-;;;;-1:-1:-1;;32067:26:0;;32033:31;;32020:44;;:10;:44;:::i;31608:1038::-;-1:-1:-1;;;;;32155:28:0;;;;;;:22;:28;;;;;;;;:61;;;;-1:-1:-1;32187:12:0;:25;:29;;32155:61;32151:495;;;32261:12;:25;32250:46;;32292:3;;32250:37;;:6;;:10;:37::i;:46::-;32381:12;:25;32350:28;;32237:59;;-1:-1:-1;32381:25:0;32337:41;;32237:59;32337:41;:::i;:::-;:69;;;;:::i;:::-;32315:18;;:91;;;;;;;:::i;:::-;;;;-1:-1:-1;;32491:12:0;:25;32460:28;;32447:41;;:10;:41;:::i;:::-;:69;;;;:::i;:::-;32425:18;;:91;;;;;;;:::i;:::-;;;;-1:-1:-1;;32605:12:0;:25;32572:30;;32559:43;;:10;:43;:::i;:::-;:71;;;;:::i;:::-;32535:20;;:95;;;;;;;:::i;:::-;;;;-1:-1:-1;;32151:495:0;32666:14;;32662:103;;32701:48;32717:4;32731;32738:10;32701:15;:48::i;:::-;32779:20;32789:10;32779:20;;:::i;:::-;;;31316:1495;31302:1509;32822:33;32838:4;32844:2;32848:6;32822:15;:33::i;:::-;29558:3305;;;29445:3418;;;:::o;706:191::-;791:7;827:12;819:6;;;;811:29;;;;-1:-1:-1;;;811:29:0;;;;;;;;:::i;:::-;-1:-1:-1;851:9:0;863:5;867:1;863;:5;:::i;:::-;851:17;706:191;-1:-1:-1;;;;;706:191:0:o;379:180::-;436:7;;468:5;472:1;468;:5;:::i;:::-;456:17;;497:1;492;:6;;484:46;;;;-1:-1:-1;;;484:46:0;;8551:2:1;484:46:0;;;8533:21:1;8590:2;8570:18;;;8563:30;8629:29;8609:18;;;8602:57;8676:18;;484:46:0;8349:351:1;484:46:0;550:1;379:180;-1:-1:-1;;;379:180:0:o;28796:136::-;28920:4;28903:13;28887;8761:12;;;8674:107;28887:13;:29;;;;:::i;:::-;28886:38;;;;:::i;:::-;28867:16;:57;-1:-1:-1;28796:136:0:o;25970:209::-;26104:4;26091:9;26075:13;8761:12;;;8674:107;26075:13;:25;;;;:::i;:::-;26074:34;;;;:::i;:::-;26058:13;:50;26167:4;26153:10;26137:13;8761:12;;;8674:107;26137:13;:26;;;;:::i;:::-;26136:35;;;;:::i;:::-;26119:14;:52;-1:-1:-1;;25970:209:0:o;11770:358::-;11932:71;11954:6;11932:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11932:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;11912:17:0;;;;;;;:9;:17;;;;;;:91;;;;12037:20;;;;;;;:32;;12062:6;12037:24;:32::i;:::-;-1:-1:-1;;;;;12014:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12085:35;;;;;;;;;;12113:6;2034:25:1;;2022:2;2007:18;;1888:177;26836:1629:0;26929:4;26881:27;8944:18;;;:9;:18;;;;;;26881:54;;26956:14;27015:20;;26994:18;;26973;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;26956:79;;27052:19;27075:1;27052:24;27048:41;;27080:7;;26836:1629::o;27048:41::-;27127:16;;:21;;27146:2;27127:21;:::i;:::-;27105:19;:43;27101:119;;;27187:16;;:21;;27206:2;27187:21;:::i;:::-;27165:43;;27101:119;27281:23;27359:1;27350:6;27329:18;;27307:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;27281:79;-1:-1:-1;27371:26:0;27400:40;:19;27281:79;27400:23;:40::i;:::-;27371:69;-1:-1:-1;27479:21:0;27513:50;27371:69;27513:30;:50::i;:::-;27574:18;27595:44;:21;27621:17;27595:25;:44::i;:::-;27574:65;;27653:23;27679:46;27718:6;27679:34;27694:18;;27679:10;:14;;:34;;;;:::i;:46::-;27653:72;;27737:25;27765:48;27806:6;27765:36;27780:20;;27765:10;:14;;:36;;;;:::i;:48::-;27737:76;-1:-1:-1;27824:23:0;27864:35;27737:76;27864:15;:35;:::i;:::-;27850:50;;:10;:50;:::i;:::-;27824:76;;27933:11;;27920:10;:24;;;;:::i;:::-;27902:42;;27993:11;;27975:15;:29;;;;:::i;:::-;28036:1;28015:18;:22;;;28048:18;:22;;;28081:20;:24;27955:49;-1:-1:-1;28122:19:0;;;;;:42;;;28163:1;28145:15;:19;28122:42;28118:192;;;28181:46;28194:15;28211;28181:12;:46::i;:::-;28247:51;;;8879:25:1;;;8935:2;8920:18;;8913:34;;;28247:51:0;;8852:18:1;28247:51:0;;;;;;;28118:192;28346:16;;28330:60;;-1:-1:-1;;;;;28346:16:0;;;;28330:60;;;;;28374:15;;28346:16;28330:60;28346:16;28330:60;28374:15;28346:16;28330:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28417:10:0;;28401:56;;-1:-1:-1;;;;;28417:10:0;;;;28401:56;;;;;28439:17;;28417:10;28401:56;28417:10;28401:56;28439:17;28417:10;28401:56;;;;;;;;;;;;;;;;;;;;;26870:1595;;;;;;;;;26836:1629::o;903:256::-;960:7;990:1;995;990:6;986:47;;-1:-1:-1;1020:1:0;1013:8;;986:47;1046:9;1058:5;1062:1;1058;:5;:::i;:::-;1046:17;-1:-1:-1;1091:1:0;1082:5;1086:1;1046:17;1082:5;:::i;:::-;:10;1074:56;;;;-1:-1:-1;;;1074:56:0;;9160:2:1;1074:56:0;;;9142:21:1;9199:2;9179:18;;;9172:30;9238:34;9218:18;;;9211:62;-1:-1:-1;;;9289:18:1;;;9282:31;9330:19;;1074:56:0;8958:397:1;1165:131:0;1222:7;1249:39;1253:1;1256;1249:39;;;;;;;;;;;;;;;;;:3;:39::i;565:135::-;622:7;649:43;653:1;656;649:43;;;;;;;;;;;;;;;;;:3;:43::i;24635:562::-;24795:16;;;24809:1;24795:16;;;;;;;;24771:21;;24795:16;;;;;;;;;;-1:-1:-1;24795:16:0;24771:40;;24840:4;24822;24827:1;24822:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;24822:23:0;;;-1:-1:-1;;;;;24822:23:0;;;;;24866:6;-1:-1:-1;;;;;24866:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24856:4;24861:1;24856:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;24856:23:0;;;-1:-1:-1;;;;;24856:23:0;;;;;24892:49;24909:4;24924:6;24933:7;24892:8;:49::i;:::-;24978:211;;-1:-1:-1;;;24978:211:0;;-1:-1:-1;;;;;24978:6:0;:57;;;;:211;;25050:7;;25072:1;;25116:4;;25143;;25163:15;;24978:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28940:350;29084:49;29101:4;29116:6;29125:7;29084:8;:49::i;:::-;29176:106;;-1:-1:-1;;;29176:106:0;;29228:4;29176:106;;;11206:34:1;;;11256:18;;;11249:34;;;29244:1:0;11299:18:1;;;11292:34;;;11342:18;;;11335:34;11385:19;;;11378:44;29266:15:0;11438:19:1;;;11431:35;29176:6:0;-1:-1:-1;;;;;29176:22:0;;;;29207:9;;11140:19:1;;29176:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28940:350;;:::o;1302:277::-;1387:7;1422:12;1415:5;1407:28;;;;-1:-1:-1;;;1407:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1446:9:0;1458:5;1462:1;1458;: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:247::-;762:6;815:2;803:9;794:7;790:23;786:32;783:52;;;831:1;828;821:12;783:52;870:9;857:23;889:31;914:5;889:31;:::i;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1467:416::-;1532:6;1540;1593:2;1581:9;1572:7;1568:23;1564:32;1561:52;;;1609:1;1606;1599:12;1561:52;1648:9;1635:23;1667:31;1692:5;1667:31;:::i;:::-;1717:5;-1:-1:-1;1774:2:1;1759:18;;1746:32;1816:15;;1809:23;1797:36;;1787:64;;1847:1;1844;1837:12;1787:64;1870:7;1860:17;;;1467:416;;;;;:::o;2070:456::-;2147:6;2155;2163;2216:2;2204:9;2195:7;2191:23;2187:32;2184:52;;;2232:1;2229;2222:12;2184:52;2271:9;2258:23;2290:31;2315:5;2290:31;:::i;:::-;2340:5;-1:-1:-1;2397:2:1;2382:18;;2369:32;2410:33;2369:32;2410:33;:::i;:::-;2070:456;;2462:7;;-1:-1:-1;;;2516:2:1;2501:18;;;;2488:32;;2070:456::o;3612:388::-;3680:6;3688;3741:2;3729:9;3720:7;3716:23;3712:32;3709:52;;;3757:1;3754;3747:12;3709:52;3796:9;3783:23;3815:31;3840:5;3815:31;:::i;:::-;3865:5;-1:-1:-1;3922:2:1;3907:18;;3894:32;3935:33;3894:32;3935:33;:::i;4240:380::-;4319:1;4315:12;;;;4362;;;4383:61;;4437:4;4429:6;4425:17;4415:27;;4383:61;4490:2;4482:6;4479:14;4459:18;4456:38;4453:161;;4536:10;4531:3;4527:20;4524:1;4517:31;4571:4;4568:1;4561:15;4599:4;4596:1;4589:15;4453:161;;4240:380;;;:::o;4625:356::-;4827:2;4809:21;;;4846:18;;;4839:30;4905:34;4900:2;4885:18;;4878:62;4972:2;4957:18;;4625:356::o;7211:127::-;7272:10;7267:3;7263:20;7260:1;7253:31;7303:4;7300:1;7293:15;7327:4;7324:1;7317:15;7343:125;7408:9;;;7429:10;;;7426:36;;;7442:18;;:::i;7821:168::-;7894:9;;;7925;;7942:15;;;7936:22;;7922:37;7912:71;;7963:18;;:::i;7994:217::-;8034:1;8060;8050:132;;8104:10;8099:3;8095:20;8092:1;8085:31;8139:4;8136:1;8129:15;8167:4;8164:1;8157:15;8050:132;-1:-1:-1;8196:9:1;;7994:217::o;8216:128::-;8283:9;;;8304:11;;;8301:37;;;8318:18;;:::i;9492:127::-;9553:10;9548:3;9544:20;9541:1;9534:31;9584:4;9581:1;9574:15;9608:4;9605:1;9598:15;9624:251;9694:6;9747:2;9735:9;9726:7;9722:23;9718:32;9715:52;;;9763:1;9760;9753:12;9715:52;9795:9;9789:16;9814:31;9839:5;9814:31;:::i;9880:980::-;10142:4;10190:3;10179:9;10175:19;10221:6;10210:9;10203:25;10247:2;10285:6;10280:2;10269:9;10265:18;10258:34;10328:3;10323:2;10312:9;10308:18;10301:31;10352:6;10387;10381:13;10418:6;10410;10403:22;10456:3;10445:9;10441:19;10434:26;;10495:2;10487:6;10483:15;10469:29;;10516:1;10526:195;10540:6;10537:1;10534:13;10526:195;;;10605:13;;-1:-1:-1;;;;;10601:39:1;10589:52;;10696:15;;;;10661:12;;;;10637:1;10555:9;10526:195;;;-1:-1:-1;;;;;;;10777:32:1;;;;10772:2;10757:18;;10750:60;-1:-1:-1;;;10841:3:1;10826:19;10819:35;10738:3;9880:980;-1:-1:-1;;;9880:980:1:o;11477:306::-;11565:6;11573;11581;11634:2;11622:9;11613:7;11609:23;11605:32;11602:52;;;11650:1;11647;11640:12;11602:52;11679:9;11673:16;11663:26;;11729:2;11718:9;11714:18;11708:25;11698:35;;11773:2;11762:9;11758:18;11752:25;11742:35;;11477:306;;;;;:::o

Swarm Source

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