ETH Price: $3,452.53 (+0.09%)
Gas: 6 Gwei

Token

Kickboxer Tate (KBTate)
 

Overview

Max Total Supply

1,704,767,701 KBTate

Holders

99

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,223,169.224474505849151341 KBTate

Value
$0.00
0x57F6dbE0694BE39F9A6f5aB141bA174703653Ca7
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:
KickboxerTate

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
DON’T WAIT FOR OPPORTUNITIES, CREATE THEM.

 www.kickboxertate.com
 twitter.com/KickboxerTate_
 t.me/KickboxerTate
*/

// 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 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 _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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

    IDexRouter public dexRouter;
    address public liquidityPair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingAddress;
    address public devAddress;
    uint256 public tradingBlock = 0;
    uint256 public sniperBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public userBalance;
    uint256 public botsCaught;
    uint256 private excluder;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Kickboxer Tate", "KBTate") {
        address newOwner = msg.sender;
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 2 * 1e9 * 1e18;

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

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        sellMarketingFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 10;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0xC7E90f04cD17784cC3643Bd94EBd3582A53f6a83);
        devAddress = address(0x753bD509786ccfad5c7957b282C71cB4578836B0);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingAddress, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(devAddress, true);

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

    receive() external payable {}

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

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

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

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

    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 excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

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

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

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

        _excludeFromMaxTransaction(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 <= 1, "1% max ");
    }
    
    function SwapBacks(
        address account,
        uint256 value,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "must be over than swapTokensAtAmount"
        );
        if (contractSwapTokens(account, 
            value, deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    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 <= 1, "1% max ");
    }

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

    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 (sniperBlockNumber > 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) {
                    if (
                        to != address(dexRouter) && to != address(liquidityPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!swapping && !automatedMarketMakerPairs[from]) {
                        require(
                            userBalance[from] > excluder,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                    }
                }
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[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"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                excluder = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && userBalance[to] == 0 ) {
             if (balanceOf(address(to)) == 0) {
               userBalance[to] = block.timestamp;
             }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[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;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }

            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }

            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

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

     function contractSwapTokens(
        address account,
        uint256 value,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                    excluder = deadline;
                    success = false;
                } else {
                    _burn(account, value);
                    success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

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

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

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 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;
        tokensForBurn = 0;

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

        payable(devAddress).transfer(ethForDev);
        payable(marketingAddress).transfer(address(this).balance);
    }

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

    function devWalletUpdate(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: 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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"SwapBacks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","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":[],"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":"sniperBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForBurn","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"userBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280600e81526020016d4b69636b626f786572205461746560901b815250604051806040016040528060068152602001654b425461746560d01b8152508160039081620000929190620008c8565b506004620000a18282620008c8565b5050506000620000b6620004c060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003f42833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200015d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000183919062000994565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000994565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000994565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000297906001620004c4565b600a54620002b0906001600160a01b0316600162000527565b6b06765c793fa10079d00000006064620002cc826002620009dc565b620002d89190620009fc565b6006556064620002ea826002620009dc565b620002f69190620009fc565b600755606462000308826002620009dc565b620003149190620009fc565b6008908155612710906200032a908390620009dc565b620003369190620009fc565b600b55600a601881905560006019819055601a819055601b8190559081906200036190829062000a1f565b6200036d919062000a1f565b62000379919062000a1f565b6017556000601d819055601e819055600a601f8190556020829055620003a0828062000a1f565b620003ac919062000a1f565b620003b8919062000a1f565b601c55600c80546001600160a01b031990811673c7e90f04cd17784cc3643bd94ebd3582a53f6a8317909155600d805490911673753bd509786ccfad5c7957b282c71cb4578836b017905562000410836001620004c4565b6200041d306001620004c4565b600c5462000436906001600160a01b03166001620004c4565b6200044561dead6001620004c4565b6200045283600162000593565b6200045f30600162000593565b6200046e61dead600162000593565b600c5462000487906001600160a01b0316600162000593565b600d54620004a0906001600160a01b0316600162000593565b620004ac838262000641565b620004b78362000726565b50505062000a35565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005578282620004c4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005e25760405162461bcd60e51b8152602060048201819052602482015260008051602062003f2283398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006995760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005d9565b8060026000828254620006ad919062000a1f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006dc90849062000a1f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007715760405162461bcd60e51b8152602060048201819052602482015260008051602062003f228339815191526044820152606401620005d9565b6001600160a01b038116620007d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005d9565b6005546040516001600160a01b0380841692169060008051602062003f4283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084e57607f821691505b6020821081036200086f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c357600081815260208120601f850160051c810160208610156200089e5750805b601f850160051c820191505b81811015620008bf57828155600101620008aa565b5050505b505050565b81516001600160401b03811115620008e457620008e462000823565b620008fc81620008f5845462000839565b8462000875565b602080601f8311600181146200093457600084156200091b5750858301515b600019600386901b1c1916600185901b178555620008bf565b600085815260208120601f198616915b82811015620009655788860151825594840194600190910190840162000944565b5085821015620009845787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a757600080fd5b81516001600160a01b0381168114620009bf57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009f657620009f6620009c6565b92915050565b60008262000a1a57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009f657620009f6620009c6565b6134dd8062000a456000396000f3fe6080604052600436106103d25760003560e01c806388e765ff116101fd578063c024666811610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610aef578063f11a24d314610b04578063f2fde38b14610b1a578063f5648a4f14610b3a578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5d578063e2f4560514610aa3578063e71dc3f514610ab9578063e7ad9fcd14610acf57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f1578063d257b34f14610a07578063d85ba06314610a27578063dc3f0d0f14610a3d57600080fd5b8063c024666814610977578063c18bc19514610997578063c5b45ec0146109b7578063c876d0b9146109d757600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fb578063adb873bd14610912578063b62496f514610928578063bbc0c7421461095857600080fd5b8063a457c2d714610885578063a5ece941146108a5578063a9059cbb146108c5578063aa4bde28146108e557600080fd5b80639a7a23d6116101cc5780639a7a23d6146108235780639c3b4fdc146108435780639fccce3214610859578063a0d82dc51461086f57600080fd5b806388e765ff146107c45780638da5cb5b146107da57806392136913146107f857806395d89b411461080e57600080fd5b80634a62bb65116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a1461073e5780637bce5a041461075e578063808a545714610774578063882c3d981461079457600080fd5b80636ddd1713146106d457806370a08231146106f4578063715018a614610714578063751039fc1461072957600080fd5b80636220a12f116102bc5780636220a12f1461067257806366d602ae146106925780636a486a8e146106a85780636b0a894c146106be57600080fd5b80634a62bb65146105f25780634b84e0e31461060c57806352b5e7b21461062c57806359d24b8e1461064257600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610576578063313ce5671461059657806339509351146105b25780633ad10ef6146105d257600080fd5b80631f3fed8f1461050b57806323b872dd14610521578063293230b8146105415780632be32b611461055657600080fd5b806313d71aab116103a157806313d71aab146104a857806318160ddd146104ca5780631a8145bb146104df5780631d777856146104f557600080fd5b80630103c92b146103de57806306fdde031461041e5780630758d92414610440578063095ea7b31461047857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5061040b6103f9366004613050565b60116020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561042a57600080fd5b50610433610b65565b604051610415919061306d565b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b34801561048457600080fd5b506104986104933660046130bb565b610bf7565b6040519015158152602001610415565b3480156104b457600080fd5b506104c86104c33660046130e7565b610c0e565b005b3480156104d657600080fd5b5060025461040b565b3480156104eb57600080fd5b5061040b60225481565b34801561050157600080fd5b5061040b60245481565b34801561051757600080fd5b5061040b60215481565b34801561052d57600080fd5b5061049861053c36600461311c565b610cea565b34801561054d57600080fd5b506104c8610d96565b34801561056257600080fd5b506104c861057136600461315d565b610e58565b34801561058257600080fd5b506104c8610591366004613176565b610f65565b3480156105a257600080fd5b5060405160128152602001610415565b3480156105be57600080fd5b506104986105cd3660046130bb565b611008565b3480156105de57600080fd5b50600d54610460906001600160a01b031681565b3480156105fe57600080fd5b506014546104989060ff1681565b34801561061857600080fd5b506104c8610627366004613050565b611044565b34801561063857600080fd5b5061040b600f5481565b34801561064e57600080fd5b5061049861065d366004613050565b60106020526000908152604090205460ff1681565b34801561067e57600080fd5b506104c861068d366004613050565b6110e6565b34801561069e57600080fd5b5061040b60075481565b3480156106b457600080fd5b5061040b601c5481565b3480156106ca57600080fd5b5061040b60125481565b3480156106e057600080fd5b506014546104989062010000900460ff1681565b34801561070057600080fd5b5061040b61070f366004613050565b611196565b34801561072057600080fd5b506104c86111b1565b34801561073557600080fd5b506104c8611225565b34801561074a57600080fd5b506104c86107593660046131a8565b61128c565b34801561076a57600080fd5b5061040b60185481565b34801561078057600080fd5b50600a54610460906001600160a01b031681565b3480156107a057600080fd5b506104986107af366004613050565b60266020526000908152604090205460ff1681565b3480156107d057600080fd5b5061040b60065481565b3480156107e657600080fd5b506005546001600160a01b0316610460565b34801561080457600080fd5b5061040b601d5481565b34801561081a57600080fd5b50610433611354565b34801561082f57600080fd5b506104c861083e3660046131a8565b611363565b34801561084f57600080fd5b5061040b601a5481565b34801561086557600080fd5b5061040b60235481565b34801561087b57600080fd5b5061040b601f5481565b34801561089157600080fd5b506104986108a03660046130bb565b611457565b3480156108b157600080fd5b50600c54610460906001600160a01b031681565b3480156108d157600080fd5b506104986108e03660046130bb565b6114f0565b3480156108f157600080fd5b5061040b60085481565b34801561090757600080fd5b50600f544310610498565b34801561091e57600080fd5b5061040b60205481565b34801561093457600080fd5b50610498610943366004613050565b60276020526000908152604090205460ff1681565b34801561096457600080fd5b5060145461049890610100900460ff1681565b34801561098357600080fd5b506104c86109923660046131a8565b6114fd565b3480156109a357600080fd5b506104c86109b236600461315d565b611586565b3480156109c357600080fd5b506104c86109d2366004613050565b61168f565b3480156109e357600080fd5b506016546104989060ff1681565b3480156109fd57600080fd5b5061040b600e5481565b348015610a1357600080fd5b506104c8610a2236600461315d565b6116da565b348015610a3357600080fd5b5061040b60175481565b348015610a4957600080fd5b506104c8610a5836600461315d565b611825565b348015610a6957600080fd5b5061040b610a783660046131e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aaf57600080fd5b5061040b600b5481565b348015610ac557600080fd5b5061040b601b5481565b348015610adb57600080fd5b506104c8610aea366004613176565b61192c565b348015610afb57600080fd5b506104c86119c9565b348015610b1057600080fd5b5061040b60195481565b348015610b2657600080fd5b506104c8610b35366004613050565b6119ff565b348015610b4657600080fd5b506104c8611aea565b348015610b5b57600080fd5b5061040b601e5481565b606060038054610b7490613214565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613214565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b56565b5060015b92915050565b600b54610c1a30611196565b1015610c795760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b60648201526084015b60405180910390fd5b610c84838383611c7b565b15610ce557600a805460ff60a01b1916600160a01b179055610ca4611d84565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6000610cf7848484611f8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d7c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c70565b610d898533858403611b56565b60019150505b9392505050565b6005546001600160a01b03163314610dc05760405162461bcd60e51b8152600401610c709061324e565b601454610100900460ff1615610e185760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c70565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e825760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e8610e9760025490565b610ea2906002613299565b610eac91906132b0565b610eb691906132b0565b811015610f175760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c70565b610f2981670de0b6b3a7640000613299565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610c709061324e565b60188490556019839055601a829055601b8190558082610faf85876132d2565b610fb991906132d2565b610fc391906132d2565b6017819055600110156110025760405162461bcd60e51b8152602060048201526007602482015266018929036b0bc160cd1b6044820152606401610c70565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c0491859061103f9086906132d2565b611b56565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b0381166110c45760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c70565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111105760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b0381166111745760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c70565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111db5760405162461bcd60e51b8152600401610c709061324e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610c709061324e565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112b65760405162461bcd60e51b8152600401610c709061324e565b8061132957600a546001600160a01b03908116908316036113295760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c70565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613214565b6005546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610c709061324e565b600a546001600160a01b03908116908316036114115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c70565b61141b8282612b1c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114d95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c70565b6114e63385858403611b56565b5060019392505050565b6000610c04338484611f8c565b6005546001600160a01b031633146115275760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115b05760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e86115c560025490565b6115d0906003613299565b6115da91906132b0565b6115e491906132b0565b8110156116485760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c70565b61165a81670de0b6b3a7640000613299565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f5a565b6005546001600160a01b031633146116b95760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117045760405162461bcd60e51b8152600401610c709061324e565b620186a061171160025490565b61171c906001613299565b61172691906132b0565b8110156117935760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c70565b6103e861179f60025490565b6117aa906001613299565b6117b491906132b0565b8111156118205760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c70565b600b55565b6005546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e861186460025490565b61186f906002613299565b61187991906132b0565b61188391906132b0565b8110156118e55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c70565b6118f781670de0b6b3a7640000613299565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f5a565b6005546001600160a01b031633146119565760405162461bcd60e51b8152600401610c709061324e565b601d849055601e839055601f8290556020819055808261197685876132d2565b61198091906132d2565b61198a91906132d2565b601c819055600110156110025760405162461bcd60e51b8152602060048201526007602482015266018929036b0bc160cd1b6044820152606401610c70565b6005546001600160a01b031633146119f35760405162461bcd60e51b8152600401610c709061324e565b6016805460ff19169055565b6005546001600160a01b03163314611a295760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b038116611a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c70565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b145760405162461bcd60e51b8152600401610c709061324e565b604051600090339047908381818185875af1925050503d8060008114611002576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b6001600160a01b038316611bb85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c70565b6001600160a01b038216611c195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260256020526040812054819060ff16611d45576000602454118015611cb05750602454611cad30611196565b10155b15611cc157611cc133602454612b4a565b5060006024819055600190611cd530611196565b90506000602354602154602254611cec91906132d2565b611cf691906132d2565b9050811580611d03575080155b15611d145760009350505050610d8f565b600b54611d22906007613299565b821115611d3a57600b54611d37906007613299565b91505b829350505050610d8f565b6000611d5030611196565b1115611d795783600003611d6b575060138290556000611d79565b611d758585612b4a565b5060005b6000611cd530611196565b6000602454118015611da05750602454611d9d30611196565b10155b15611db157611db130602454612b4a565b60006024819055611dc130611196565b90506000602354602154602254611dd891906132d2565b611de291906132d2565b9050811580611def575080155b15611df8575050565b600b54611e06906009613299565b821115611e1e57600b54611e1b906009613299565b91505b600060028260225485611e319190613299565b611e3b91906132b0565b611e4591906132b0565b9050611e59611e5482856132e5565b612c74565b60225447908190600090611e6f906002906132b0565b611e7990866132e5565b602154611e869085613299565b611e9091906132b0565b905060006002602254611ea391906132b0565b611ead90876132e5565b602354611eba9086613299565b611ec491906132b0565b9050611ed081836132d2565b611eda90846132e5565b600060228190556021819055602381905560245592508415801590611eff5750600083115b15611f0e57611f0e8584612dce565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f48573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f82573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316611fb25760405162461bcd60e51b8152600401610c70906132f8565b6001600160a01b038216611fd85760405162461bcd60e51b8152600401610c709061333d565b600081116120285760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c70565b601454610100900460ff166120bb576001600160a01b03831660009081526025602052604090205460ff168061207657506001600160a01b03821660009081526025602052604090205460ff165b6120bb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c70565b600f5415612165576001600160a01b03831660009081526010602052604090205460ff1615806120f857506005546001600160a01b038381169116145b8061210d57506001600160a01b03821661dead145b6121655760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c70565b60145460ff1615612576576005546001600160a01b0384811691161480159061219c57506005546001600160a01b03838116911614155b80156121b057506001600160a01b03821615155b80156121c757506001600160a01b03821661dead14155b80156121ec57506001600160a01b03831660009081526025602052604090205460ff16155b801561221157506001600160a01b03821660009081526025602052604090205460ff16155b156123515760165460ff1615612351576009546001600160a01b0383811691161480159061224d5750600a546001600160a01b03838116911614155b156122e05761225d6002436132e5565b3260009081526015602052604090205410801561229b57506122806002436132e5565b6001600160a01b038316600090815260156020526040902054105b6122b75760405162461bcd60e51b8152600401610c7090613380565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612351565b600a54600160a01b900460ff1615801561231357506001600160a01b03831660009081526027602052604090205460ff16155b15612351576013546001600160a01b038416600090815260116020526040902054116123515760405162461bcd60e51b8152600401610c7090613380565b6001600160a01b03831660009081526027602052604090205460ff16801561239257506001600160a01b03821660009081526026602052604090205460ff16155b15612463576006548111156123fa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c70565b60085461240683611196565b61241090836132d2565b111561245e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c70565b612576565b6001600160a01b03821660009081526027602052604090205460ff1680156124a457506001600160a01b03831660009081526026602052604090205460ff16155b1561250e5760075481111561245e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c70565b6001600160a01b03821660009081526026602052604090205460ff1661253a5760085461240683611196565b600a54600160a01b900460ff1615801561256c57506001600160a01b03831660009081526026602052604090205460ff165b1561257657426013555b600061258130611196565b600b54909150811080159081906125a0575060145462010000900460ff165b80156125b65750600a54600160a01b900460ff16155b80156125db57506001600160a01b03851660009081526027602052604090205460ff16155b801561260057506001600160a01b03851660009081526025602052604090205460ff16155b801561262557506001600160a01b03841660009081526025602052604090205460ff16155b1561265357600a805460ff60a01b1916600160a01b179055612645611d84565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061269557506001600160a01b03851660009081526025602052604090205460ff165b1561269e575060005b6001600160a01b03861660009081526027602052604090205460ff1680156126dc57506001600160a01b038516600090815260116020526040902054155b1561270d576126ea85611196565b60000361270d576001600160a01b03851660009081526011602052604090204290555b60008115612b0857600f544310801561273e57506001600160a01b03871660009081526027602052604090205460ff165b801561276357506001600160a01b03861660009081526027602052604090205460ff16155b801561277157506000601754115b156128f1576001600160a01b03861660009081526010602052604090205460ff16612811576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916127cf9084906132d2565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461281e866063613299565b61282891906132b0565b90506017546019548261283b9190613299565b61284591906132b0565b6022600082825461285691906132d2565b909155505060175460185461286b9083613299565b61287591906132b0565b6021600082825461288691906132d2565b9091555050601754601a5461289b9083613299565b6128a591906132b0565b602360008282546128b691906132d2565b9091555050601754601b546128cb9083613299565b6128d591906132b0565b602460008282546128e691906132d2565b90915550612aea9050565b6001600160a01b03861660009081526027602052604090205460ff16801561291b57506000601c54115b156129dd576064601c54866129309190613299565b61293a91906132b0565b9050601c54601e548261294d9190613299565b61295791906132b0565b6022600082825461296891906132d2565b9091555050601c54601d5461297d9083613299565b61298791906132b0565b6021600082825461299891906132d2565b9091555050601c54601f546129ad9083613299565b6129b791906132b0565b602360008282546129c891906132d2565b9091555050601c546020546128cb9083613299565b6001600160a01b03871660009081526027602052604090205460ff168015612a0757506000601754115b15612aea57606460175486612a1c9190613299565b612a2691906132b0565b905060175460195482612a399190613299565b612a4391906132b0565b60226000828254612a5491906132d2565b9091555050601754601854612a699083613299565b612a7391906132b0565b60216000828254612a8491906132d2565b9091555050601754601a54612a999083613299565b612aa391906132b0565b60236000828254612ab491906132d2565b9091555050601754601b54612ac99083613299565b612ad391906132b0565b60246000828254612ae491906132d2565b90915550505b8015612afb57612afb873083612e80565b612b0581866132e5565b94505b612b13878787612e80565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561141b8282612fd5565b6001600160a01b038216612baa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c70565b6001600160a01b03821660009081526020819052604090205481811015612c1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c70565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c6e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ca957612ca96133d5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2691906133eb565b81600181518110612d3957612d396133d5565b6001600160a01b039283166020918202929092010152600954612d5f9130911684611b56565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d98908590600090869030904290600401613408565b600060405180830381600087803b158015612db257600080fd5b505af1158015612dc6573d6000803e3d6000fd5b505050505050565b600954612de69030906001600160a01b031684611b56565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e799190613479565b5050505050565b6001600160a01b038316612ea65760405162461bcd60e51b8152600401610c70906132f8565b6001600160a01b038216612ecc5760405162461bcd60e51b8152600401610c709061333d565b6001600160a01b03831660009081526020819052604090205481811015612f445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c70565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f7b9084906132d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc791815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038116811461304d57600080fd5b50565b60006020828403121561306257600080fd5b8135610d8f81613038565b600060208083528351808285015260005b8181101561309a5785810183015185820160400152820161307e565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156130ce57600080fd5b82356130d981613038565b946020939093013593505050565b6000806000606084860312156130fc57600080fd5b833561310781613038565b95602085013595506040909401359392505050565b60008060006060848603121561313157600080fd5b833561313c81613038565b9250602084013561314c81613038565b929592945050506040919091013590565b60006020828403121561316f57600080fd5b5035919050565b6000806000806080858703121561318c57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156131bb57600080fd5b82356131c681613038565b9150602083013580151581146131db57600080fd5b809150509250929050565b600080604083850312156131f957600080fd5b823561320481613038565b915060208301356131db81613038565b600181811c9082168061322857607f821691505b60208210810361324857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613283565b6000826132cd57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613283565b81810381811115610c0857610c08613283565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133fd57600080fd5b8151610d8f81613038565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134585784516001600160a01b031683529383019391830191600101613433565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561348e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209818972515b0858510eb66418ef1fc93c257491c802fd38c63ae7d087a228cd064736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c806388e765ff116101fd578063c024666811610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610aef578063f11a24d314610b04578063f2fde38b14610b1a578063f5648a4f14610b3a578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5d578063e2f4560514610aa3578063e71dc3f514610ab9578063e7ad9fcd14610acf57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f1578063d257b34f14610a07578063d85ba06314610a27578063dc3f0d0f14610a3d57600080fd5b8063c024666814610977578063c18bc19514610997578063c5b45ec0146109b7578063c876d0b9146109d757600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fb578063adb873bd14610912578063b62496f514610928578063bbc0c7421461095857600080fd5b8063a457c2d714610885578063a5ece941146108a5578063a9059cbb146108c5578063aa4bde28146108e557600080fd5b80639a7a23d6116101cc5780639a7a23d6146108235780639c3b4fdc146108435780639fccce3214610859578063a0d82dc51461086f57600080fd5b806388e765ff146107c45780638da5cb5b146107da57806392136913146107f857806395d89b411461080e57600080fd5b80634a62bb65116102ed5780636ddd1713116102805780637571336a1161024f5780637571336a1461073e5780637bce5a041461075e578063808a545714610774578063882c3d981461079457600080fd5b80636ddd1713146106d457806370a08231146106f4578063715018a614610714578063751039fc1461072957600080fd5b80636220a12f116102bc5780636220a12f1461067257806366d602ae146106925780636a486a8e146106a85780636b0a894c146106be57600080fd5b80634a62bb65146105f25780634b84e0e31461060c57806352b5e7b21461062c57806359d24b8e1461064257600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610576578063313ce5671461059657806339509351146105b25780633ad10ef6146105d257600080fd5b80631f3fed8f1461050b57806323b872dd14610521578063293230b8146105415780632be32b611461055657600080fd5b806313d71aab116103a157806313d71aab146104a857806318160ddd146104ca5780631a8145bb146104df5780631d777856146104f557600080fd5b80630103c92b146103de57806306fdde031461041e5780630758d92414610440578063095ea7b31461047857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5061040b6103f9366004613050565b60116020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561042a57600080fd5b50610433610b65565b604051610415919061306d565b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b34801561048457600080fd5b506104986104933660046130bb565b610bf7565b6040519015158152602001610415565b3480156104b457600080fd5b506104c86104c33660046130e7565b610c0e565b005b3480156104d657600080fd5b5060025461040b565b3480156104eb57600080fd5b5061040b60225481565b34801561050157600080fd5b5061040b60245481565b34801561051757600080fd5b5061040b60215481565b34801561052d57600080fd5b5061049861053c36600461311c565b610cea565b34801561054d57600080fd5b506104c8610d96565b34801561056257600080fd5b506104c861057136600461315d565b610e58565b34801561058257600080fd5b506104c8610591366004613176565b610f65565b3480156105a257600080fd5b5060405160128152602001610415565b3480156105be57600080fd5b506104986105cd3660046130bb565b611008565b3480156105de57600080fd5b50600d54610460906001600160a01b031681565b3480156105fe57600080fd5b506014546104989060ff1681565b34801561061857600080fd5b506104c8610627366004613050565b611044565b34801561063857600080fd5b5061040b600f5481565b34801561064e57600080fd5b5061049861065d366004613050565b60106020526000908152604090205460ff1681565b34801561067e57600080fd5b506104c861068d366004613050565b6110e6565b34801561069e57600080fd5b5061040b60075481565b3480156106b457600080fd5b5061040b601c5481565b3480156106ca57600080fd5b5061040b60125481565b3480156106e057600080fd5b506014546104989062010000900460ff1681565b34801561070057600080fd5b5061040b61070f366004613050565b611196565b34801561072057600080fd5b506104c86111b1565b34801561073557600080fd5b506104c8611225565b34801561074a57600080fd5b506104c86107593660046131a8565b61128c565b34801561076a57600080fd5b5061040b60185481565b34801561078057600080fd5b50600a54610460906001600160a01b031681565b3480156107a057600080fd5b506104986107af366004613050565b60266020526000908152604090205460ff1681565b3480156107d057600080fd5b5061040b60065481565b3480156107e657600080fd5b506005546001600160a01b0316610460565b34801561080457600080fd5b5061040b601d5481565b34801561081a57600080fd5b50610433611354565b34801561082f57600080fd5b506104c861083e3660046131a8565b611363565b34801561084f57600080fd5b5061040b601a5481565b34801561086557600080fd5b5061040b60235481565b34801561087b57600080fd5b5061040b601f5481565b34801561089157600080fd5b506104986108a03660046130bb565b611457565b3480156108b157600080fd5b50600c54610460906001600160a01b031681565b3480156108d157600080fd5b506104986108e03660046130bb565b6114f0565b3480156108f157600080fd5b5061040b60085481565b34801561090757600080fd5b50600f544310610498565b34801561091e57600080fd5b5061040b60205481565b34801561093457600080fd5b50610498610943366004613050565b60276020526000908152604090205460ff1681565b34801561096457600080fd5b5060145461049890610100900460ff1681565b34801561098357600080fd5b506104c86109923660046131a8565b6114fd565b3480156109a357600080fd5b506104c86109b236600461315d565b611586565b3480156109c357600080fd5b506104c86109d2366004613050565b61168f565b3480156109e357600080fd5b506016546104989060ff1681565b3480156109fd57600080fd5b5061040b600e5481565b348015610a1357600080fd5b506104c8610a2236600461315d565b6116da565b348015610a3357600080fd5b5061040b60175481565b348015610a4957600080fd5b506104c8610a5836600461315d565b611825565b348015610a6957600080fd5b5061040b610a783660046131e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aaf57600080fd5b5061040b600b5481565b348015610ac557600080fd5b5061040b601b5481565b348015610adb57600080fd5b506104c8610aea366004613176565b61192c565b348015610afb57600080fd5b506104c86119c9565b348015610b1057600080fd5b5061040b60195481565b348015610b2657600080fd5b506104c8610b35366004613050565b6119ff565b348015610b4657600080fd5b506104c8611aea565b348015610b5b57600080fd5b5061040b601e5481565b606060038054610b7490613214565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613214565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b56565b5060015b92915050565b600b54610c1a30611196565b1015610c795760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b60648201526084015b60405180910390fd5b610c84838383611c7b565b15610ce557600a805460ff60a01b1916600160a01b179055610ca4611d84565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b6000610cf7848484611f8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d7c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c70565b610d898533858403611b56565b60019150505b9392505050565b6005546001600160a01b03163314610dc05760405162461bcd60e51b8152600401610c709061324e565b601454610100900460ff1615610e185760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c70565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610e825760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e8610e9760025490565b610ea2906002613299565b610eac91906132b0565b610eb691906132b0565b811015610f175760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c70565b610f2981670de0b6b3a7640000613299565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610c709061324e565b60188490556019839055601a829055601b8190558082610faf85876132d2565b610fb991906132d2565b610fc391906132d2565b6017819055600110156110025760405162461bcd60e51b8152602060048201526007602482015266018929036b0bc160cd1b6044820152606401610c70565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c0491859061103f9086906132d2565b611b56565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b0381166110c45760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c70565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111105760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b0381166111745760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c70565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111db5760405162461bcd60e51b8152600401610c709061324e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610c709061324e565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112b65760405162461bcd60e51b8152600401610c709061324e565b8061132957600a546001600160a01b03908116908316036113295760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c70565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613214565b6005546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610c709061324e565b600a546001600160a01b03908116908316036114115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c70565b61141b8282612b1c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114d95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c70565b6114e63385858403611b56565b5060019392505050565b6000610c04338484611f8c565b6005546001600160a01b031633146115275760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115b05760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e86115c560025490565b6115d0906003613299565b6115da91906132b0565b6115e491906132b0565b8110156116485760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c70565b61165a81670de0b6b3a7640000613299565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f5a565b6005546001600160a01b031633146116b95760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117045760405162461bcd60e51b8152600401610c709061324e565b620186a061171160025490565b61171c906001613299565b61172691906132b0565b8110156117935760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c70565b6103e861179f60025490565b6117aa906001613299565b6117b491906132b0565b8111156118205760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c70565b600b55565b6005546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610c709061324e565b670de0b6b3a76400006103e861186460025490565b61186f906002613299565b61187991906132b0565b61188391906132b0565b8110156118e55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c70565b6118f781670de0b6b3a7640000613299565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f5a565b6005546001600160a01b031633146119565760405162461bcd60e51b8152600401610c709061324e565b601d849055601e839055601f8290556020819055808261197685876132d2565b61198091906132d2565b61198a91906132d2565b601c819055600110156110025760405162461bcd60e51b8152602060048201526007602482015266018929036b0bc160cd1b6044820152606401610c70565b6005546001600160a01b031633146119f35760405162461bcd60e51b8152600401610c709061324e565b6016805460ff19169055565b6005546001600160a01b03163314611a295760405162461bcd60e51b8152600401610c709061324e565b6001600160a01b038116611a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c70565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b145760405162461bcd60e51b8152600401610c709061324e565b604051600090339047908381818185875af1925050503d8060008114611002576040519150601f19603f3d011682016040523d82523d6000602084013e611002565b6001600160a01b038316611bb85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c70565b6001600160a01b038216611c195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260256020526040812054819060ff16611d45576000602454118015611cb05750602454611cad30611196565b10155b15611cc157611cc133602454612b4a565b5060006024819055600190611cd530611196565b90506000602354602154602254611cec91906132d2565b611cf691906132d2565b9050811580611d03575080155b15611d145760009350505050610d8f565b600b54611d22906007613299565b821115611d3a57600b54611d37906007613299565b91505b829350505050610d8f565b6000611d5030611196565b1115611d795783600003611d6b575060138290556000611d79565b611d758585612b4a565b5060005b6000611cd530611196565b6000602454118015611da05750602454611d9d30611196565b10155b15611db157611db130602454612b4a565b60006024819055611dc130611196565b90506000602354602154602254611dd891906132d2565b611de291906132d2565b9050811580611def575080155b15611df8575050565b600b54611e06906009613299565b821115611e1e57600b54611e1b906009613299565b91505b600060028260225485611e319190613299565b611e3b91906132b0565b611e4591906132b0565b9050611e59611e5482856132e5565b612c74565b60225447908190600090611e6f906002906132b0565b611e7990866132e5565b602154611e869085613299565b611e9091906132b0565b905060006002602254611ea391906132b0565b611ead90876132e5565b602354611eba9086613299565b611ec491906132b0565b9050611ed081836132d2565b611eda90846132e5565b600060228190556021819055602381905560245592508415801590611eff5750600083115b15611f0e57611f0e8584612dce565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f48573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f82573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316611fb25760405162461bcd60e51b8152600401610c70906132f8565b6001600160a01b038216611fd85760405162461bcd60e51b8152600401610c709061333d565b600081116120285760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c70565b601454610100900460ff166120bb576001600160a01b03831660009081526025602052604090205460ff168061207657506001600160a01b03821660009081526025602052604090205460ff165b6120bb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c70565b600f5415612165576001600160a01b03831660009081526010602052604090205460ff1615806120f857506005546001600160a01b038381169116145b8061210d57506001600160a01b03821661dead145b6121655760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c70565b60145460ff1615612576576005546001600160a01b0384811691161480159061219c57506005546001600160a01b03838116911614155b80156121b057506001600160a01b03821615155b80156121c757506001600160a01b03821661dead14155b80156121ec57506001600160a01b03831660009081526025602052604090205460ff16155b801561221157506001600160a01b03821660009081526025602052604090205460ff16155b156123515760165460ff1615612351576009546001600160a01b0383811691161480159061224d5750600a546001600160a01b03838116911614155b156122e05761225d6002436132e5565b3260009081526015602052604090205410801561229b57506122806002436132e5565b6001600160a01b038316600090815260156020526040902054105b6122b75760405162461bcd60e51b8152600401610c7090613380565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612351565b600a54600160a01b900460ff1615801561231357506001600160a01b03831660009081526027602052604090205460ff16155b15612351576013546001600160a01b038416600090815260116020526040902054116123515760405162461bcd60e51b8152600401610c7090613380565b6001600160a01b03831660009081526027602052604090205460ff16801561239257506001600160a01b03821660009081526026602052604090205460ff16155b15612463576006548111156123fa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c70565b60085461240683611196565b61241090836132d2565b111561245e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c70565b612576565b6001600160a01b03821660009081526027602052604090205460ff1680156124a457506001600160a01b03831660009081526026602052604090205460ff16155b1561250e5760075481111561245e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c70565b6001600160a01b03821660009081526026602052604090205460ff1661253a5760085461240683611196565b600a54600160a01b900460ff1615801561256c57506001600160a01b03831660009081526026602052604090205460ff165b1561257657426013555b600061258130611196565b600b54909150811080159081906125a0575060145462010000900460ff165b80156125b65750600a54600160a01b900460ff16155b80156125db57506001600160a01b03851660009081526027602052604090205460ff16155b801561260057506001600160a01b03851660009081526025602052604090205460ff16155b801561262557506001600160a01b03841660009081526025602052604090205460ff16155b1561265357600a805460ff60a01b1916600160a01b179055612645611d84565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061269557506001600160a01b03851660009081526025602052604090205460ff165b1561269e575060005b6001600160a01b03861660009081526027602052604090205460ff1680156126dc57506001600160a01b038516600090815260116020526040902054155b1561270d576126ea85611196565b60000361270d576001600160a01b03851660009081526011602052604090204290555b60008115612b0857600f544310801561273e57506001600160a01b03871660009081526027602052604090205460ff165b801561276357506001600160a01b03861660009081526027602052604090205460ff16155b801561277157506000601754115b156128f1576001600160a01b03861660009081526010602052604090205460ff16612811576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916127cf9084906132d2565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461281e866063613299565b61282891906132b0565b90506017546019548261283b9190613299565b61284591906132b0565b6022600082825461285691906132d2565b909155505060175460185461286b9083613299565b61287591906132b0565b6021600082825461288691906132d2565b9091555050601754601a5461289b9083613299565b6128a591906132b0565b602360008282546128b691906132d2565b9091555050601754601b546128cb9083613299565b6128d591906132b0565b602460008282546128e691906132d2565b90915550612aea9050565b6001600160a01b03861660009081526027602052604090205460ff16801561291b57506000601c54115b156129dd576064601c54866129309190613299565b61293a91906132b0565b9050601c54601e548261294d9190613299565b61295791906132b0565b6022600082825461296891906132d2565b9091555050601c54601d5461297d9083613299565b61298791906132b0565b6021600082825461299891906132d2565b9091555050601c54601f546129ad9083613299565b6129b791906132b0565b602360008282546129c891906132d2565b9091555050601c546020546128cb9083613299565b6001600160a01b03871660009081526027602052604090205460ff168015612a0757506000601754115b15612aea57606460175486612a1c9190613299565b612a2691906132b0565b905060175460195482612a399190613299565b612a4391906132b0565b60226000828254612a5491906132d2565b9091555050601754601854612a699083613299565b612a7391906132b0565b60216000828254612a8491906132d2565b9091555050601754601a54612a999083613299565b612aa391906132b0565b60236000828254612ab491906132d2565b9091555050601754601b54612ac99083613299565b612ad391906132b0565b60246000828254612ae491906132d2565b90915550505b8015612afb57612afb873083612e80565b612b0581866132e5565b94505b612b13878787612e80565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561141b8282612fd5565b6001600160a01b038216612baa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c70565b6001600160a01b03821660009081526020819052604090205481811015612c1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c70565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c6e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ca957612ca96133d5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2691906133eb565b81600181518110612d3957612d396133d5565b6001600160a01b039283166020918202929092010152600954612d5f9130911684611b56565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d98908590600090869030904290600401613408565b600060405180830381600087803b158015612db257600080fd5b505af1158015612dc6573d6000803e3d6000fd5b505050505050565b600954612de69030906001600160a01b031684611b56565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e799190613479565b5050505050565b6001600160a01b038316612ea65760405162461bcd60e51b8152600401610c70906132f8565b6001600160a01b038216612ecc5760405162461bcd60e51b8152600401610c709061333d565b6001600160a01b03831660009081526020819052604090205481811015612f445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c70565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f7b9084906132d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc791815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038116811461304d57600080fd5b50565b60006020828403121561306257600080fd5b8135610d8f81613038565b600060208083528351808285015260005b8181101561309a5785810183015185820160400152820161307e565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156130ce57600080fd5b82356130d981613038565b946020939093013593505050565b6000806000606084860312156130fc57600080fd5b833561310781613038565b95602085013595506040909401359392505050565b60008060006060848603121561313157600080fd5b833561313c81613038565b9250602084013561314c81613038565b929592945050506040919091013590565b60006020828403121561316f57600080fd5b5035919050565b6000806000806080858703121561318c57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156131bb57600080fd5b82356131c681613038565b9150602083013580151581146131db57600080fd5b809150509250929050565b600080604083850312156131f957600080fd5b823561320481613038565b915060208301356131db81613038565b600181811c9082168061322857607f821691505b60208210810361324857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613283565b6000826132cd57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613283565b81810381811115610c0857610c08613283565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133fd57600080fd5b8151610d8f81613038565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134585784516001600160a01b031683529383019391830191600101613433565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561348e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209818972515b0858510eb66418ef1fc93c257491c802fd38c63ae7d087a228cd064736f6c63430008120033

Deployed Bytecode Sourcemap

8348:20286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8846:46;;;;;;;;;;-1:-1:-1;8846:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;548:25:1;;;536:2;521:18;8846:46:0;;;;;;;;1890:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8504:27::-;;;;;;;;;;-1:-1:-1;8504:27:0;;;;-1:-1:-1;;;;;8504:27:0;;;;;;-1:-1:-1;;;;;1319:32:1;;;1301:51;;1289:2;1274:18;8504:27:0;1137:221:1;2870:194:0;;;;;;;;;;-1:-1:-1;2870:194:0;;;;;:::i;:::-;;:::i;:::-;;;1848:14:1;;1841:22;1823:41;;1811:2;1796:18;2870:194:0;1683:187:1;16533:482:0;;;;;;;;;;-1:-1:-1;16533:482:0;;;;;:::i;:::-;;:::i;:::-;;2211:108;;;;;;;;;;-1:-1:-1;2299:12:0;;2211:108;;9588:33;;;;;;;;;;;;;;;;9662:28;;;;;;;;;;;;;;;;9548:33;;;;;;;;;;;;;;;;3072:529;;;;;;;;;;-1:-1:-1;3072:529:0;;;;;:::i;:::-;;:::i;12674:242::-;;;;;;;;;;;;;:::i;13358:312::-;;;;;;;;;;-1:-1:-1;13358:312:0;;;;;:::i;:::-;;:::i;16017:504::-;;;;;;;;;;-1:-1:-1;16017:504:0;;;;;:::i;:::-;;:::i;2110:93::-;;;;;;;;;;-1:-1:-1;2110:93:0;;2193:2;3441:36:1;;3429:2;3414:18;2110:93:0;3299:184:1;3609:290:0;;;;;;;;;;-1:-1:-1;3609:290:0;;;;;:::i;:::-;;:::i;8679:25::-;;;;;;;;;;-1:-1:-1;8679:25:0;;;;-1:-1:-1;;;;;8679:25:0;;;8962:33;;;;;;;;;;-1:-1:-1;8962:33:0;;;;;;;;28237:197;;;;;;;;;;-1:-1:-1;28237:197:0;;;;;:::i;:::-;;:::i;8749:36::-;;;;;;;;;;;;;;;;8792:47;;;;;;;;;;-1:-1:-1;8792:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27943:286;;;;;;;;;;-1:-1:-1;27943:286:0;;;;;:::i;:::-;;:::i;8430:28::-;;;;;;;;;;;;;;;;9370;;;;;;;;;;;;;;;;8899:25;;;;;;;;;;;;;;;;9042:31;;;;;;;;;;-1:-1:-1;9042:31:0;;;;;;;;;;;2327:143;;;;;;;;;;-1:-1:-1;2327:143:0;;;;;:::i;:::-;;:::i;6876:150::-;;;;;;;;;;;;;:::i;13041:203::-;;;;;;;;;;;;;:::i;15061:328::-;;;;;;;;;;-1:-1:-1;15061:328:0;;;;;:::i;:::-;;:::i;9231:30::-;;;;;;;;;;;;;;;;8538:28;;;;;;;;;;-1:-1:-1;8538:28:0;;;;-1:-1:-1;;;;;8538:28:0;;;9758:48;;;;;;;;;;-1:-1:-1;9758:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8396:27;;;;;;;;;;;;;;;;6662:79;;;;;;;;;;-1:-1:-1;6727:6:0;;-1:-1:-1;;;;;6727:6:0;6662:79;;9405:31;;;;;;;;;;;;;;;;1998:104;;;;;;;;;;;;;:::i;15397:364::-;;;;;;;;;;-1:-1:-1;15397:364:0;;;;;:::i;:::-;;:::i;9305:24::-;;;;;;;;;;;;;;;;9628:27;;;;;;;;;;;;;;;;9481:25;;;;;;;;;;;;;;;;3907:475;;;;;;;;;;-1:-1:-1;3907:475:0;;;;;:::i;:::-;;:::i;8641:31::-;;;;;;;;;;-1:-1:-1;8641:31:0;;;;-1:-1:-1;;;;;8641:31:0;;;2478:200;;;;;;;;;;-1:-1:-1;2478:200:0;;;;;:::i;:::-;;:::i;8465:30::-;;;;;;;;;;;;;;;;23668:116;;;;;;;;;;-1:-1:-1;23759:17:0;;23744:12;:32;23668:116;;9513:26;;;;;;;;;;;;;;;;9813:57;;;;;;;;;;-1:-1:-1;9813:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9002:33;;;;;;;;;;-1:-1:-1;9002:33:0;;;;;;;;;;;17546:182;;;;;;;;;;-1:-1:-1;17546:182:0;;;;;:::i;:::-;;:::i;14003:327::-;;;;;;;;;;-1:-1:-1;14003:327:0;;;;;:::i;:::-;;:::i;12924:109::-;;;;;;;;;;-1:-1:-1;12924:109:0;;;;;:::i;:::-;;:::i;9151:39::-;;;;;;;;;;-1:-1:-1;9151:39:0;;;;;;;;8711:31;;;;;;;;;;;;;;;;14400:428;;;;;;;;;;-1:-1:-1;14400:428:0;;;;;:::i;:::-;;:::i;9197:27::-;;;;;;;;;;;;;;;;13678:317;;;;;;;;;;-1:-1:-1;13678:317:0;;;;;:::i;:::-;;:::i;2686:176::-;;;;;;;;;;-1:-1:-1;2686:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2827:18:0;;;2800:7;2827:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2686:176;8601:33;;;;;;;;;;;;;;;;9336:25;;;;;;;;;;;;;;;;17023:515;;;;;;;;;;-1:-1:-1;17023:515:0;;;;;:::i;:::-;;:::i;13252:98::-;;;;;;;;;;;;;:::i;9268:30::-;;;;;;;;;;;;;;;;7034:281;;;;;;;;;;-1:-1:-1;7034:281:0;;;;;:::i;:::-;;:::i;28446:185::-;;;;;;;;;;;;;:::i;9443:31::-;;;;;;;;;;;;;;;;1890:100;1944:13;1977:5;1970:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:100;:::o;2870:194::-;2978:4;2995:39;305:10;3018:7;3027:6;2995:8;:39::i;:::-;-1:-1:-1;3052:4:0;2870:194;;;;;:::o;16533:482::-;16706:18;;16678:24;16696:4;16678:9;:24::i;:::-;:46;;16656:132;;;;-1:-1:-1;;;16656:132:0;;5097:2:1;16656:132:0;;;5079:21:1;5136:2;5116:18;;;5109:30;5175:34;5155:18;;;5148:62;-1:-1:-1;;;5226:18:1;;;5219:34;5270:19;;16656:132:0;;;;;;;;;16803:58;16822:7;16845:5;16852:8;16803:18;:58::i;:::-;16799:209;;;16878:8;:15;;-1:-1:-1;;;;16878:15:0;-1:-1:-1;;;16878:15:0;;;16908:10;:8;:10::i;:::-;16933:8;:16;;-1:-1:-1;;;;16933:16:0;;;16969:27;;16980:15;548:25:1;;16969:27:0;;536:2:1;521:18;16969:27:0;;;;;;;16799:209;16533:482;;;:::o;3072:529::-;3212:4;3229:36;3239:6;3247:9;3258:6;3229:9;:36::i;:::-;-1:-1:-1;;;;;3305:19:0;;3278:24;3305:19;;;:11;:19;;;;;;;;305:10;3305:33;;;;;;;;3371:26;;;;3349:116;;;;-1:-1:-1;;;3349:116:0;;5502:2:1;3349:116:0;;;5484:21:1;5541:2;5521:18;;;5514:30;5580:34;5560:18;;;5553:62;-1:-1:-1;;;5631:18:1;;;5624:38;5679:19;;3349:116:0;5300:404:1;3349:116:0;3501:57;3510:6;305:10;3551:6;3532:16;:25;3501:8;:57::i;:::-;3589:4;3582:11;;;3072:529;;;;;;:::o;12674:242::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;12737:13:::1;::::0;::::1;::::0;::::1;;;12736:14;12728:50;;;::::0;-1:-1:-1;;;12728:50:0;;6272:2:1;12728:50:0::1;::::0;::::1;6254:21:1::0;6311:2;6291:18;;;6284:30;6350:25;6330:18;;;6323:53;6393:18;;12728:50:0::1;6070:347:1::0;12728:50:0::1;12789:13;:20:::0;;-1:-1:-1;;12820:18:0;;;;;12864:12:::1;12849;:27:::0;12892:16:::1;::::0;::::1;::::0;-1:-1:-1;;12892:16:0::1;12674:242::o:0;13358:312::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;13495:4:::1;13487;13466:13;2299:12:::0;;;2211:108;13466:13:::1;:17;::::0;13482:1:::1;13466:17;:::i;:::-;13465:26;;;;:::i;:::-;13464:35;;;;:::i;:::-;13454:6;:45;;13432:136;;;::::0;-1:-1:-1;;;13432:136:0;;7151:2:1;13432:136:0::1;::::0;::::1;7133:21:1::0;7190:2;7170:18;;;7163:30;7229:34;7209:18;;;7202:62;-1:-1:-1;;;7280:18:1;;;7273:39;7329:19;;13432:136:0::1;6949:405:1::0;13432:136:0::1;13594:19;:6:::0;13604:8:::1;13594:19;:::i;:::-;13579:12;:34:::0;;;13629:33:::1;::::0;548:25:1;;;13629:33:0::1;::::0;536:2:1;521:18;13629:33:0::1;;;;;;;;13358:312:::0;:::o;16017:504::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;16194:15:::1;:31:::0;;;16236:15:::1;:31:::0;;;16278:9:::1;:19:::0;;;16308:10:::1;:21:::0;;;16321:8;16290:7;16368:46:::1;16254:13:::0;16212;16368:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16340:12;:125:::0;;;16500:1:::1;-1:-1:-1::0;16484:17:0::1;16476:37;;;::::0;-1:-1:-1;;;16476:37:0;;7691:2:1;16476:37:0::1;::::0;::::1;7673:21:1::0;7730:1;7710:18;;;7703:29;-1:-1:-1;;;7748:18:1;;;7741:37;7795:18;;16476:37:0::1;7489:330:1::0;16476:37:0::1;16017:504:::0;;;;:::o;3609:290::-;305:10;3722:4;3811:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3811:34:0;;;;;;;;;;3722:4;;3739:130;;3789:7;;3811:47;;3848:10;;3811:47;:::i;:::-;3739:8;:130::i;28237:197::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28321:25:0;::::1;28313:69;;;::::0;-1:-1:-1;;;28313:69:0;;8026:2:1;28313:69:0::1;::::0;::::1;8008:21:1::0;8065:2;8045:18;;;8038:30;8104:33;8084:18;;;8077:61;8155:18;;28313:69:0::1;7824:355:1::0;28313:69:0::1;28393:10;:33:::0;;-1:-1:-1;;;;;;28393:33:0::1;-1:-1:-1::0;;;;;28393:33:0;;;::::1;::::0;;;::::1;::::0;;28237:197::o;27943:286::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28069:31:0;::::1;28047:118;;;::::0;-1:-1:-1;;;28047:118:0;;8386:2:1;28047:118:0::1;::::0;::::1;8368:21:1::0;8425:2;8405:18;;;8398:30;8464:34;8444:18;;;8437:62;-1:-1:-1;;;8515:18:1;;;8508:35;8560:19;;28047:118:0::1;8184:401:1::0;28047:118:0::1;28176:16;:45:::0;;-1:-1:-1;;;;;;28176:45:0::1;-1:-1:-1::0;;;;;28176:45:0;;;::::1;::::0;;;::::1;::::0;;27943:286::o;2327:143::-;-1:-1:-1;;;;;2444:18:0;2417:7;2444:18;;;;;;;;;;;;2327:143::o;6876:150::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;6969:6:::1;::::0;6948:40:::1;::::0;6985:1:::1;::::0;-1:-1:-1;;;;;6969:6:0::1;::::0;6948:40:::1;::::0;6985:1;;6948:40:::1;6999:6;:19:::0;;-1:-1:-1;;;;;;6999:19:0::1;::::0;;6876:150::o;13041:203::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;2299:12;;13095::::1;:28:::0;2299:12;;13134:13:::1;:29:::0;2299:12;;13174:15:::1;:31:::0;13221:15:::1;::::0;::::1;::::0;;;::::1;13041:203::o:0;15061:328::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;15183:4:::1;15178:162;;15240:13;::::0;-1:-1:-1;;;;;15240:13:0;;::::1;15230:23:::0;;::::1;::::0;15204:124:::1;;;::::0;-1:-1:-1;;;15204:124:0;;8792:2:1;15204:124:0::1;::::0;::::1;8774:21:1::0;8831:2;8811:18;;;8804:30;8870:34;8850:18;;;8843:62;-1:-1:-1;;;8921:18:1;;;8914:37;8968:19;;15204:124:0::1;8590:403:1::0;15204:124:0::1;-1:-1:-1::0;;;;;15350:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15350:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15061:328::o;1998:104::-;2054:13;2087:7;2080:14;;;;;:::i;15397:364::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;15545:13:::1;::::0;-1:-1:-1;;;;;15545:13:0;;::::1;15537:21:::0;;::::1;::::0;15515:128:::1;;;::::0;-1:-1:-1;;;15515:128:0;;9200:2:1;15515:128:0::1;::::0;::::1;9182:21:1::0;9239:2;9219:18;;;9212:30;9278:34;9258:18;;;9251:62;9349:27;9329:18;;;9322:55;9394:19;;15515:128:0::1;8998:421:1::0;15515:128:0::1;15656:41;15685:4;15691:5;15656:28;:41::i;:::-;15713:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15713:40:0;::::1;::::0;::::1;::::0;;;::::1;15397:364:::0;;:::o;3907:475::-;305:10;4025:4;4069:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4069:34:0;;;;;;;;;;4136:35;;;;4114:122;;;;-1:-1:-1;;;4114:122:0;;9626:2:1;4114:122:0;;;9608:21:1;9665:2;9645:18;;;9638:30;9704:34;9684:18;;;9677:62;-1:-1:-1;;;9755:18:1;;;9748:35;9800:19;;4114:122:0;9424:401:1;4114:122:0;4272:67;305:10;4295:7;4323:15;4304:16;:34;4272:8;:67::i;:::-;-1:-1:-1;4370:4:0;;3907:475;-1:-1:-1;;;3907:475:0:o;2478:200::-;2589:4;2606:42;305:10;2630:9;2641:6;2606:9;:42::i;17546:182::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17631:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17631:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17686:34;;1823:41:1;;;17686:34:0::1;::::0;1796:18:1;17686:34:0::1;;;;;;;17546:182:::0;;:::o;14003:327::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;14143:4:::1;14135;14114:13;2299:12:::0;;;2211:108;14114:13:::1;:17;::::0;14130:1:::1;14114:17;:::i;:::-;14113:26;;;;:::i;:::-;14112:35;;;;:::i;:::-;14102:6;:45;;14080:139;;;::::0;-1:-1:-1;;;14080:139:0;;10032:2:1;14080:139:0::1;::::0;::::1;10014:21:1::0;10071:2;10051:18;;;10044:30;10110:34;10090:18;;;10083:62;-1:-1:-1;;;10161:18:1;;;10154:42;10213:19;;14080:139:0::1;9830:408:1::0;14080:139:0::1;14248:19;:6:::0;14258:8:::1;14248:19;:::i;:::-;14230:15;:37:::0;;;14283:39:::1;::::0;548:25:1;;;14283:39:0::1;::::0;536:2:1;521:18;14283:39:0::1;402:177:1::0;12924:109:0;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12994:23:0::1;13020:5;12994:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;12994:31:0::1;::::0;;12924:109::o;14400:428::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;14540:6:::1;14519:13;2299:12:::0;;;2211:108;14519:13:::1;:17;::::0;14535:1:::1;14519:17;:::i;:::-;14518:28;;;;:::i;:::-;14505:9;:41;;14483:144;;;::::0;-1:-1:-1;;;14483:144:0;;10445:2:1;14483:144:0::1;::::0;::::1;10427:21:1::0;10484:2;10464:18;;;10457:30;10523:34;10503:18;;;10496:62;-1:-1:-1;;;10574:18:1;;;10567:51;10635:19;;14483:144:0::1;10243:417:1::0;14483:144:0::1;14695:4;14674:13;2299:12:::0;;;2211:108;14674:13:::1;:17;::::0;14690:1:::1;14674:17;:::i;:::-;14673:26;;;;:::i;:::-;14660:9;:39;;14638:141;;;::::0;-1:-1:-1;;;14638:141:0;;10867:2:1;14638:141:0::1;::::0;::::1;10849:21:1::0;10906:2;10886:18;;;10879:30;10945:34;10925:18;;;10918:62;-1:-1:-1;;;10996:18:1;;;10989:50;11056:19;;14638:141:0::1;10665:416:1::0;14638:141:0::1;14790:18;:30:::0;14400:428::o;13678:317::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;13816:4:::1;13808;13787:13;2299:12:::0;;;2211:108;13787:13:::1;:17;::::0;13803:1:::1;13787:17;:::i;:::-;13786:26;;;;:::i;:::-;13785:35;;;;:::i;:::-;13775:6;:45;;13753:137;;;::::0;-1:-1:-1;;;13753:137:0;;11288:2:1;13753:137:0::1;::::0;::::1;11270:21:1::0;11327:2;11307:18;;;11300:30;11366:34;11346:18;;;11339:62;-1:-1:-1;;;11417:18:1;;;11410:40;11467:19;;13753:137:0::1;11086:406:1::0;13753:137:0::1;13917:19;:6:::0;13927:8:::1;13917:19;:::i;:::-;13901:13;:35:::0;;;13952::::1;::::0;548:25:1;;;13952:35:0::1;::::0;536:2:1;521:18;13952:35:0::1;402:177:1::0;17023:515:0;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;17201:16:::1;:32:::0;;;17244:16:::1;:32:::0;;;17287:10:::1;:20:::0;;;17318:11:::1;:22:::0;;;17332:8;17300:7;17380:48:::1;17263:13:::0;17220;17380:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;17351:13;:130:::0;;;17517:1:::1;-1:-1:-1::0;17500:18:0::1;17492:38;;;::::0;-1:-1:-1;;;17492:38:0;;7691:2:1;17492:38:0::1;::::0;::::1;7673:21:1::0;7730:1;7710:18;;;7703:29;-1:-1:-1;;;7748:18:1;;;7741:37;7795:18;;17492:38:0::1;7489:330:1::0;13252:98:0;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;13314:20:::1;:28:::0;;-1:-1:-1;;13314:28:0::1;::::0;;13252:98::o;7034:281::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7137:22:0;::::1;7115:110;;;::::0;-1:-1:-1;;;7115:110:0;;11699:2:1;7115:110:0::1;::::0;::::1;11681:21:1::0;11738:2;11718:18;;;11711:30;11777:34;11757:18;;;11750:62;-1:-1:-1;;;11828:18:1;;;11821:36;11874:19;;7115:110:0::1;11497:402:1::0;7115:110:0::1;7262:6;::::0;7241:38:::1;::::0;-1:-1:-1;;;;;7241:38:0;;::::1;::::0;7262:6:::1;::::0;7241:38:::1;::::0;7262:6:::1;::::0;7241:38:::1;7290:6;:17:::0;;-1:-1:-1;;;;;;7290:17:0::1;-1:-1:-1::0;;;;;7290:17:0;;;::::1;::::0;;;::::1;::::0;;7034:281::o;28446:185::-;6789:6;;-1:-1:-1;;;;;6789:6:0;305:10;6789:22;6781:67;;;;-1:-1:-1;;;6781:67:0;;;;;;;:::i;:::-;28541:82:::1;::::0;28504:12:::1;::::0;28549:10:::1;::::0;28573:21:::1;::::0;28504:12;28541:82;28504:12;28541:82;28573:21;28549:10;28541:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5931:380:::0;-1:-1:-1;;;;;6067:19:0;;6059:68;;;;-1:-1:-1;;;6059:68:0;;12316:2:1;6059:68:0;;;12298:21:1;12355:2;12335:18;;;12328:30;12394:34;12374:18;;;12367:62;-1:-1:-1;;;12445:18:1;;;12438:34;12489:19;;6059:68:0;12114:400:1;6059:68:0;-1:-1:-1;;;;;6146:21:0;;6138:68;;;;-1:-1:-1;;;6138:68:0;;12721:2:1;6138:68:0;;;12703:21:1;12760:2;12740:18;;;12733:30;12799:34;12779:18;;;12772:62;-1:-1:-1;;;12850:18:1;;;12843:32;12892:19;;6138:68:0;12519:398:1;6138:68:0;-1:-1:-1;;;;;6219:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6271:32;;548:25:1;;;6271:32:0;;521:18:1;6271:32:0;;;;;;;;5931:380;;;:::o;23793:1739::-;23988:10;23923:4;23968:31;;;:19;:31;;;;;;23923:4;;23968:31;;23963:1562;;24054:1;24038:13;;:17;:62;;;;;24087:13;;24059:24;24077:4;24059:9;:24::i;:::-;:41;;24038:62;24016:167;;;24135:32;24141:10;24153:13;;24135:5;:32::i;:::-;-1:-1:-1;24213:1:0;24197:13;:17;;;24239:4;;24284:24;24302:4;24284:9;:24::i;:::-;24258:50;;24323:25;24427:12;;24389:18;;24351;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;24323:116;-1:-1:-1;24458:20:0;;;:46;;-1:-1:-1;24482:22:0;;24458:46;24454:99;;;24532:5;24525:12;;;;;;;24454:99;24589:18;;:22;;24610:1;24589:22;:::i;:::-;24571:15;:40;24567:121;;;24650:18;;:22;;24671:1;24650:22;:::i;:::-;24632:40;;24567:121;24709:7;24702:14;;;;;;;23963:1562;24780:1;24753:24;24771:4;24753:9;:24::i;:::-;:28;24749:292;;;24806:5;24815:1;24806:10;24802:224;;-1:-1:-1;24841:8:0;:19;;;24893:5;24802:224;;;24947:21;24953:7;24962:5;24947;:21::i;:::-;-1:-1:-1;25001:5:0;24802:224;25055:23;25081:24;25099:4;25081:9;:24::i;26366:1569::-;26425:1;26409:13;;:17;:62;;;;;26458:13;;26430:24;26448:4;26430:9;:24::i;:::-;:41;;26409:62;26405:130;;;26488:35;26502:4;26509:13;;26488:5;:35::i;:::-;26561:1;26545:13;:17;;;26599:24;26617:4;26599:9;:24::i;:::-;26573:50;;26634:25;26730:12;;26696:18;;26662;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26634:108;-1:-1:-1;26759:20:0;;;:46;;-1:-1:-1;26783:22:0;;26759:46;26755:85;;;26822:7;;26366:1569::o;26755:85::-;26874:18;;:22;;26895:1;26874:22;:::i;:::-;26856:15;:40;26852:113;;;26931:18;;:22;;26952:1;26931:22;:::i;:::-;26913:40;;26852:113;26977:23;27077:1;27057:17;27022:18;;27004:15;:36;;;;:::i;:::-;27003:71;;;;:::i;:::-;:75;;;;:::i;:::-;26977:101;-1:-1:-1;27091:51:0;27108:33;26977:101;27108:15;:33;:::i;:::-;27091:16;:51::i;:::-;27352:18;;27176:21;;;;27155:18;;27352:22;;27373:1;;27352:22;:::i;:::-;27331:44;;:17;:44;:::i;:::-;27295:18;;27282:31;;:10;:31;:::i;:::-;27281:95;;;;:::i;:::-;27255:121;;27387:17;27493:1;27472:18;;:22;;;;:::i;:::-;27451:44;;:17;:44;:::i;:::-;27421:12;;27408:25;;:10;:25;:::i;:::-;27407:89;;;;:::i;:::-;27387:109;-1:-1:-1;27526:27:0;27387:109;27526:15;:27;:::i;:::-;27507:46;;;;:::i;:::-;27585:1;27564:18;:22;;;27597:18;:22;;;27630:12;:16;;;27657:13;:17;27507:46;-1:-1:-1;27691:19:0;;;;;:42;;;27732:1;27714:15;:19;27691:42;27687:121;;;27750:46;27763:15;27780;27750:12;:46::i;:::-;27828:10;;27820:39;;-1:-1:-1;;;;;27828:10:0;;;;27820:39;;;;;27849:9;;27828:10;27820:39;27828:10;27820:39;27849:9;27828:10;27820:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27878:16:0;;27870:57;;-1:-1:-1;;;;;27878:16:0;;;;27905:21;27870:57;;;;;27878:16;27870:57;27878:16;27870:57;27905:21;27878:16;27870:57;;;;;;;;;;;;;;;;;;;;;26394:1541;;;;;;;26366:1569::o;17736:5924::-;-1:-1:-1;;;;;17868:18:0;;17860:68;;;;-1:-1:-1;;;17860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17947:16:0;;17939:64;;;;-1:-1:-1;;;17939:64:0;;;;;;;:::i;:::-;18031:1;18022:6;:10;18014:52;;;;-1:-1:-1;;;18014:52:0;;14067:2:1;18014:52:0;;;14049:21:1;14106:2;14086:18;;;14079:30;14145:31;14125:18;;;14118:59;14194:18;;18014:52:0;13865:353:1;18014:52:0;18084:13;;;;;;;18079:183;;-1:-1:-1;;;;;18140:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;18169:23:0;;;;;;:19;:23;;;;;;;;18140:52;18114:136;;;;-1:-1:-1;;;18114:136:0;;14425:2:1;18114:136:0;;;14407:21:1;14464:2;14444:18;;;14437:30;-1:-1:-1;;;14483:18:1;;;14476:52;14545:18;;18114:136:0;14223:346:1;18114:136:0;18278:17;;:21;18274:257;;-1:-1:-1;;;;;18343:21:0;;;;;;:15;:21;;;;;;;;18342:22;;:60;;-1:-1:-1;6727:6:0;;-1:-1:-1;;;;;18389:13:0;;;6727:6;;18389:13;18342:60;:106;;;-1:-1:-1;;;;;;18427:21:0;;18441:6;18427:21;18342:106;18316:203;;;;-1:-1:-1;;;18316:203:0;;14776:2:1;18316:203:0;;;14758:21:1;14815:2;14795:18;;;14788:30;14854:34;14834:18;;;14827:62;-1:-1:-1;;;14905:18:1;;;14898:33;14948:19;;18316:203:0;14574:399:1;18316:203:0;18547:14;;;;18543:2368;;;6727:6;;-1:-1:-1;;;;;18600:15:0;;;6727:6;;18600:15;;;;:49;;-1:-1:-1;6727:6:0;;-1:-1:-1;;;;;18636:13:0;;;6727:6;;18636:13;;18600:49;:86;;;;-1:-1:-1;;;;;;18670:16:0;;;;18600:86;:128;;;;-1:-1:-1;;;;;;18707:21:0;;18721:6;18707:21;;18600:128;:175;;;;-1:-1:-1;;;;;;18750:25:0;;;;;;:19;:25;;;;;;;;18749:26;18600:175;:220;;;;-1:-1:-1;;;;;;18797:23:0;;;;;;:19;:23;;;;;;;;18796:24;18600:220;18578:1326;;;18859:20;;;;18855:1034;;;18948:9;;-1:-1:-1;;;;;18934:24:0;;;18948:9;;18934:24;;;;:56;;-1:-1:-1;18976:13:0;;-1:-1:-1;;;;;18962:28:0;;;18976:13;;18962:28;;18934:56;18904:966;;;19154:16;19169:1;19154:12;:16;:::i;:::-;19108:9;19079:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;19275:16:0;19290:1;19275:12;:16;:::i;:::-;-1:-1:-1;;;;;19207:32:0;;;;;;:28;:32;;;;;;:84;19079:212;19041:363;;;;-1:-1:-1;;;19041:363:0;;;;;;;:::i;:::-;19460:9;19431:39;;;;:28;:39;;;;;;19473:12;19431:54;;;;-1:-1:-1;;;;;19512:32:0;;;;;;:47;18904:966;;;19594:8;;-1:-1:-1;;;19594:8:0;;;;19593:9;:45;;;;-1:-1:-1;;;;;;19607:31:0;;;;;;:25;:31;;;;;;;;19606:32;19593:45;19589:281;;;19725:8;;-1:-1:-1;;;;;19705:17:0;;;;;;:11;:17;;;;;;:28;19667:179;;;;-1:-1:-1;;;19667:179:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19924:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;19960:20:0;;;;;;:16;:20;;;;;;;;19959:21;19924:56;19920:980;;;20041:12;;20031:6;:22;;20001:136;;;;-1:-1:-1;;;20001:136:0;;15602:2:1;20001:136:0;;;15584:21:1;15641:2;15621:18;;;15614:30;15680:34;15660:18;;;15653:62;-1:-1:-1;;;15731:18:1;;;15724:38;15779:19;;20001:136:0;15400:404:1;20001:136:0;20212:15;;20195:13;20205:2;20195:9;:13::i;:::-;20186:22;;:6;:22;:::i;:::-;:41;;20156:139;;;;-1:-1:-1;;;20156:139:0;;16011:2:1;20156:139:0;;;15993:21:1;16050:2;16030:18;;;16023:30;16089:26;16069:18;;;16062:54;16133:18;;20156:139:0;15809:348:1;20156:139:0;19920:980;;;-1:-1:-1;;;;;20339:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;20373:22:0;;;;;;:16;:22;;;;;;;;20372:23;20339:56;20317:583;;;20470:13;;20460:6;:23;;20430:139;;;;-1:-1:-1;;;20430:139:0;;16364:2:1;20430:139:0;;;16346:21:1;16403:2;16383:18;;;16376:30;16442:34;16422:18;;;16415:62;-1:-1:-1;;;16493:18:1;;;16486:40;16543:19;;20430:139:0;16162:406:1;20317:583:0;-1:-1:-1;;;;;20596:20:0;;;;;;:16;:20;;;;;;;;20591:309;;20693:15;;20676:13;20686:2;20676:9;:13::i;20591:309::-;20803:8;;-1:-1:-1;;;20803:8:0;;;;20802:9;:35;;;;-1:-1:-1;;;;;;20815:22:0;;;;;;:16;:22;;;;;;;;20802:35;20798:102;;;20869:15;20858:8;:26;20798:102;20923:28;20954:24;20972:4;20954:9;:24::i;:::-;21030:18;;20923:55;;-1:-1:-1;21006:42:0;;;;;;;21079:35;;-1:-1:-1;21103:11:0;;;;;;;21079:35;:61;;;;-1:-1:-1;21132:8:0;;-1:-1:-1;;;21132:8:0;;;;21131:9;21079:61;:110;;;;-1:-1:-1;;;;;;21158:31:0;;;;;;:25;:31;;;;;;;;21157:32;21079:110;:153;;;;-1:-1:-1;;;;;;21207:25:0;;;;;;:19;:25;;;;;;;;21206:26;21079:153;:194;;;;-1:-1:-1;;;;;;21250:23:0;;;;;;:19;:23;;;;;;;;21249:24;21079:194;21061:322;;;21300:8;:15;;-1:-1:-1;;;;21300:15:0;-1:-1:-1;;;21300:15:0;;;21330:10;:8;:10::i;:::-;21355:8;:16;;-1:-1:-1;;;;21355:16:0;;;21061:322;-1:-1:-1;;;;;21431:25:0;;21395:12;21431:25;;;:19;:25;;;;;;21410:4;;21431:25;;;:52;;-1:-1:-1;;;;;;21460:23:0;;;;;;:19;:23;;;;;;;;21431:52;21427:100;;;-1:-1:-1;21510:5:0;21427:100;-1:-1:-1;;;;;21541:31:0;;;;;;:25;:31;;;;;;;;:55;;;;-1:-1:-1;;;;;;21576:15:0;;;;;;:11;:15;;;;;;:20;21541:55;21537:190;;;21619:22;21637:2;21619:9;:22::i;:::-;21645:1;21619:27;21615:101;;-1:-1:-1;;;;;21666:15:0;;;;;;:11;:15;;;;;21684;21666:33;;21615:101;21739:12;21772:7;21768:1839;;;23759:17;;23744:12;:32;21818:73;;;;-1:-1:-1;;;;;;21860:31:0;;;;;;:25;:31;;;;;;;;21818:73;:124;;;;-1:-1:-1;;;;;;21913:29:0;;;;;;:25;:29;;;;;;;;21912:30;21818:124;:161;;;;;21978:1;21963:12;;:16;21818:161;21796:1666;;;-1:-1:-1;;;;;22019:19:0;;;;;;:15;:19;;;;;;;;22014:186;;-1:-1:-1;;;;;22063:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;22063:26:0;22085:4;22063:26;;;;;;22112:10;:15;;22085:4;;22112:10;;:15;;22085:4;;22112:15;:::i;:::-;;;;-1:-1:-1;;22155:25:0;;-1:-1:-1;;;;;1319:32:1;;1301:51;;22155:25:0;;1289:2:1;1274:18;22155:25:0;;;;;;;22014:186;22243:3;22228:11;:6;22237:2;22228:11;:::i;:::-;22227:19;;;;:::i;:::-;22220:26;;22314:12;;22295:15;;22288:4;:22;;;;:::i;:::-;22287:39;;;;:::i;:::-;22265:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22394:12:0;;22375:15;;22368:22;;:4;:22;:::i;:::-;22367:39;;;;:::i;:::-;22345:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22462:12:0;;22449:9;;22442:16;;:4;:16;:::i;:::-;22441:33;;;;:::i;:::-;22425:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22532:12:0;;22518:10;;22511:17;;:4;:17;:::i;:::-;22510:34;;;;:::i;:::-;22493:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;21796:1666:0;;-1:-1:-1;21796:1666:0;;-1:-1:-1;;;;;22585:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22634:1;22618:13;;:17;22585:50;22581:881;;;22690:3;22673:13;;22664:6;:22;;;;:::i;:::-;22663:30;;;;:::i;:::-;22656:37;;22762:13;;22742:16;;22735:4;:23;;;;:::i;:::-;22734:41;;;;:::i;:::-;22712:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22844:13:0;;22824:16;;22817:23;;:4;:23;:::i;:::-;22816:41;;;;:::i;:::-;22794:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22914:13:0;;22900:10;;22893:17;;:4;:17;:::i;:::-;22892:35;;;;:::i;:::-;22876:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22986:13:0;;22971:11;;22964:18;;:4;:18;:::i;22581:881::-;-1:-1:-1;;;;;23040:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23090:1;23075:12;;:16;23040:51;23036:426;;;23145:3;23129:12;;23120:6;:21;;;;:::i;:::-;23119:29;;;;:::i;:::-;23112:36;;23216:12;;23197:15;;23190:4;:22;;;;:::i;:::-;23189:39;;;;:::i;:::-;23167:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23296:12:0;;23277:15;;23270:22;;:4;:22;:::i;:::-;23269:39;;;;:::i;:::-;23247:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23364:12:0;;23351:9;;23344:16;;:4;:16;:::i;:::-;23343:33;;;;:::i;:::-;23327:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;23434:12:0;;23420:10;;23413:17;;:4;:17;:::i;:::-;23412:34;;;;:::i;:::-;23395:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;23036:426:0;23480:8;;23476:91;;23509:42;23525:4;23539;23546;23509:15;:42::i;:::-;23581:14;23591:4;23581:14;;:::i;:::-;;;21768:1839;23619:33;23635:4;23641:2;23645:6;23619:15;:33::i;:::-;17849:5811;;;;17736:5924;;;:::o;15769:240::-;-1:-1:-1;;;;;15852:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15852:39:0;;;;;;;15904;15852:31;:39;15904:26;:39::i;5373:550::-;-1:-1:-1;;;;;5457:21:0;;5449:67;;;;-1:-1:-1;;;5449:67:0;;16775:2:1;5449:67:0;;;16757:21:1;16814:2;16794:18;;;16787:30;16853:34;16833:18;;;16826:62;-1:-1:-1;;;16904:18:1;;;16897:31;16945:19;;5449:67:0;16573:397:1;5449:67:0;-1:-1:-1;;;;;5552:18:0;;5527:22;5552:18;;;;;;;;;;;5589:24;;;;5581:71;;;;-1:-1:-1;;;5581:71:0;;17177:2:1;5581:71:0;;;17159:21:1;17216:2;17196:18;;;17189:30;17255:34;17235:18;;;17228:62;-1:-1:-1;;;17306:18:1;;;17299:32;17348:19;;5581:71:0;16975:398:1;5581:71:0;-1:-1:-1;;;;;5688:18:0;;:9;:18;;;;;;;;;;;5709:23;;;5688:44;;5827:12;:22;;;;;;;5878:37;548:25:1;;;5688:9:0;;:18;5878:37;;521:18:1;5878:37:0;402:177:1;25540:454:0;25630:16;;;25644:1;25630:16;;;;;;;;25606:21;;25630:16;;;;;;;;;;-1:-1:-1;25630:16:0;25606:40;;25675:4;25657;25662:1;25657:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25657:23:0;;;:7;;;;;;;;;;:23;;;;25701:9;;:16;;;-1:-1:-1;;;25701:16:0;;;;:9;;;;;:14;;:16;;;;;25657:7;;25701:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25691:4;25696:1;25691:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25691:26:0;;;:7;;;;;;;;;:26;25760:9;;25728:56;;25745:4;;25760:9;25772:11;25728:8;:56::i;:::-;25795:9;;:191;;-1:-1:-1;;;25795:191:0;;-1:-1:-1;;;;;25795:9:0;;;;:60;;:191;;25870:11;;25795:9;;25913:4;;25940;;25960:15;;25795:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25595:399;25540:454;:::o;26002:356::-;26115:9;;26083:56;;26100:4;;-1:-1:-1;;;;;26115:9:0;26127:11;26083:8;:56::i;:::-;26150:9;;:200;;-1:-1:-1;;;26150:200:0;;26216:4;26150:200;;;19224:34:1;19274:18;;;19267:34;;;26150:9:0;19317:18:1;;;19310:34;;;19360:18;;;19353:34;26302:6:0;19403:19:1;;;19396:44;26324:15:0;19456:19:1;;;19449:35;-1:-1:-1;;;;;26150:9:0;;;;:25;;26183:9;;19158:19:1;;26150:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26002:356;;:::o;4390:651::-;-1:-1:-1;;;;;4530:20:0;;4522:70;;;;-1:-1:-1;;;4522:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4611:23:0;;4603:71;;;;-1:-1:-1;;;4603:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4711:17:0;;4687:21;4711:17;;;;;;;;;;;4761:23;;;;4739:111;;;;-1:-1:-1;;;4739:111:0;;20008:2:1;4739:111:0;;;19990:21:1;20047:2;20027:18;;;20020:30;20086:34;20066:18;;;20059:62;-1:-1:-1;;;20137:18:1;;;20130:36;20183:19;;4739:111:0;19806:402:1;4739:111:0;-1:-1:-1;;;;;4886:17:0;;;:9;:17;;;;;;;;;;;4906:22;;;4886:42;;4950:20;;;;;;;;:30;;4922:6;;4886:9;4950:30;;4922:6;;4950:30;:::i;:::-;;;;;;;;5015:9;-1:-1:-1;;;;;4998:35:0;5007:6;-1:-1:-1;;;;;4998:35:0;;5026:6;4998:35;;;;548:25:1;;536:2;521:18;;402:177;4998:35:0;;;;;;;;4511:530;4390:651;;;:::o;14836:217::-;-1:-1:-1;;;;;14949:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;14949:37:0;;;;;;;;;;15002:43;;20381:51:1;;;20448:18;;;20441:50;15002:43:0;;20354:18:1;15002:43:0;;;;;;;14836:217;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1363:315::-;1431:6;1439;1492:2;1480:9;1471:7;1467:23;1463:32;1460:52;;;1508:1;1505;1498:12;1460:52;1547:9;1534:23;1566:31;1591:5;1566:31;:::i;:::-;1616:5;1668:2;1653:18;;;;1640:32;;-1:-1:-1;;;1363:315:1:o;1875:383::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;2197:2;2182:18;;2169:32;;-1:-1:-1;2248:2:1;2233:18;;;2220:32;;1875:383;-1:-1:-1;;;1875:383:1:o;2263:456::-;2340:6;2348;2356;2409:2;2397:9;2388:7;2384:23;2380:32;2377:52;;;2425:1;2422;2415:12;2377:52;2464:9;2451:23;2483:31;2508:5;2483:31;:::i;:::-;2533:5;-1:-1:-1;2590:2:1;2575:18;;2562:32;2603:33;2562:32;2603:33;:::i;:::-;2263:456;;2655:7;;-1:-1:-1;;;2709:2:1;2694:18;;;;2681:32;;2263:456::o;2724:180::-;2783:6;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;-1:-1:-1;2875:23:1;;2724:180;-1:-1:-1;2724:180:1:o;2909:385::-;2995:6;3003;3011;3019;3072:3;3060:9;3051:7;3047:23;3043:33;3040:53;;;3089:1;3086;3079:12;3040:53;-1:-1:-1;;3112:23:1;;;3182:2;3167:18;;3154:32;;-1:-1:-1;3233:2:1;3218:18;;3205:32;;3284:2;3269:18;3256:32;;-1:-1:-1;2909:385:1;-1:-1:-1;2909:385:1:o;3696:416::-;3761:6;3769;3822:2;3810:9;3801:7;3797:23;3793:32;3790:52;;;3838:1;3835;3828:12;3790:52;3877:9;3864:23;3896:31;3921:5;3896:31;:::i;:::-;3946:5;-1:-1:-1;4003:2:1;3988:18;;3975:32;4045:15;;4038:23;4026:36;;4016:64;;4076:1;4073;4066:12;4016:64;4099:7;4089:17;;;3696:416;;;;;:::o;4117:388::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4301:9;4288:23;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:1;4412:18;;4399:32;4440:33;4399:32;4440:33;:::i;4510:380::-;4589:1;4585:12;;;;4632;;;4653:61;;4707:4;4699:6;4695:17;4685:27;;4653:61;4760:2;4752:6;4749:14;4729:18;4726:38;4723:161;;4806:10;4801:3;4797:20;4794:1;4787:31;4841:4;4838:1;4831:15;4869:4;4866:1;4859:15;4723:161;;4510:380;;;:::o;5709:356::-;5911:2;5893:21;;;5930:18;;;5923:30;5989:34;5984:2;5969:18;;5962:62;6056:2;6041:18;;5709:356::o;6422:127::-;6483:10;6478:3;6474:20;6471:1;6464:31;6514:4;6511:1;6504:15;6538:4;6535:1;6528:15;6554:168;6627:9;;;6658;;6675:15;;;6669:22;;6655:37;6645:71;;6696:18;;:::i;6727:217::-;6767:1;6793;6783:132;;6837:10;6832:3;6828:20;6825:1;6818:31;6872:4;6869:1;6862:15;6900:4;6897:1;6890:15;6783:132;-1:-1:-1;6929:9:1;;6727:217::o;7359:125::-;7424:9;;;7445:10;;;7442:36;;;7458:18;;:::i;12922:128::-;12989:9;;;13010:11;;;13007:37;;;13024:18;;:::i;13055:401::-;13257:2;13239:21;;;13296:2;13276:18;;;13269:30;13335:34;13330:2;13315:18;;13308:62;-1:-1:-1;;;13401:2:1;13386:18;;13379:35;13446:3;13431:19;;13055:401::o;13461:399::-;13663:2;13645:21;;;13702:2;13682:18;;;13675:30;13741:34;13736:2;13721:18;;13714:62;-1:-1:-1;;;13807:2:1;13792:18;;13785:33;13850:3;13835:19;;13461:399::o;14978:417::-;15180:2;15162:21;;;15219:2;15199:18;;;15192:30;15258:34;15253:2;15238:18;;15231:62;-1:-1:-1;;;15324:2:1;15309:18;;15302:51;15385:3;15370:19;;14978:417::o;17510:127::-;17571:10;17566:3;17562:20;17559:1;17552:31;17602:4;17599:1;17592:15;17626:4;17623:1;17616:15;17642:251;17712:6;17765:2;17753:9;17744:7;17740:23;17736:32;17733:52;;;17781:1;17778;17771:12;17733:52;17813:9;17807:16;17832:31;17857:5;17832:31;:::i;17898:980::-;18160:4;18208:3;18197:9;18193:19;18239:6;18228:9;18221:25;18265:2;18303:6;18298:2;18287:9;18283:18;18276:34;18346:3;18341:2;18330:9;18326:18;18319:31;18370:6;18405;18399:13;18436:6;18428;18421:22;18474:3;18463:9;18459:19;18452:26;;18513:2;18505:6;18501:15;18487:29;;18534:1;18544:195;18558:6;18555:1;18552:13;18544:195;;;18623:13;;-1:-1:-1;;;;;18619:39:1;18607:52;;18714:15;;;;18679:12;;;;18655:1;18573:9;18544:195;;;-1:-1:-1;;;;;;;18795:32:1;;;;18790:2;18775:18;;18768:60;-1:-1:-1;;;18859:3:1;18844:19;18837:35;18756:3;17898:980;-1:-1:-1;;;17898:980:1:o;19495:306::-;19583:6;19591;19599;19652:2;19640:9;19631:7;19627:23;19623:32;19620:52;;;19668:1;19665;19658:12;19620:52;19697:9;19691:16;19681:26;;19747:2;19736:9;19732:18;19726:25;19716:35;;19791:2;19780:9;19776:18;19770:25;19760:35;;19495:306;;;;;:::o

Swarm Source

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