ETH Price: $2,973.98 (+2.53%)
Gas: 1 Gwei

Token

TRIBOT (TRIBOT)
 

Overview

Max Total Supply

53,902,405.253698876427533435 TRIBOT

Holders

181

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Tribot

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
__/\\\\\\\\\\\\\\\____/\\\\\\\\\______/\\\\\\\\\\\__/\\\\\\\\\\\\\_________/\\\\\_______/\\\\\\\\\\\\\\\_        
 _\///////\\\/////___/\\\///////\\\___\/////\\\///__\/\\\/////////\\\_____/\\\///\\\____\///////\\\/////__       
  _______\/\\\_______\/\\\_____\/\\\_______\/\\\_____\/\\\_______\/\\\___/\\\/__\///\\\________\/\\\_______      
   _______\/\\\_______\/\\\\\\\\\\\/________\/\\\_____\/\\\\\\\\\\\\\\___/\\\______\//\\\_______\/\\\_______     
    _______\/\\\_______\/\\\//////\\\________\/\\\_____\/\\\/////////\\\_\/\\\_______\/\\\_______\/\\\_______    
     _______\/\\\_______\/\\\____\//\\\_______\/\\\_____\/\\\_______\/\\\_\//\\\______/\\\________\/\\\_______   
      _______\/\\\_______\/\\\_____\//\\\______\/\\\_____\/\\\_______\/\\\__\///\\\__/\\\__________\/\\\_______  
       _______\/\\\_______\/\\\______\//\\\__/\\\\\\\\\\\_\/\\\\\\\\\\\\\/_____\///\\\\\/___________\/\\\_______ 
        _______\///________\///________\///__\///////////__\/////////////_________\/////_____________\///________
*/// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: conrcat.sol


pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;


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

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

//Tribot:  Main Token Contract
contract Tribot is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public deadAddress = address(0xdead);

    address public botWallet;
    address public rewardWallet;
    address public liquidityWallet;

    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp; 
    uint256 public buyTotalFees = 5;
    uint256 public buyBotFee = 1;
    uint256 public buyBurnFee = 1;
    uint256 public buyLiquidityFee = 1;
    uint256 public buyRewardFee = 2;

    uint256 public sellTotalFees = 5;
    uint256 public sellBotFee = 1;
    uint256 public sellBurnFee = 1;
    uint256 public sellLiquidityFee = 1;
    uint256 public sellRewardFee = 2;

    uint256 botPercent = 20;
    uint256 burnPercent= 20;
    uint256 liquidityPercent = 20;
    uint256 rewardPercent=40;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedFromMaxWallet;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event botWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event RewardWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event BurnWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event LiquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("TRIBOT", "TRIBOT") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludedFromMaxWallet(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludedFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * 1e18; // 100 Million

        maxWallet = (totalSupply * (2)) / 100; // 2% from total supply maxWallet

        botWallet = address(0x2b077E82508915F46b0Bc33E3EbaB02DeF1B4798);
        rewardWallet = address(0x956a7eFD059e3CeD14117E53802d96Bb919a0563);
        liquidityWallet = address(0xc14D74Bd8Cf130AF332870cDDc936609d938fcf0);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0xF78B1f0Fd13d723897cb5732E1797Ed0B48aF152), true);


        excludedFromMaxWallet(owner(), true);
        excludedFromMaxWallet(address(this), true);
        excludedFromMaxWallet(address(0xdead), true);
        excludedFromMaxWallet(address(0xF78B1f0Fd13d723897cb5732E1797Ed0B48aF152), true);
        

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

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 18);
    }

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

    function updateBuyFees(
        uint256 _BotFee,
        uint256 _rewardFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyBotFee = _BotFee;
        buyRewardFee = _rewardFee;
        buyBurnFee = _burnFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyBotFee + buyRewardFee + buyBurnFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _BotFee,
        uint256 _rewardFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellBotFee = _BotFee;
        sellRewardFee = _rewardFee;
        sellBurnFee = _burnFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            sellBotFee +
            sellRewardFee +
            sellBurnFee +
            sellLiquidityFee;
    }

    function UpdatePercentages(
        uint256 _Bot,
        uint256 _reward,
        uint256 _burn,
        uint256 _liquidity
    ) external onlyOwner {
        botPercent = _Bot;
        rewardPercent = _reward;
        burnPercent = _burn;
        liquidityPercent = _liquidity;
    }

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

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateLiquidityWallet(address newWallet) external onlyOwner {
        emit LiquidityWalletUpdated(newWallet, liquidityWallet);
        liquidityWallet = newWallet;
    }

    function UpdateBurnWallet(address newWallet) external onlyOwner {
        emit BurnWalletUpdated(newWallet, deadAddress);
        deadAddress = newWallet;
    }

    function updatebotWallet(address newbotWallet) external onlyOwner {
        emit botWalletUpdated(newbotWallet, botWallet);
        botWallet = newbotWallet;
    }

    function UpdateRewardWallet(address newWallet) external onlyOwner {
        emit RewardWalletUpdated(newWallet, rewardWallet);
        rewardWallet = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead)
            ) {
                if (!tradingActive) {
                    require(
                        !automatedMarketMakerPairs[from] &&
                            !automatedMarketMakerPairs[to],
                        "Trading is not active."
                    );
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedFromMaxWallet[to]
                ) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
            }

            if (fees > 0) {
                super._transfer(from, botWallet, (fees * botPercent) / 100);
                super._transfer(
                    from,
                    rewardWallet,
                    (fees * rewardPercent) / 100
                );
                super._transfer(
                    from,
                    liquidityWallet,
                    (fees * liquidityPercent) / 100
                );
                _burn(from, (fees * burnPercent) / 100);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }

    function burnTokens(uint256 _amount) external onlyOwner {
        _burn(msg.sender, _amount);
    }
    function Distribution(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i]*(1e16);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }
    
}

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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"BurnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"RewardWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"botWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Distribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Bot","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"UpdatePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludedFromMaxWallet","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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BotFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BotFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newbotWallet","type":"address"}],"name":"updatebotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b03191661dead179055600b805461ffff191660019081179091556005600e819055600f82905560108290556011829055600260128190556013919091556014828155601583905560169290925560175560188190556019819055601a556028601b553480156200007e57600080fd5b506040805180820182526006808252651514925093d560d21b6020808401829052845180860190955291845290830152906003620000bd838262000737565b506004620000cc828262000737565b505050620000e9620000e3620003ff60201b60201c565b62000403565b737a250d5630b4cf539739df2c5dacb4c659f2488d6200010b81600162000455565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017c919062000803565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f0919062000803565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000264919062000803565b6001600160a01b031660a08190526200027f90600162000455565b60a0516200028f9060016200048a565b6a52b7d2dcc80cd2e40000006064620002aa8260026200084b565b620002b691906200086b565b600a55600780546001600160a01b0319908116732b077e82508915f46b0bc33e3ebab02def1b47981790915560088054821673956a7efd059e3ced14117e53802d96bb919a05631790556009805490911673c14d74bd8cf130af332870cddc936609d938fcf01790556200033e620003366005546001600160a01b031690565b6001620004de565b6200034b306001620004de565b6200035a61dead6001620004de565b6200037b73f78b1f0fd13d723897cb5732e1797ed0b48af1526001620004de565b6200039a620003926005546001600160a01b031690565b600162000455565b620003a730600162000455565b620003b661dead600162000455565b620003d773f78b1f0fd13d723897cb5732e1797ed0b48af152600162000455565b620003f773f78b1f0fd13d723897cb5732e1797ed0b48af1528262000547565b5050620008a4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200045f62000630565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620004e862000630565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620005b791906200088e565b90915550506001600160a01b03821660009081526020819052604081208054839290620005e69084906200088e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200068c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200059a565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006be57607f821691505b602082108103620006df57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200068e57600081815260208120601f850160051c810160208610156200070e5750805b601f850160051c820191505b818110156200072f578281556001016200071a565b505050505050565b81516001600160401b0381111562000753576200075362000693565b6200076b81620007648454620006a9565b84620006e5565b602080601f831160018114620007a357600084156200078a5750858301515b600019600386901b1c1916600185901b1785556200072f565b600085815260208120601f198616915b82811015620007d457888601518255948401946001909101908401620007b3565b5085821015620007f35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200081657600080fd5b81516001600160a01b03811681146200082e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000865576200086562000835565b92915050565b6000826200088957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000865576200086562000835565b60805160a051612095620008d1600039600081816105250152610f1e0152600061040801526120956000f3fe6080604052600436106103545760003560e01c80639a7a23d6116101c6578063dd62ed3e116100f7578063f0a4ad1611610095578063f2fde38b1161006f578063f2fde38b146109ee578063f637434214610a0e578063f8b45b0514610a24578063fb75b2c714610a3a57600080fd5b8063f0a4ad16146109a2578063f11a24d3146109b8578063f14210a6146109ce57600080fd5b8063e10dffc0116100d1578063e10dffc01461092c578063e37ba8f91461094c578063e71dc3f51461096c578063e7ad9fcd1461098257600080fd5b8063dd62ed3e146108ba578063de0aad5314610900578063e06b17a21461091657600080fd5b8063bf56b37111610164578063c6d2577d1161013e578063c6d2577d1461083e578063d1d7d7ef14610854578063d469801614610884578063d85ba063146108a457600080fd5b8063bf56b371146107e8578063c0246668146107fe578063c18bc1951461081e57600080fd5b8063a9059cbb116101a0578063a9059cbb14610763578063adb873bd14610783578063b62496f514610799578063bbc0c742146107c957600080fd5b80639a7a23d6146107035780639e281a9814610723578063a457c2d71461074357600080fd5b80634a62bb65116102a0578063751039fc1161023e5780638da5cb5b116102185780638da5cb5b14610690578063910d0a6d146106ae578063941e2db2146106ce57806395d89b41146106ee57600080fd5b8063751039fc1461063b5780637a4b006a146106505780637c4936961461067057600080fd5b80636a486a8e1161027a5780636a486a8e146105ba5780636d1b229d146105d057806370a08231146105f0578063715018a61461062657600080fd5b80634a62bb65146105475780634fbee193146105615780636958bf241461059a57600080fd5b806323b872dd1161030d5780632e6ed7ef116102e75780632e6ed7ef146104b7578063313ce567146104d757806339509351146104f357806349bd5a5e1461051357600080fd5b806323b872dd1461045757806327c8f835146104775780632d03f9001461049757600080fd5b806301339c211461036057806306fdde0314610377578063095ea7b3146103a25780630cfe2f3f146103d25780631694505e146103f657806318160ddd1461044257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610a5a565b005b34801561038357600080fd5b5061038c610ac7565b6040516103999190611c70565b60405180910390f35b3480156103ae57600080fd5b506103c26103bd366004611cd3565b610b59565b6040519015158152602001610399565b3480156103de57600080fd5b506103e860125481565b604051908152602001610399565b34801561040257600080fd5b5061042a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610399565b34801561044e57600080fd5b506002546103e8565b34801561046357600080fd5b506103c2610472366004611cff565b610b70565b34801561048357600080fd5b5060065461042a906001600160a01b031681565b3480156104a357600080fd5b5060075461042a906001600160a01b031681565b3480156104c357600080fd5b506103756104d2366004611d40565b610c1a565b3480156104e357600080fd5b5060405160128152602001610399565b3480156104ff57600080fd5b506103c261050e366004611cd3565b610c5f565b34801561051f57600080fd5b5061042a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055357600080fd5b50600b546103c29060ff1681565b34801561056d57600080fd5b506103c261057c366004611d72565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156105a657600080fd5b506103756105b5366004611d72565b610c9b565b3480156105c657600080fd5b506103e860135481565b3480156105dc57600080fd5b506103756105eb366004611d96565b610d00565b3480156105fc57600080fd5b506103e861060b366004611d72565b6001600160a01b031660009081526020819052604090205490565b34801561063257600080fd5b50610375610d15565b34801561064757600080fd5b506103c2610d29565b34801561065c57600080fd5b5061037561066b366004611d72565b610d43565b34801561067c57600080fd5b5061037561068b366004611d72565b610da8565b34801561069c57600080fd5b506005546001600160a01b031661042a565b3480156106ba57600080fd5b506103756106c9366004611d40565b610e0d565b3480156106da57600080fd5b506103756106e9366004611dfb565b610e29565b3480156106fa57600080fd5b5061038c610f05565b34801561070f57600080fd5b5061037561071e366004611e75565b610f14565b34801561072f57600080fd5b5061037561073e366004611cd3565b610fd1565b34801561074f57600080fd5b506103c261075e366004611cd3565b6110f8565b34801561076f57600080fd5b506103c261077e366004611cd3565b611191565b34801561078f57600080fd5b506103e860155481565b3480156107a557600080fd5b506103c26107b4366004611d72565b601e6020526000908152604090205460ff1681565b3480156107d557600080fd5b50600b546103c290610100900460ff1681565b3480156107f457600080fd5b506103e8600c5481565b34801561080a57600080fd5b50610375610819366004611e75565b61119e565b34801561082a57600080fd5b50610375610839366004611d96565b611205565b34801561084a57600080fd5b506103e8600d5481565b34801561086057600080fd5b506103c261086f366004611d72565b601d6020526000908152604090205460ff1681565b34801561089057600080fd5b5060095461042a906001600160a01b031681565b3480156108b057600080fd5b506103e8600e5481565b3480156108c657600080fd5b506103e86108d5366004611eae565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090c57600080fd5b506103e860175481565b34801561092257600080fd5b506103e860145481565b34801561093857600080fd5b50610375610947366004611e75565b611225565b34801561095857600080fd5b50610375610967366004611d72565b611258565b34801561097857600080fd5b506103e860105481565b34801561098e57600080fd5b5061037561099d366004611d40565b6112bd565b3480156109ae57600080fd5b506103e8600f5481565b3480156109c457600080fd5b506103e860115481565b3480156109da57600080fd5b506103756109e9366004611d96565b611302565b3480156109fa57600080fd5b50610375610a09366004611d72565b611378565b348015610a1a57600080fd5b506103e860165481565b348015610a3057600080fd5b506103e8600a5481565b348015610a4657600080fd5b5060085461042a906001600160a01b031681565b610a626113ee565b600c5415610aae5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064015b60405180910390fd5b43600c5542600d55600b805461ff001916610100179055565b606060038054610ad690611edc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0290611edc565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b5050505050905090565b6000610b66338484611448565b5060015b92915050565b6000610b7d84848461156c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610aa5565b610c0f8533858403611448565b506001949350505050565b610c226113ee565b600f8490556012839055601082905560118190558082610c428587611f2c565b610c4c9190611f2c565b610c569190611f2c565b600e5550505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b66918590610c96908690611f2c565b611448565b610ca36113ee565b6006546040516001600160a01b03918216918316907fe678f864bcd4f50e0554d3b42d5a0007424f154c8b29d4845c7c727f319cfd9290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b610d086113ee565b610d123382611927565b50565b610d1d6113ee565b610d276000611a75565b565b6000610d336113ee565b50600b805460ff19169055600190565b610d4b6113ee565b6008546040516001600160a01b03918216918316907f53a789b033e632f89772129774e70aa81a1a130a54c0297cdbb4585dfcfd9a7f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610db06113ee565b6007546040516001600160a01b03918216918316907fe79ff165e4a66a54cd373907e5f9578f5ca5f0e65b5aa6660a5edd8296f4cc2290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610e156113ee565b601893909355601b91909155601955601a55565b610e316113ee565b828114610e805760405162461bcd60e51b815260206004820152601960248201527f41727261792073697a6573206d75737420626520657175616c000000000000006044820152606401610aa5565b60005b83811015610efe576000838383818110610e9f57610e9f611f3f565b90506020020135662386f26fc10000610eb89190611f55565b9050610eeb33878785818110610ed057610ed0611f3f565b9050602002016020810190610ee59190611d72565b8361156c565b610ef6600183611f2c565b915050610e83565b5050505050565b606060048054610ad690611edc565b610f1c6113ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610fc35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa5565b610fcd8282611ac7565b5050565b610fd96113ee565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110439190611f6c565b10156110825760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610aa5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f39190611f85565b505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561117a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aa5565b6111873385858403611448565b5060019392505050565b6000610b6633848461156c565b6111a66113ee565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61120d6113ee565b61121f81670de0b6b3a7640000611f55565b600a5550565b61122d6113ee565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6112606113ee565b6009546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6112c56113ee565b601484905560178390556015829055601681905580826112e58587611f2c565b6112ef9190611f2c565b6112f99190611f2c565b60135550505050565b61130a6113ee565b8047101561134b5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610aa5565b604051339082156108fc029083906000818181858888f19350505050158015610fcd573d6000803e3d6000fd5b6113806113ee565b6001600160a01b0381166113e55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b610d1281611a75565b6005546001600160a01b03163314610d275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aa5565b6001600160a01b0383166114aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b6001600160a01b03821661150b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115925760405162461bcd60e51b8152600401610aa590611fa2565b6001600160a01b0382166115b85760405162461bcd60e51b8152600401610aa590611fe7565b806000036115cc576110f383836000611b1b565b600b5460ff1615611779576005546001600160a01b0384811691161480159061160357506005546001600160a01b03838116911614155b801561161757506001600160a01b03821615155b801561162e57506001600160a01b03821661dead14155b1561177957600b54610100900460ff166116c9576001600160a01b0383166000908152601e602052604090205460ff1615801561168457506001600160a01b0382166000908152601e602052604090205460ff16155b6116c95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610aa5565b6001600160a01b0383166000908152601e602052604090205460ff16801561170a57506001600160a01b0382166000908152601d602052604090205460ff16155b1561177957600a546001600160a01b0383166000908152602081905260409020546117359083611f2c565b11156117795760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610aa5565b6001600160a01b0383166000908152601c602052604090205460019060ff16806117bb57506001600160a01b0383166000908152601c602052604090205460ff165b156117c4575060005b6000811561191c576001600160a01b0384166000908152601e602052604090205460ff1680156117f657506000601354115b1561181c5760646013548461180b9190611f55565b611815919061202a565b9050611868565b6001600160a01b0385166000908152601e602052604090205460ff16801561184657506000600e54115b15611868576064600e548461185b9190611f55565b611865919061202a565b90505b801561190f576007546018546118a29187916001600160a01b03909116906064906118939086611f55565b61189d919061202a565b611b1b565b600854601b546118c79187916001600160a01b03909116906064906118939086611f55565b600954601a546118ec9187916001600160a01b03909116906064906118939086611f55565b61190f856064601954846119009190611f55565b61190a919061202a565b611927565b611919818461204c565b92505b610efe858585611b1b565b6001600160a01b0382166119875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610aa5565b6001600160a01b038216600090815260208190526040902054818110156119fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610aa5565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611a2a90849061204c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611b415760405162461bcd60e51b8152600401610aa590611fa2565b6001600160a01b038216611b675760405162461bcd60e51b8152600401610aa590611fe7565b6001600160a01b03831660009081526020819052604090205481811015611bdf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aa5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c16908490611f2c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c6291815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015611c9d57858101830151858201604001528201611c81565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1257600080fd5b60008060408385031215611ce657600080fd5b8235611cf181611cbe565b946020939093013593505050565b600080600060608486031215611d1457600080fd5b8335611d1f81611cbe565b92506020840135611d2f81611cbe565b929592945050506040919091013590565b60008060008060808587031215611d5657600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d8457600080fd5b8135611d8f81611cbe565b9392505050565b600060208284031215611da857600080fd5b5035919050565b60008083601f840112611dc157600080fd5b50813567ffffffffffffffff811115611dd957600080fd5b6020830191508360208260051b8501011115611df457600080fd5b9250929050565b60008060008060408587031215611e1157600080fd5b843567ffffffffffffffff80821115611e2957600080fd5b611e3588838901611daf565b90965094506020870135915080821115611e4e57600080fd5b50611e5b87828801611daf565b95989497509550505050565b8015158114610d1257600080fd5b60008060408385031215611e8857600080fd5b8235611e9381611cbe565b91506020830135611ea381611e67565b809150509250929050565b60008060408385031215611ec157600080fd5b8235611ecc81611cbe565b91506020830135611ea381611cbe565b600181811c90821680611ef057607f821691505b602082108103611f1057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b6a57610b6a611f16565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b6a57610b6a611f16565b600060208284031215611f7e57600080fd5b5051919050565b600060208284031215611f9757600080fd5b8151611d8f81611e67565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261204757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b6a57610b6a611f1656fea2646970667358221220fd63223f2de632a0adc5348e63b136d8e43e2266b2866909ef8a65306f8c3fd264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80639a7a23d6116101c6578063dd62ed3e116100f7578063f0a4ad1611610095578063f2fde38b1161006f578063f2fde38b146109ee578063f637434214610a0e578063f8b45b0514610a24578063fb75b2c714610a3a57600080fd5b8063f0a4ad16146109a2578063f11a24d3146109b8578063f14210a6146109ce57600080fd5b8063e10dffc0116100d1578063e10dffc01461092c578063e37ba8f91461094c578063e71dc3f51461096c578063e7ad9fcd1461098257600080fd5b8063dd62ed3e146108ba578063de0aad5314610900578063e06b17a21461091657600080fd5b8063bf56b37111610164578063c6d2577d1161013e578063c6d2577d1461083e578063d1d7d7ef14610854578063d469801614610884578063d85ba063146108a457600080fd5b8063bf56b371146107e8578063c0246668146107fe578063c18bc1951461081e57600080fd5b8063a9059cbb116101a0578063a9059cbb14610763578063adb873bd14610783578063b62496f514610799578063bbc0c742146107c957600080fd5b80639a7a23d6146107035780639e281a9814610723578063a457c2d71461074357600080fd5b80634a62bb65116102a0578063751039fc1161023e5780638da5cb5b116102185780638da5cb5b14610690578063910d0a6d146106ae578063941e2db2146106ce57806395d89b41146106ee57600080fd5b8063751039fc1461063b5780637a4b006a146106505780637c4936961461067057600080fd5b80636a486a8e1161027a5780636a486a8e146105ba5780636d1b229d146105d057806370a08231146105f0578063715018a61461062657600080fd5b80634a62bb65146105475780634fbee193146105615780636958bf241461059a57600080fd5b806323b872dd1161030d5780632e6ed7ef116102e75780632e6ed7ef146104b7578063313ce567146104d757806339509351146104f357806349bd5a5e1461051357600080fd5b806323b872dd1461045757806327c8f835146104775780632d03f9001461049757600080fd5b806301339c211461036057806306fdde0314610377578063095ea7b3146103a25780630cfe2f3f146103d25780631694505e146103f657806318160ddd1461044257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610a5a565b005b34801561038357600080fd5b5061038c610ac7565b6040516103999190611c70565b60405180910390f35b3480156103ae57600080fd5b506103c26103bd366004611cd3565b610b59565b6040519015158152602001610399565b3480156103de57600080fd5b506103e860125481565b604051908152602001610399565b34801561040257600080fd5b5061042a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610399565b34801561044e57600080fd5b506002546103e8565b34801561046357600080fd5b506103c2610472366004611cff565b610b70565b34801561048357600080fd5b5060065461042a906001600160a01b031681565b3480156104a357600080fd5b5060075461042a906001600160a01b031681565b3480156104c357600080fd5b506103756104d2366004611d40565b610c1a565b3480156104e357600080fd5b5060405160128152602001610399565b3480156104ff57600080fd5b506103c261050e366004611cd3565b610c5f565b34801561051f57600080fd5b5061042a7f00000000000000000000000083b3a3fde997b9cba246486a3aaf9240c4b893ed81565b34801561055357600080fd5b50600b546103c29060ff1681565b34801561056d57600080fd5b506103c261057c366004611d72565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156105a657600080fd5b506103756105b5366004611d72565b610c9b565b3480156105c657600080fd5b506103e860135481565b3480156105dc57600080fd5b506103756105eb366004611d96565b610d00565b3480156105fc57600080fd5b506103e861060b366004611d72565b6001600160a01b031660009081526020819052604090205490565b34801561063257600080fd5b50610375610d15565b34801561064757600080fd5b506103c2610d29565b34801561065c57600080fd5b5061037561066b366004611d72565b610d43565b34801561067c57600080fd5b5061037561068b366004611d72565b610da8565b34801561069c57600080fd5b506005546001600160a01b031661042a565b3480156106ba57600080fd5b506103756106c9366004611d40565b610e0d565b3480156106da57600080fd5b506103756106e9366004611dfb565b610e29565b3480156106fa57600080fd5b5061038c610f05565b34801561070f57600080fd5b5061037561071e366004611e75565b610f14565b34801561072f57600080fd5b5061037561073e366004611cd3565b610fd1565b34801561074f57600080fd5b506103c261075e366004611cd3565b6110f8565b34801561076f57600080fd5b506103c261077e366004611cd3565b611191565b34801561078f57600080fd5b506103e860155481565b3480156107a557600080fd5b506103c26107b4366004611d72565b601e6020526000908152604090205460ff1681565b3480156107d557600080fd5b50600b546103c290610100900460ff1681565b3480156107f457600080fd5b506103e8600c5481565b34801561080a57600080fd5b50610375610819366004611e75565b61119e565b34801561082a57600080fd5b50610375610839366004611d96565b611205565b34801561084a57600080fd5b506103e8600d5481565b34801561086057600080fd5b506103c261086f366004611d72565b601d6020526000908152604090205460ff1681565b34801561089057600080fd5b5060095461042a906001600160a01b031681565b3480156108b057600080fd5b506103e8600e5481565b3480156108c657600080fd5b506103e86108d5366004611eae565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090c57600080fd5b506103e860175481565b34801561092257600080fd5b506103e860145481565b34801561093857600080fd5b50610375610947366004611e75565b611225565b34801561095857600080fd5b50610375610967366004611d72565b611258565b34801561097857600080fd5b506103e860105481565b34801561098e57600080fd5b5061037561099d366004611d40565b6112bd565b3480156109ae57600080fd5b506103e8600f5481565b3480156109c457600080fd5b506103e860115481565b3480156109da57600080fd5b506103756109e9366004611d96565b611302565b3480156109fa57600080fd5b50610375610a09366004611d72565b611378565b348015610a1a57600080fd5b506103e860165481565b348015610a3057600080fd5b506103e8600a5481565b348015610a4657600080fd5b5060085461042a906001600160a01b031681565b610a626113ee565b600c5415610aae5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064015b60405180910390fd5b43600c5542600d55600b805461ff001916610100179055565b606060038054610ad690611edc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0290611edc565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b5050505050905090565b6000610b66338484611448565b5060015b92915050565b6000610b7d84848461156c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610aa5565b610c0f8533858403611448565b506001949350505050565b610c226113ee565b600f8490556012839055601082905560118190558082610c428587611f2c565b610c4c9190611f2c565b610c569190611f2c565b600e5550505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b66918590610c96908690611f2c565b611448565b610ca36113ee565b6006546040516001600160a01b03918216918316907fe678f864bcd4f50e0554d3b42d5a0007424f154c8b29d4845c7c727f319cfd9290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b610d086113ee565b610d123382611927565b50565b610d1d6113ee565b610d276000611a75565b565b6000610d336113ee565b50600b805460ff19169055600190565b610d4b6113ee565b6008546040516001600160a01b03918216918316907f53a789b033e632f89772129774e70aa81a1a130a54c0297cdbb4585dfcfd9a7f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610db06113ee565b6007546040516001600160a01b03918216918316907fe79ff165e4a66a54cd373907e5f9578f5ca5f0e65b5aa6660a5edd8296f4cc2290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610e156113ee565b601893909355601b91909155601955601a55565b610e316113ee565b828114610e805760405162461bcd60e51b815260206004820152601960248201527f41727261792073697a6573206d75737420626520657175616c000000000000006044820152606401610aa5565b60005b83811015610efe576000838383818110610e9f57610e9f611f3f565b90506020020135662386f26fc10000610eb89190611f55565b9050610eeb33878785818110610ed057610ed0611f3f565b9050602002016020810190610ee59190611d72565b8361156c565b610ef6600183611f2c565b915050610e83565b5050505050565b606060048054610ad690611edc565b610f1c6113ee565b7f00000000000000000000000083b3a3fde997b9cba246486a3aaf9240c4b893ed6001600160a01b0316826001600160a01b031603610fc35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa5565b610fcd8282611ac7565b5050565b610fd96113ee565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110439190611f6c565b10156110825760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610aa5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f39190611f85565b505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561117a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aa5565b6111873385858403611448565b5060019392505050565b6000610b6633848461156c565b6111a66113ee565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61120d6113ee565b61121f81670de0b6b3a7640000611f55565b600a5550565b61122d6113ee565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6112606113ee565b6009546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6112c56113ee565b601484905560178390556015829055601681905580826112e58587611f2c565b6112ef9190611f2c565b6112f99190611f2c565b60135550505050565b61130a6113ee565b8047101561134b5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610aa5565b604051339082156108fc029083906000818181858888f19350505050158015610fcd573d6000803e3d6000fd5b6113806113ee565b6001600160a01b0381166113e55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b610d1281611a75565b6005546001600160a01b03163314610d275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aa5565b6001600160a01b0383166114aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b6001600160a01b03821661150b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115925760405162461bcd60e51b8152600401610aa590611fa2565b6001600160a01b0382166115b85760405162461bcd60e51b8152600401610aa590611fe7565b806000036115cc576110f383836000611b1b565b600b5460ff1615611779576005546001600160a01b0384811691161480159061160357506005546001600160a01b03838116911614155b801561161757506001600160a01b03821615155b801561162e57506001600160a01b03821661dead14155b1561177957600b54610100900460ff166116c9576001600160a01b0383166000908152601e602052604090205460ff1615801561168457506001600160a01b0382166000908152601e602052604090205460ff16155b6116c95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610aa5565b6001600160a01b0383166000908152601e602052604090205460ff16801561170a57506001600160a01b0382166000908152601d602052604090205460ff16155b1561177957600a546001600160a01b0383166000908152602081905260409020546117359083611f2c565b11156117795760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610aa5565b6001600160a01b0383166000908152601c602052604090205460019060ff16806117bb57506001600160a01b0383166000908152601c602052604090205460ff165b156117c4575060005b6000811561191c576001600160a01b0384166000908152601e602052604090205460ff1680156117f657506000601354115b1561181c5760646013548461180b9190611f55565b611815919061202a565b9050611868565b6001600160a01b0385166000908152601e602052604090205460ff16801561184657506000600e54115b15611868576064600e548461185b9190611f55565b611865919061202a565b90505b801561190f576007546018546118a29187916001600160a01b03909116906064906118939086611f55565b61189d919061202a565b611b1b565b600854601b546118c79187916001600160a01b03909116906064906118939086611f55565b600954601a546118ec9187916001600160a01b03909116906064906118939086611f55565b61190f856064601954846119009190611f55565b61190a919061202a565b611927565b611919818461204c565b92505b610efe858585611b1b565b6001600160a01b0382166119875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610aa5565b6001600160a01b038216600090815260208190526040902054818110156119fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610aa5565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611a2a90849061204c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611b415760405162461bcd60e51b8152600401610aa590611fa2565b6001600160a01b038216611b675760405162461bcd60e51b8152600401610aa590611fe7565b6001600160a01b03831660009081526020819052604090205481811015611bdf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aa5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c16908490611f2c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c6291815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015611c9d57858101830151858201604001528201611c81565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1257600080fd5b60008060408385031215611ce657600080fd5b8235611cf181611cbe565b946020939093013593505050565b600080600060608486031215611d1457600080fd5b8335611d1f81611cbe565b92506020840135611d2f81611cbe565b929592945050506040919091013590565b60008060008060808587031215611d5657600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d8457600080fd5b8135611d8f81611cbe565b9392505050565b600060208284031215611da857600080fd5b5035919050565b60008083601f840112611dc157600080fd5b50813567ffffffffffffffff811115611dd957600080fd5b6020830191508360208260051b8501011115611df457600080fd5b9250929050565b60008060008060408587031215611e1157600080fd5b843567ffffffffffffffff80821115611e2957600080fd5b611e3588838901611daf565b90965094506020870135915080821115611e4e57600080fd5b50611e5b87828801611daf565b95989497509550505050565b8015158114610d1257600080fd5b60008060408385031215611e8857600080fd5b8235611e9381611cbe565b91506020830135611ea381611e67565b809150509250929050565b60008060408385031215611ec157600080fd5b8235611ecc81611cbe565b91506020830135611ea381611cbe565b600181811c90821680611ef057607f821691505b602082108103611f1057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b6a57610b6a611f16565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b6a57610b6a611f16565b600060208284031215611f7e57600080fd5b5051919050565b600060208284031215611f9757600080fd5b8151611d8f81611e67565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261204757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b6a57610b6a611f1656fea2646970667358221220fd63223f2de632a0adc5348e63b136d8e43e2266b2866909ef8a65306f8c3fd264736f6c63430008120033

Deployed Bytecode Sourcemap

17939:10953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21966:217;;;;;;;;;;;;;:::i;:::-;;7465:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8862:194;;;;;;;;;;-1:-1:-1;8862:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;8862:194:0;1023:187:1;18579:31:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;18579:31:0;1215:177:1;17980:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;17980:51:0;1397:230:1;7954:108:0;;;;;;;;;;-1:-1:-1;8042:12:0;;7954:108;;9064:529;;;;;;;;;;-1:-1:-1;9064:529:0;;;;;:::i;:::-;;:::i;18083:44::-;;;;;;;;;;-1:-1:-1;18083:44:0;;;;-1:-1:-1;;;;;18083:44:0;;;18136:24;;;;;;;;;;-1:-1:-1;18136:24:0;;;;-1:-1:-1;;;;;18136:24:0;;;22629:392;;;;;;;;;;-1:-1:-1;22629:392:0;;;;;:::i;:::-;;:::i;7796:93::-;;;;;;;;;;-1:-1:-1;7796:93:0;;7879:2;2833:36:1;;2821:2;2806:18;7796:93:0;2691:184:1;9601:290:0;;;;;;;;;;-1:-1:-1;9601:290:0;;;;;:::i;:::-;;:::i;18038:38::-;;;;;;;;;;;;;;;18273:33;;;;;;;;;;-1:-1:-1;18273:33:0;;;;;;;;25205:126;;;;;;;;;;-1:-1:-1;25205:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25295:28:0;25271:4;25295:28;;;:19;:28;;;;;;;;;25205:126;24683:163;;;;;;;;;;-1:-1:-1;24683:163:0;;;;;:::i;:::-;;:::i;18619:32::-;;;;;;;;;;;;;;;;28319:101;;;;;;;;;;-1:-1:-1;28319:101:0;;;;;:::i;:::-;;:::i;8125:143::-;;;;;;;;;;-1:-1:-1;8125:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8242:18:0;8215:7;8242:18;;;;;;;;;;;;8125:143;3843:103;;;;;;;;;;;;;:::i;22235:121::-;;;;;;;;;;;;;:::i;25028:169::-;;;;;;;;;;-1:-1:-1;25028:169:0;;;;;:::i;:::-;;:::i;24854:166::-;;;;;;;;;;-1:-1:-1;24854:166:0;;;;;:::i;:::-;;:::i;3202:87::-;;;;;;;;;;-1:-1:-1;3275:6:0;;-1:-1:-1;;;;;3275:6:0;3202:87;;23491:295;;;;;;;;;;-1:-1:-1;23491:295:0;;;;;:::i;:::-;;:::i;28426:457::-;;;;;;;;;;-1:-1:-1;28426:457:0;;;;;:::i;:::-;;:::i;7684:104::-;;;;;;;;;;;;;:::i;23984:306::-;;;;;;;;;;-1:-1:-1;23984:306:0;;;;;:::i;:::-;;:::i;28102:209::-;;;;;;;;;;-1:-1:-1;28102:209:0;;;;;:::i;:::-;;:::i;9899:475::-;;;;;;;;;;-1:-1:-1;9899:475:0;;;;;:::i;:::-;;:::i;8276:200::-;;;;;;;;;;-1:-1:-1;8276:200:0;;;;;:::i;:::-;;:::i;18694:30::-;;;;;;;;;;;;;;;;19297:57;;;;;;;;;;-1:-1:-1;19297:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18313:33;;;;;;;;;;-1:-1:-1;18313:33:0;;;;;;;;;;;18355:25;;;;;;;;;;;;;;;;23794:182;;;;;;;;;;-1:-1:-1;23794:182:0;;;;;:::i;:::-;;:::i;22364:116::-;;;;;;;;;;-1:-1:-1;22364:116:0;;;;;:::i;:::-;;:::i;18387:34::-;;;;;;;;;;;;;;;;19083:56;;;;;;;;;;-1:-1:-1;19083:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18201:30;;;;;;;;;;-1:-1:-1;18201:30:0;;;;-1:-1:-1;;;;;18201:30:0;;;18429:31;;;;;;;;;;;;;;;;8539:176;;;;;;;;;;-1:-1:-1;8539:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;8680:18:0;;;8653:7;8680:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8539:176;18773:32;;;;;;;;;;;;;;;;18658:29;;;;;;;;;;;;;;;;22488:133;;;;;;;;;;-1:-1:-1;22488:133:0;;;;;:::i;:::-;;:::i;24494:181::-;;;;;;;;;;-1:-1:-1;24494:181:0;;;;;:::i;:::-;;:::i;18502:29::-;;;;;;;;;;;;;;;;23029:454;;;;;;;;;;-1:-1:-1;23029:454:0;;;;;:::i;:::-;;:::i;18467:28::-;;;;;;;;;;;;;;;;18538:34;;;;;;;;;;;;;;;;27911:183;;;;;;;;;;-1:-1:-1;27911:183:0;;;;;:::i;:::-;;:::i;4101:201::-;;;;;;;;;;-1:-1:-1;4101:201:0;;;;;:::i;:::-;;:::i;18731:35::-;;;;;;;;;;;;;;;;18240:24;;;;;;;;;;;;;;;;18167:27;;;;;;;;;;-1:-1:-1;18167:27:0;;;;-1:-1:-1;;;;;18167:27:0;;;21966:217;3088:13;:11;:13::i;:::-;22020:10:::1;::::0;:15;22012:48:::1;;;::::0;-1:-1:-1;;;22012:48:0;;5906:2:1;22012:48:0::1;::::0;::::1;5888:21:1::0;5945:2;5925:18;;;5918:30;-1:-1:-1;;;5964:18:1;;;5957:50;6024:18;;22012:48:0::1;;;;;;;;;22084:12;22071:10;:25:::0;22129:15:::1;22107:19;:37:::0;22155:13:::1;:20:::0;;-1:-1:-1;;22155:20:0::1;;;::::0;;21966:217::o;7465:100::-;7519:13;7552:5;7545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:100;:::o;8862:194::-;8970:4;8987:39;1833:10;9010:7;9019:6;8987:8;:39::i;:::-;-1:-1:-1;9044:4:0;8862:194;;;;;:::o;9064:529::-;9204:4;9221:36;9231:6;9239:9;9250:6;9221:9;:36::i;:::-;-1:-1:-1;;;;;9297:19:0;;9270:24;9297:19;;;:11;:19;;;;;;;;1833:10;9297:33;;;;;;;;9363:26;;;;9341:116;;;;-1:-1:-1;;;9341:116:0;;6640:2:1;9341:116:0;;;6622:21:1;6679:2;6659:18;;;6652:30;6718:34;6698:18;;;6691:62;-1:-1:-1;;;6769:18:1;;;6762:38;6817:19;;9341:116:0;6438:404:1;9341:116:0;9493:57;9502:6;1833:10;9543:6;9524:16;:25;9493:8;:57::i;:::-;-1:-1:-1;9581:4:0;;9064:529;-1:-1:-1;;;;9064:529:0:o;22629:392::-;3088:13;:11;:13::i;:::-;22803:9:::1;:19:::0;;;22833:12:::1;:25:::0;;;22869:10:::1;:21:::0;;;22901:15:::1;:31:::0;;;22919:13;22882:8;22958:24:::1;22848:10:::0;22815:7;22958:24:::1;:::i;:::-;:37;;;;:::i;:::-;:55;;;;:::i;:::-;22943:12;:70:::0;-1:-1:-1;;;;22629:392:0:o;9601:290::-;1833:10;9714:4;9803:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9803:34:0;;;;;;;;;;9714:4;;9731:130;;9781:7;;9803:47;;9840:10;;9803:47;:::i;:::-;9731:8;:130::i;24683:163::-;3088:13;:11;:13::i;:::-;24792:11:::1;::::0;24763:41:::1;::::0;-1:-1:-1;;;;;24792:11:0;;::::1;::::0;24763:41;::::1;::::0;::::1;::::0;24792:11:::1;::::0;24763:41:::1;24815:11;:23:::0;;-1:-1:-1;;;;;;24815:23:0::1;-1:-1:-1::0;;;;;24815:23:0;;;::::1;::::0;;;::::1;::::0;;24683:163::o;28319:101::-;3088:13;:11;:13::i;:::-;28386:26:::1;28392:10;28404:7;28386:5;:26::i;:::-;28319:101:::0;:::o;3843:103::-;3088:13;:11;:13::i;:::-;3908:30:::1;3935:1;3908:18;:30::i;:::-;3843:103::o:0;22235:121::-;22287:4;3088:13;:11;:13::i;:::-;-1:-1:-1;22304:14:0::1;:22:::0;;-1:-1:-1;;22304:22:0::1;::::0;;;22235:121;:::o;25028:169::-;3088:13;:11;:13::i;:::-;25141:12:::1;::::0;25110:44:::1;::::0;-1:-1:-1;;;;;25141:12:0;;::::1;::::0;25110:44;::::1;::::0;::::1;::::0;25141:12:::1;::::0;25110:44:::1;25165:12;:24:::0;;-1:-1:-1;;;;;;25165:24:0::1;-1:-1:-1::0;;;;;25165:24:0;;;::::1;::::0;;;::::1;::::0;;25028:169::o;24854:166::-;3088:13;:11;:13::i;:::-;24967:9:::1;::::0;24936:41:::1;::::0;-1:-1:-1;;;;;24967:9:0;;::::1;::::0;24936:41;::::1;::::0;::::1;::::0;24967:9:::1;::::0;24936:41:::1;24988:9;:24:::0;;-1:-1:-1;;;;;;24988:24:0::1;-1:-1:-1::0;;;;;24988:24:0;;;::::1;::::0;;;::::1;::::0;;24854:166::o;23491:295::-;3088:13;:11;:13::i;:::-;23657:10:::1;:17:::0;;;;23685:13:::1;:23:::0;;;;23719:11:::1;:19:::0;23749:16:::1;:29:::0;23491:295::o;28426:457::-;3088:13;:11;:13::i;:::-;28583:34;;::::1;28561:109;;;::::0;-1:-1:-1;;;28561:109:0;;7311:2:1;28561:109:0::1;::::0;::::1;7293:21:1::0;7350:2;7330:18;;;7323:30;7389:27;7369:18;;;7362:55;7434:18;;28561:109:0::1;7109:349:1::0;28561:109:0::1;28681:9;28705:171;28712:20:::0;;::::1;28705:171;;;28749:15;28767:7;;28775:1;28767:10;;;;;;;:::i;:::-;;;;;;;28779:4;28767:17;;;;:::i;:::-;28749:35;;28799:44;28809:10;28821:9;;28831:1;28821:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28835:7;28799:9;:44::i;:::-;28858:6;28863:1;28858:6:::0;::::1;:::i;:::-;;;28734:142;28705:171;;;28550:333;28426:457:::0;;;;:::o;7684:104::-;7740:13;7773:7;7766:14;;;;;:::i;23984:306::-;3088:13;:11;:13::i;:::-;24130::::1;-1:-1:-1::0;;;;;24122:21:0::1;:4;-1:-1:-1::0;;;;;24122:21:0::1;::::0;24100:128:::1;;;::::0;-1:-1:-1;;;24100:128:0;;7970:2:1;24100:128:0::1;::::0;::::1;7952:21:1::0;8009:2;7989:18;;;7982:30;8048:34;8028:18;;;8021:62;8119:27;8099:18;;;8092:55;8164:19;;24100:128:0::1;7768:421:1::0;24100:128:0::1;24241:41;24270:4;24276:5;24241:28;:41::i;:::-;23984:306:::0;;:::o;28102:209::-;3088:13;:11;:13::i;:::-;28195:31:::1;::::0;-1:-1:-1;;;28195:31:0;;28220:4:::1;28195:31;::::0;::::1;1570:51:1::0;28230:7:0;;-1:-1:-1;;;;;28195:16:0;::::1;::::0;::::1;::::0;1543:18:1;;28195:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;28187:69;;;::::0;-1:-1:-1;;;28187:69:0;;8585:2:1;28187:69:0::1;::::0;::::1;8567:21:1::0;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:44;8697:18;;28187:69:0::1;8383:338:1::0;28187:69:0::1;28267:36;::::0;-1:-1:-1;;;28267:36:0;;28283:10:::1;28267:36;::::0;::::1;8900:51:1::0;8967:18;;;8960:34;;;-1:-1:-1;;;;;28267:15:0;::::1;::::0;::::1;::::0;8873:18:1;;28267:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28102:209:::0;;:::o;9899:475::-;1833:10;10017:4;10061:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10061:34:0;;;;;;;;;;10128:35;;;;10106:122;;;;-1:-1:-1;;;10106:122:0;;9457:2:1;10106:122:0;;;9439:21:1;9496:2;9476:18;;;9469:30;9535:34;9515:18;;;9508:62;-1:-1:-1;;;9586:18:1;;;9579:35;9631:19;;10106:122:0;9255:401:1;10106:122:0;10264:67;1833:10;10287:7;10315:15;10296:16;:34;10264:8;:67::i;:::-;-1:-1:-1;10362:4:0;;9899:475;-1:-1:-1;;;9899:475:0:o;8276:200::-;8387:4;8404:42;1833:10;8428:9;8439:6;8404:9;:42::i;23794:182::-;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;23879:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23879:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23934:34;;1163:41:1;;;23934:34:0::1;::::0;1136:18:1;23934:34:0::1;;;;;;;23794:182:::0;;:::o;22364:116::-;3088:13;:11;:13::i;:::-;22453:19:::1;:6:::0;22463:8:::1;22453:19;:::i;:::-;22441:9;:31:::0;-1:-1:-1;22364:116:0:o;22488:133::-;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;22574:32:0;;;::::1;;::::0;;;:24:::1;:32;::::0;;;;:39;;-1:-1:-1;;22574:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22488:133::o;24494:181::-;3088:13;:11;:13::i;:::-;24613:15:::1;::::0;24579:50:::1;::::0;-1:-1:-1;;;;;24613:15:0;;::::1;::::0;24579:50;::::1;::::0;::::1;::::0;24613:15:::1;::::0;24579:50:::1;24640:15;:27:::0;;-1:-1:-1;;;;;;24640:27:0::1;-1:-1:-1::0;;;;;24640:27:0;;;::::1;::::0;;;::::1;::::0;;24494:181::o;23029:454::-;3088:13;:11;:13::i;:::-;23204:10:::1;:20:::0;;;23235:13:::1;:26:::0;;;23272:11:::1;:22:::0;;;23305:16:::1;:32:::0;;;23324:13;23286:8;23377:39:::1;23251:10:::0;23217:7;23377:39:::1;:::i;:::-;:66;;;;:::i;:::-;:98;;;;:::i;:::-;23348:13;:127:::0;-1:-1:-1;;;;23029:454:0:o;27911:183::-;3088:13;:11;:13::i;:::-;28012:7:::1;27987:21;:32;;27979:59;;;::::0;-1:-1:-1;;;27979:59:0;;8585:2:1;27979:59:0::1;::::0;::::1;8567:21:1::0;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:44;8697:18;;27979:59:0::1;8383:338:1::0;27979:59:0::1;28049:37;::::0;28057:10:::1;::::0;28049:37;::::1;;;::::0;28078:7;;28049:37:::1;::::0;;;28078:7;28057:10;28049:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;4101:201:::0;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;4190:22:0;::::1;4182:73;;;::::0;-1:-1:-1;;;4182:73:0;;9863:2:1;4182:73:0::1;::::0;::::1;9845:21:1::0;9902:2;9882:18;;;9875:30;9941:34;9921:18;;;9914:62;-1:-1:-1;;;9992:18:1;;;9985:36;10038:19;;4182:73:0::1;9661:402:1::0;4182:73:0::1;4266:28;4285:8;4266:18;:28::i;3367:132::-:0;3275:6;;-1:-1:-1;;;;;3275:6:0;1833:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;10270:2:1;3423:68:0;;;10252:21:1;;;10289:18;;;10282:30;10348:34;10328:18;;;10321:62;10400:18;;3423:68:0;10068:356:1;12166:380:0;-1:-1:-1;;;;;12302:19:0;;12294:68;;;;-1:-1:-1;;;12294:68:0;;10631:2:1;12294:68:0;;;10613:21:1;10670:2;10650:18;;;10643:30;10709:34;10689:18;;;10682:62;-1:-1:-1;;;10760:18:1;;;10753:34;10804:19;;12294:68:0;10429:400:1;12294:68:0;-1:-1:-1;;;;;12381:21:0;;12373:68;;;;-1:-1:-1;;;12373:68:0;;11036:2:1;12373:68:0;;;11018:21:1;11075:2;11055:18;;;11048:30;11114:34;11094:18;;;11087:62;-1:-1:-1;;;11165:18:1;;;11158:32;11207:19;;12373:68:0;10834:398:1;12373:68:0;-1:-1:-1;;;;;12454:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12506:32;;1361:25:1;;;12506:32:0;;1334:18:1;12506:32:0;;;;;;;12166:380;;;:::o;25339:2564::-;-1:-1:-1;;;;;25471:18:0;;25463:68;;;;-1:-1:-1;;;25463:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25550:16:0;;25542:64;;;;-1:-1:-1;;;25542:64:0;;;;;;;:::i;:::-;25623:6;25633:1;25623:11;25619:93;;25651:28;25667:4;25673:2;25677:1;25651:15;:28::i;25619:93::-;25728:14;;;;25724:872;;;3275:6;;-1:-1:-1;;;;;25781:15:0;;;3275:6;;25781:15;;;;:49;;-1:-1:-1;3275:6:0;;-1:-1:-1;;;;;25817:13:0;;;3275:6;;25817:13;;25781:49;:86;;;;-1:-1:-1;;;;;;25851:16:0;;;;25781:86;:128;;;;-1:-1:-1;;;;;;25888:21:0;;25902:6;25888:21;;25781:128;25759:826;;;25949:13;;;;;;;25944:266;;-1:-1:-1;;;;;26022:31:0;;;;;;:25;:31;;;;;;;;26021:32;:95;;;;-1:-1:-1;;;;;;26087:29:0;;;;;;:25;:29;;;;;;;;26086:30;26021:95;25987:203;;;;-1:-1:-1;;;25987:203:0;;12249:2:1;25987:203:0;;;12231:21:1;12288:2;12268:18;;;12261:30;-1:-1:-1;;;12307:18:1;;;12300:52;12369:18;;25987:203:0;12047:346:1;25987:203:0;-1:-1:-1;;;;;26282:31:0;;;;;;:25;:31;;;;;;;;:85;;;;-1:-1:-1;;;;;;26339:28:0;;;;;;:24;:28;;;;;;;;26338:29;26282:85;26256:314;;;26470:9;;-1:-1:-1;;;;;8242:18:0;;8215:7;8242:18;;;;;;;;;;;26444:22;;:6;:22;:::i;:::-;:35;;26410:140;;;;-1:-1:-1;;;26410:140:0;;12600:2:1;26410:140:0;;;12582:21:1;12639:2;12619:18;;;12612:30;-1:-1:-1;;;12658:18:1;;;12651:49;12717:18;;26410:140:0;12398:343:1;26410:140:0;-1:-1:-1;;;;;26729:25:0;;26608:12;26729:25;;;:19;:25;;;;;;26623:4;;26729:25;;;:52;;-1:-1:-1;;;;;;26758:23:0;;;;;;:19;:23;;;;;;;;26729:52;26725:100;;;-1:-1:-1;26808:5:0;26725:100;26837:12;26942:7;26938:912;;;-1:-1:-1;;;;;26994:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27043:1;27027:13;;:17;26994:50;26990:298;;;27099:3;27082:13;;27073:6;:22;;;;:::i;:::-;27072:30;;;;:::i;:::-;27065:37;;26990:298;;;-1:-1:-1;;;;;27164:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27214:1;27199:12;;:16;27164:51;27160:128;;;27269:3;27253:12;;27244:6;:21;;;;:::i;:::-;27243:29;;;;:::i;:::-;27236:36;;27160:128;27308:8;;27304:504;;27359:9;;27378:10;;27337:59;;27353:4;;-1:-1:-1;;;;;27359:9:0;;;;27392:3;;27371:17;;:4;:17;:::i;:::-;27370:25;;;;:::i;:::-;27337:15;:59::i;:::-;27480:12;;27523:13;;27415:147;;27453:4;;-1:-1:-1;;;;;27480:12:0;;;;27540:3;;27516:20;;:4;:20;:::i;27415:147::-;27646:15;;27692:16;;27581:153;;27619:4;;-1:-1:-1;;;;;27646:15:0;;;;27712:3;;27685:23;;:4;:23;:::i;27581:153::-;27753:39;27759:4;27788:3;27773:11;;27766:4;:18;;;;:::i;:::-;27765:26;;;;:::i;:::-;27753:5;:39::i;:::-;27824:14;27834:4;27824:14;;:::i;:::-;;;26938:912;27862:33;27878:4;27884:2;27888:6;27862:15;:33::i;11567:591::-;-1:-1:-1;;;;;11651:21:0;;11643:67;;;;-1:-1:-1;;;11643:67:0;;13303:2:1;11643:67:0;;;13285:21:1;13342:2;13322:18;;;13315:30;13381:34;13361:18;;;13354:62;-1:-1:-1;;;13432:18:1;;;13425:31;13473:19;;11643:67:0;13101:397:1;11643:67:0;-1:-1:-1;;;;;11810:18:0;;11785:22;11810:18;;;;;;;;;;;11847:24;;;;11839:71;;;;-1:-1:-1;;;11839:71:0;;13705:2:1;11839:71:0;;;13687:21:1;13744:2;13724:18;;;13717:30;13783:34;13763:18;;;13756:62;-1:-1:-1;;;13834:18:1;;;13827:32;13876:19;;11839:71:0;13503:398:1;11839:71:0;-1:-1:-1;;;;;11946:18:0;;:9;:18;;;;;;;;;;11967:23;;;11946:44;;12012:12;:22;;11984:6;;11946:9;12012:22;;11984:6;;12012:22;:::i;:::-;;;;-1:-1:-1;;12052:37:0;;1361:25:1;;;12078:1:0;;-1:-1:-1;;;;;12052:37:0;;;;;1349:2:1;1334:18;12052:37:0;;;;;;;28267:36:::1;28102:209:::0;;:::o;4462:191::-;4555:6;;;-1:-1:-1;;;;;4572:17:0;;;-1:-1:-1;;;;;;4572:17:0;;;;;;;4605:40;;4555:6;;;4572:17;4555:6;;4605:40;;4536:16;;4605:40;4525:128;4462:191;:::o;24298:188::-;-1:-1:-1;;;;;24381:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;24381:39:0;;;;;;;;;;24438:40;;24381:39;;:31;24438:40;;;24298:188;;:::o;10382:770::-;-1:-1:-1;;;;;10522:20:0;;10514:70;;;;-1:-1:-1;;;10514:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10603:23:0;;10595:71;;;;-1:-1:-1;;;10595:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10763:17:0;;10739:21;10763:17;;;;;;;;;;;10813:23;;;;10791:111;;;;-1:-1:-1;;;10791:111:0;;14108:2:1;10791:111:0;;;14090:21:1;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;-1:-1:-1;;;14237:18:1;;;14230:36;14283:19;;10791:111:0;13906:402:1;10791:111:0;-1:-1:-1;;;;;10938:17:0;;;:9;:17;;;;;;;;;;;10958:22;;;10938:42;;11002:20;;;;;;;;:30;;10974:6;;10938:9;11002:30;;10974:6;;11002:30;:::i;:::-;;;;;;;;11067:9;-1:-1:-1;;;;;11050:35:0;11059:6;-1:-1:-1;;;;;11050:35:0;;11078:6;11050:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;11050:35:0;;;;;;;;10503:649;10382:770;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2301:385::-;2387:6;2395;2403;2411;2464:3;2452:9;2443:7;2439:23;2435:33;2432:53;;;2481:1;2478;2471:12;2432:53;-1:-1:-1;;2504:23:1;;;2574:2;2559:18;;2546:32;;-1:-1:-1;2625:2:1;2610:18;;2597:32;;2676:2;2661:18;2648:32;;-1:-1:-1;2301:385:1;-1:-1:-1;2301:385:1:o;2880:247::-;2939:6;2992:2;2980:9;2971:7;2967:23;2963:32;2960:52;;;3008:1;3005;2998:12;2960:52;3047:9;3034:23;3066:31;3091:5;3066:31;:::i;:::-;3116:5;2880:247;-1:-1:-1;;;2880:247:1:o;3132:180::-;3191:6;3244:2;3232:9;3223:7;3219:23;3215:32;3212:52;;;3260:1;3257;3250:12;3212:52;-1:-1:-1;3283:23:1;;3132:180;-1:-1:-1;3132:180:1:o;3317:367::-;3380:8;3390:6;3444:3;3437:4;3429:6;3425:17;3421:27;3411:55;;3462:1;3459;3452:12;3411:55;-1:-1:-1;3485:20:1;;3528:18;3517:30;;3514:50;;;3560:1;3557;3550:12;3514:50;3597:4;3589:6;3585:17;3573:29;;3657:3;3650:4;3640:6;3637:1;3633:14;3625:6;3621:27;3617:38;3614:47;3611:67;;;3674:1;3671;3664:12;3611:67;3317:367;;;;;:::o;3689:773::-;3811:6;3819;3827;3835;3888:2;3876:9;3867:7;3863:23;3859:32;3856:52;;;3904:1;3901;3894:12;3856:52;3944:9;3931:23;3973:18;4014:2;4006:6;4003:14;4000:34;;;4030:1;4027;4020:12;4000:34;4069:70;4131:7;4122:6;4111:9;4107:22;4069:70;:::i;:::-;4158:8;;-1:-1:-1;4043:96:1;-1:-1:-1;4246:2:1;4231:18;;4218:32;;-1:-1:-1;4262:16:1;;;4259:36;;;4291:1;4288;4281:12;4259:36;;4330:72;4394:7;4383:8;4372:9;4368:24;4330:72;:::i;:::-;3689:773;;;;-1:-1:-1;4421:8:1;-1:-1:-1;;;;3689:773:1:o;4467:118::-;4553:5;4546:13;4539:21;4532:5;4529:32;4519:60;;4575:1;4572;4565:12;4590:382;4655:6;4663;4716:2;4704:9;4695:7;4691:23;4687:32;4684:52;;;4732:1;4729;4722:12;4684:52;4771:9;4758:23;4790:31;4815:5;4790:31;:::i;:::-;4840:5;-1:-1:-1;4897:2:1;4882:18;;4869:32;4910:30;4869:32;4910:30;:::i;:::-;4959:7;4949:17;;;4590:382;;;;;:::o;5311:388::-;5379:6;5387;5440:2;5428:9;5419:7;5415:23;5411:32;5408:52;;;5456:1;5453;5446:12;5408:52;5495:9;5482:23;5514:31;5539:5;5514:31;:::i;:::-;5564:5;-1:-1:-1;5621:2:1;5606:18;;5593:32;5634:33;5593:32;5634:33;:::i;6053:380::-;6132:1;6128:12;;;;6175;;;6196:61;;6250:4;6242:6;6238:17;6228:27;;6196:61;6303:2;6295:6;6292:14;6272:18;6269:38;6266:161;;6349:10;6344:3;6340:20;6337:1;6330:31;6384:4;6381:1;6374:15;6412:4;6409:1;6402:15;6266:161;;6053:380;;;:::o;6847:127::-;6908:10;6903:3;6899:20;6896:1;6889:31;6939:4;6936:1;6929:15;6963:4;6960:1;6953:15;6979:125;7044:9;;;7065:10;;;7062:36;;;7078:18;;:::i;7463:127::-;7524:10;7519:3;7515:20;7512:1;7505:31;7555:4;7552:1;7545:15;7579:4;7576:1;7569:15;7595:168;7668:9;;;7699;;7716:15;;;7710:22;;7696:37;7686:71;;7737:18;;:::i;8194:184::-;8264:6;8317:2;8305:9;8296:7;8292:23;8288:32;8285:52;;;8333:1;8330;8323:12;8285:52;-1:-1:-1;8356:16:1;;8194:184;-1:-1:-1;8194:184:1:o;9005:245::-;9072:6;9125:2;9113:9;9104:7;9100:23;9096:32;9093:52;;;9141:1;9138;9131:12;9093:52;9173:9;9167:16;9192:28;9214:5;9192:28;:::i;11237:401::-;11439:2;11421:21;;;11478:2;11458:18;;;11451:30;11517:34;11512:2;11497:18;;11490:62;-1:-1:-1;;;11583:2:1;11568:18;;11561:35;11628:3;11613:19;;11237:401::o;11643:399::-;11845:2;11827:21;;;11884:2;11864:18;;;11857:30;11923:34;11918:2;11903:18;;11896:62;-1:-1:-1;;;11989:2:1;11974:18;;11967:33;12032:3;12017:19;;11643:399::o;12746:217::-;12786:1;12812;12802:132;;12856:10;12851:3;12847:20;12844:1;12837:31;12891:4;12888:1;12881:15;12919:4;12916:1;12909:15;12802:132;-1:-1:-1;12948:9:1;;12746:217::o;12968:128::-;13035:9;;;13056:11;;;13053:37;;;13070:18;;:::i

Swarm Source

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