ETH Price: $3,624.89 (-0.04%)
 

Overview

Max Total Supply

420,690,000,000,000 MIND

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
419,093,122,594.050099597842542854 MIND

Value
$0.00
0x79bda16cc6864b1ef29582099454eb32681bc19f
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:
MIND

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-09
*/

// SPDX-License-Identifier: MIT
/*                          
    Website : https://mindviscosity.io/
    X       : https://x.com/MindviscosETH
    Telegram: https://t.me/MindviscosityonETH
 */
pragma solidity 0.8.19;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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 _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(
        bool confirmRenounce
    ) external virtual onlyOwner {
        require(confirmRenounce, "Please confirm renounce!");
        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 ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

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

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

contract MIND is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public markedAsSniper;
    address[] public sniperBuyers;
    uint256 public snipersCaught;

    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 buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("Mindviscosity", "MIND") {
        address newOwner = msg.sender;  

        uint256 totalSupply = 420690 * 1e9 * 1e18;

        buyOperationsFee = 40;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 40;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;        

        maxBuyAmount = (totalSupply * 2) / 100; // 2%
        maxSellAmount = (totalSupply * 2) / 100; // 2%
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        operationsAddress = address(0x2349E0C3629c01d11707D3A71235b577cc927E9D);

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

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);

        _createInitialSupply(address(this), (totalSupply * 83) / 100);
        _createInitialSupply(newOwner, (totalSupply * 17) / 100);

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

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

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

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }        

    function updateBuyTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
    }

    function updateSellTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

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

    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 (!checkEarlyBuyLimitActive() && tradingActive) {
            require(
                !markedAsSniper[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        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;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // bot/sniper penalty.
            if (
                (checkEarlyBuyLimitActive() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!checkEarlyBuyLimitActive()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if (!markedAsSniper[to]) {
                    markedAsSniper[to] = true;
                    snipersCaught += 1;
                    sniperBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function checkEarlyBuyLimitActive() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

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

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

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

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

        (success, ) = address(operationsAddress).call{
            value: address(this).balance
        }("");
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setOperationsAddress(
        address _operationsAddress
    ) external onlyOwner {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyOwner { 
        limitsInEffect = true;
    }

    function listSnipers() external view returns (address[] memory) {
        return sniperBuyers;
    }

    function flagSniper(address wallet) external onlyOwner {
        require(!markedAsSniper[wallet], "Wallet is already flagged.");
        markedAsSniper[wallet] = true;
    }    

    function unflagSniper(address wallet) external onlyOwner {
        require(markedAsSniper[wallet], "Wallet is already not marked.");
        markedAsSniper[wallet] = false;
    }    

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(
            blocksForPenalty <= 10,
            "Cannot make penalty blocks more than 10"
        );
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }     

    function prepLaunch() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");     

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 11155111) {
            _dexRouter = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008; // ETH: Sepolia
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if (block.chainid == 97) {
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if (block.chainid == 42161) {
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);        

        _excludeFromMaxTransaction(address(dexRouter), true);
        excludeFromFees(address(dexRouter), true);  

        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );           

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        ); 
    }     
    
    function airdropToWallets(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(
            wallets.length == amountsInTokens.length,
            "arrays must be the same length"
        );
        require(
            wallets.length < 200,
            "Can only airdrop 200 wallets per txn due to gas limits"
        ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"CaughtEarlyBuyer","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"blockForPenaltyEnd","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":"buyOperationsFee","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":"checkEarlyBuyLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRetrieval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listSnipers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","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":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sniperBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d9081556012805462ffffff191660019081179091556014805460ff1916909117905560809081526c4d696e64766973636f7369747960981b60a052610100604052600460c0908152631352539160e21b60e05260036200006483826200061b565b5060046200007382826200061b565b5050506000620000886200027f60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003db8833981519152908290a350602860168190556000601781905533916d14bddab3e51a57cff87a5000000091620000f091620006fd565b601555602860198190556000601a8190556200010c91620006fd565b60185560646200011e82600262000719565b6200012a919062000733565b60065560646200013c82600262000719565b62000148919062000733565b60075560646200015a82600262000719565b62000166919062000733565b6008556127106200017982600562000719565b62000185919062000733565b600b55600c80546001600160a01b031916732349e0c3629c01d11707d3a71235b577cc927e9d179055620001bb82600162000283565b620001c830600162000283565b620001d761dead600162000283565b600c54620001f0906001600160a01b0316600162000283565b620001fd826001620002e6565b6200020a306001620002e6565b6200021961dead6001620002e6565b600c5462000232906001600160a01b03166001620002e6565b620002583060646200024684605362000719565b62000252919062000733565b62000394565b6200026c8260646200024684601162000719565b620002778262000479565b505062000756565b3390565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620003355760405162461bcd60e51b8152602060048201819052602482015260008051602062003d9883398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620003ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200032c565b8060026000828254620004009190620006fd565b90915550506001600160a01b038216600090815260208190526040812080548392906200042f908490620006fd565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620004c45760405162461bcd60e51b8152602060048201819052602482015260008051602062003d9883398151915260448201526064016200032c565b6001600160a01b0381166200052b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200032c565b6005546040516001600160a01b0380841692169060008051602062003db883398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005a157607f821691505b602082108103620005c257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061657600081815260208120601f850160051c81016020861015620005f15750805b601f850160051c820191505b818110156200061257828155600101620005fd565b5050505b505050565b81516001600160401b0381111562000637576200063762000576565b6200064f816200064884546200058c565b84620005c8565b602080601f8311600181146200068757600084156200066e5750858301515b600019600386901b1c1916600185901b17855562000612565b600085815260208120601f198616915b82811015620006b85788860151825594840194600190910190840162000697565b5085821015620006d75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620007135762000713620006e7565b92915050565b8082028115828204841417620007135762000713620006e7565b6000826200075157634e487b7160e01b600052601260045260246000fd5b500490565b61363280620007666000396000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063d85ba06311610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a12578063f8b45b0514610a28578063fb002c9714610a3e578063ff5d380714610a5457600080fd5b8063ea4cfe12146109a6578063ee40166e146109c6578063f11a24d3146109dc578063f2fde38b146109f257600080fd5b8063e2f45605116100dc578063e2f456051461094e578063e79d416014610964578063e884f2601461097a578063e94ae90f1461098f57600080fd5b8063d85ba063146108d2578063d86c9fec146108e8578063dd62ed3e1461090857600080fd5b8063b38d5ef41161016f578063bbc0c74211610149578063bbc0c74214610849578063c024666814610868578063c44a24dd14610888578063c876d0b9146108b857600080fd5b8063b38d5ef4146107d9578063b62496f5146107f9578063b79c18861461082957600080fd5b8063a28e86d3116101ab578063a28e86d31461076e578063a457c2d714610783578063a62068ce146107a3578063a9059cbb146107b957600080fd5b80638da5cb5b1461071b57806395d89b41146107395780639a7a23d61461074e57600080fd5b80634a62bb65116102b657806370a082311161025457806382aa7c681161022357806382aa7c68146106b05780638366e79a146106d057806384791215146106f057806388e765ff1461070557600080fd5b806370a082311461063b578063751039fc1461065b5780637571336a146106705780637e926b4b1461069057600080fd5b80635a139dd4116102905780635a139dd4146105d957806366d602ae146105ef5780636a486a8e146106055780636ddd17131461061b57600080fd5b80634a62bb65146105895780634f77f6c0146105a357806357bd8bb3146105b957600080fd5b806323b872dd1161032357806339509351116102fd57806339509351146105075780633c14f4d514610527578063452ed4f114610549578063499b83941461056957600080fd5b806323b872dd146104ab5780632fe82a92146104cb578063313ce567146104eb57600080fd5b806310d5de531161035f57806310d5de531461042457806318160ddd146104545780631a8145bb146104735780632307b4411461048957600080fd5b806306fdde03146103915780630758d924146103bc578063095ea7b3146103f457600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610a69565b6040516103b39190612fb6565b60405180910390f35b3480156103c857600080fd5b506009546103dc906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b34801561040057600080fd5b5061041461040f36600461301c565b610afb565b60405190151581526020016103b3565b34801561043057600080fd5b5061041461043f366004613048565b601e6020526000908152604090205460ff1681565b34801561046057600080fd5b506002545b6040519081526020016103b3565b34801561047f57600080fd5b50610465601c5481565b34801561049557600080fd5b506104a96104a4366004613142565b610b12565b005b3480156104b757600080fd5b506104146104c6366004613204565b610c73565b3480156104d757600080fd5b506103dc6104e6366004613245565b610d1d565b3480156104f757600080fd5b50604051601281526020016103b3565b34801561051357600080fd5b5061041461052236600461301c565b610d47565b34801561053357600080fd5b5061053c610d83565b6040516103b391906132a2565b34801561055557600080fd5b50600a546103dc906001600160a01b031681565b34801561057557600080fd5b506104a9610584366004613048565b610de4565b34801561059557600080fd5b506012546104149060ff1681565b3480156105af57600080fd5b5061046560195481565b3480156105c557600080fd5b506104a96105d4366004613048565b610ebd565b3480156105e557600080fd5b5061046560165481565b3480156105fb57600080fd5b5061046560075481565b34801561061157600080fd5b5061046560185481565b34801561062757600080fd5b506012546104149062010000900460ff1681565b34801561064757600080fd5b50610465610656366004613048565b610f74565b34801561066757600080fd5b506104a9610f8f565b34801561067c57600080fd5b506104a961068b3660046132c3565b610fc5565b34801561069c57600080fd5b506104a96106ab3660046132fc565b61108d565b3480156106bc57600080fd5b506104a96106cb366004613245565b61114f565b3480156106dc57600080fd5b506104146106eb366004613319565b611283565b3480156106fc57600080fd5b506104a96114bd565b34801561071157600080fd5b5061046560065481565b34801561072757600080fd5b506005546001600160a01b03166103dc565b34801561074557600080fd5b506103a6611534565b34801561075a57600080fd5b506104a96107693660046132c3565b611543565b34801561077a57600080fd5b506104a9611637565b34801561078f57600080fd5b5061041461079e36600461301c565b611670565b3480156107af57600080fd5b50610465600e5481565b3480156107c557600080fd5b506104146107d436600461301c565b611709565b3480156107e557600080fd5b506104a96107f4366004613347565b611716565b34801561080557600080fd5b50610414610814366004613048565b601f6020526000908152604090205460ff1681565b34801561083557600080fd5b506104a9610844366004613347565b61175b565b34801561085557600080fd5b5060125461041490610100900460ff1681565b34801561087457600080fd5b506104a96108833660046132c3565b6117a0565b34801561089457600080fd5b506104146108a3366004613048565b600f6020526000908152604090205460ff1681565b3480156108c457600080fd5b506014546104149060ff1681565b3480156108de57600080fd5b5061046560155481565b3480156108f457600080fd5b506104a9610903366004613048565b611829565b34801561091457600080fd5b50610465610923366004613319565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095a57600080fd5b50610465600b5481565b34801561097057600080fd5b5061046560115481565b34801561098657600080fd5b506104a96118dc565b34801561099b57600080fd5b50600e544310610414565b3480156109b257600080fd5b50600c546103dc906001600160a01b031681565b3480156109d257600080fd5b50610465600d5481565b3480156109e857600080fd5b5061046560175481565b3480156109fe57600080fd5b506104a9610a0d366004613048565b611912565b348015610a1e57600080fd5b50610465601a5481565b348015610a3457600080fd5b5061046560085481565b348015610a4a57600080fd5b50610465601b5481565b348015610a6057600080fd5b506104a96119fd565b606060038054610a7890613369565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa490613369565b8015610af15780601f10610ac657610100808354040283529160200191610af1565b820191906000526020600020905b815481529060010190602001808311610ad457829003601f168201915b5050505050905090565b6000610b08338484611ecc565b5060015b92915050565b6005546001600160a01b03163314610b455760405162461bcd60e51b8152600401610b3c906133a3565b60405180910390fd5b8051825114610b965760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b3c565b60c8825110610c065760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b3c565b60005b8251811015610c6e576000838281518110610c2657610c266133d8565b602002602001015190506000838381518110610c4457610c446133d8565b60200260200101519050610c59338383611ff0565b50508080610c6690613404565b915050610c09565b505050565b6000610c80848484612145565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d055760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b3c565b610d128533858403611ecc565b506001949350505050565b60108181548110610d2d57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b08918590610d7e90869061341d565b611ecc565b60606010805480602002602001604051908101604052809291908181526020018280548015610af157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dbd575050505050905090565b6005546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b038116610e735760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b3c565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166000908152600f602052604090205460ff1615610f505760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b3c565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610b3c906133a3565b6012805460ff19169055565b6005546001600160a01b03163314610fef5760405162461bcd60e51b8152600401610b3c906133a3565b8061106257600a546001600160a01b03908116908316036110625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b3c565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b75760405162461bcd60e51b8152600401610b3c906133a3565b806111045760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b3c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146111795760405162461bcd60e51b8152600401610b3c906133a3565b601254610100900460ff16156111d15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b3c565b600a8111156112325760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b3c565b6012805462ffff0019166201010017905543600d81905561125490829061341d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146112b05760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0383166113065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b3c565b6001600160a01b038316301415806113265750601254610100900460ff16155b61138f5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b3c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190613430565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561144d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114719190613449565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114e75760405162461bcd60e51b8152600401610b3c906133a3565b604051600090339047908381818185875af1925050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b50505050565b606060048054610a7890613369565b6005546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610b3c906133a3565b600a546001600160a01b03908116908316036115f15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b3c565b6115fb8282612bcc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146116615760405162461bcd60e51b8152600401610b3c906133a3565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b3c565b6116ff3385858403611ecc565b5060019392505050565b6000610b08338484612145565b6005546001600160a01b031633146117405760405162461bcd60e51b8152600401610b3c906133a3565b60168290556017819055611754818361341d565b6015555050565b6005546001600160a01b031633146117855760405162461bcd60e51b8152600401610b3c906133a3565b6019829055601a819055611799818361341d565b6018555050565b6005546001600160a01b031633146117ca5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166000908152600f602052604090205460ff166118bb5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610b3c565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146119065760405162461bcd60e51b8152600401610b3c906133a3565b6014805460ff19169055565b6005546001600160a01b0316331461193c5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166119a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610b3c906133a3565b601254610100900460ff1615611a935760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b3c565b600046600103611ab85750737a250d5630b4cf539739df2c5dacb4c659f2488d611b86565b4662aa36a703611add575073c532a74256d3db42d0bf7a0400fefdbad7694008611b86565b46603803611b0057507310ed43c718714eb63d5aa57b78b54704e256024e611b86565b46606103611b23575073d99d1c33f9fc3444f8101754abc46c52416550d1611b86565b4661a4b103611b475750731b02da8cb0d097eb8d57a175b88c7d8b47997506611b86565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b3c565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c039190613466565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c899190613466565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190613466565b600a80546001600160a01b0319166001600160a01b03929092169182179055611d24906001612bf6565b600a54611d3b906001600160a01b03166001612bcc565b600954611d52906001600160a01b03166001612bf6565b600954611d69906001600160a01b031660016117a0565b60004711611dc55760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b3c565b6000611dd030610f74565b11611e2c5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b3c565b600954611e479030906001600160a01b0316610d7e82610f74565b6009546001600160a01b031663f305d7194730611e6381610f74565b60008033426040518863ffffffff1660e01b8152600401611e8996959493929190613483565b60606040518083038185885af1158015611ea7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061152e91906134be565b6001600160a01b038316611f2e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3c565b6001600160a01b038216611f8f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120165760405162461bcd60e51b8152600401610b3c906134ec565b6001600160a01b03821661203c5760405162461bcd60e51b8152600401610b3c90613531565b6001600160a01b038316600090815260208190526040902054818110156120b45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b3c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120eb90849061341d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213791815260200190565b60405180910390a350505050565b6001600160a01b03831661216b5760405162461bcd60e51b8152600401610b3c906134ec565b6001600160a01b0382166121915760405162461bcd60e51b8152600401610b3c90613531565b600081116121e15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b3c565b601254610100900460ff16612274576001600160a01b0383166000908152601d602052604090205460ff168061222f57506001600160a01b0382166000908152601d602052604090205460ff165b6122745760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b3c565b600e54431015801561228d5750601254610100900460ff165b1561235d576001600160a01b0383166000908152600f602052604090205460ff1615806122c757506005546001600160a01b038381169116145b806122dc57506001600160a01b03821661dead145b61235d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b3c565b60125460ff161561273b576005546001600160a01b0384811691161480159061239457506005546001600160a01b03838116911614155b80156123ab57506001600160a01b03821661dead14155b80156123d057506001600160a01b0383166000908152601d602052604090205460ff16155b80156123f557506001600160a01b0382166000908152601d602052604090205460ff16155b1561273b5760145460ff161561250e576009546001600160a01b038381169116148015906124315750600a546001600160a01b03838116911614155b1561250e57612441600243613574565b3260009081526013602052604090205410801561247f5750612464600243613574565b6001600160a01b038316600090815260136020526040902054105b6124e95760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b3c565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff16801561254f57506001600160a01b0382166000908152601e602052604090205460ff16155b15612616576006548111156125b75760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b3c565b6008546125c383610f74565b6125cd908361341d565b11156126115760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b3c565b61273b565b6001600160a01b0382166000908152601f602052604090205460ff16801561265757506001600160a01b0383166000908152601e602052604090205460ff16155b156126c1576007548111156126115760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b3c565b6001600160a01b0382166000908152601e602052604090205460ff1661273b576008546126ed83610f74565b6126f7908361341d565b111561273b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b3c565b600061274630610f74565b600b5490915081108015908190612765575060125462010000900460ff165b801561277b5750600a54600160a01b900460ff16155b801561279f57506001600160a01b0384166000908152601f602052604090205460ff165b156127cd57600a805460ff60a01b1916600160a01b1790556127bf612c59565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061280f57506001600160a01b0385166000908152601d602052604090205460ff165b15612818575060005b60008115612bb857600e5443108061285e5750670c7d713b49da00006006546128419190613574565b851015801561285e575043600e54600861285b919061341d565b10155b801561288257506001600160a01b0387166000908152601f602052604090205460ff165b80156128a757506001600160a01b0386166000908152601f602052604090205460ff16155b80156128cc57506001600160a01b0386166000908152601d602052604090205460ff16155b80156128da57506000601554115b15612a6157600e544310612901576001600660008282546128fb9190613574565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166129e1576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161295a90849061341d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646129ee866063613587565b6129f8919061359e565b905060155460175482612a0b9190613587565b612a15919061359e565b601c6000828254612a26919061341d565b9091555050601554601654612a3b9083613587565b612a45919061359e565b601b6000828254612a56919061341d565b90915550612b9a9050565b6001600160a01b0386166000908152601f602052604090205460ff168015612a8b57506000601854115b15612aed57606460185486612aa09190613587565b612aaa919061359e565b9050601854601a5482612abd9190613587565b612ac7919061359e565b601c6000828254612ad8919061341d565b9091555050601854601954612a3b9083613587565b6001600160a01b0387166000908152601f602052604090205460ff168015612b1757506000601554115b15612b9a57606460155486612b2c9190613587565b612b36919061359e565b905060155460175482612b499190613587565b612b53919061359e565b601c6000828254612b64919061341d565b9091555050601554601654612b799083613587565b612b83919061359e565b601b6000828254612b94919061341d565b90915550505b8015612bab57612bab873083611ff0565b612bb58186613574565b94505b612bc3878787611ff0565b50505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556115fb82825b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6000612c6430610f74565b90506000601b54601c54612c78919061341d565b9050811580612c85575080155b15612c8e575050565b600b54612c9c90600f613587565b821115612cb457600b54612cb190600f613587565b91505b600080600283601c5486612cc89190613587565b612cd2919061359e565b612cdc919061359e565b9050612cf0612ceb8286613574565b612dbb565b601c5447908190600090612d069060029061359e565b612d109087613574565b601b54612d1d9085613587565b612d27919061359e565b9050612d338183613574565b6000601c819055601b5591508315801590612d4e5750600082115b15612d5d57612d5d8483612f15565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612daa576040519150601f19603f3d011682016040523d82523d6000602084013e612daf565b606091505b50505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df057612df06133d8565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6d9190613466565b81600181518110612e8057612e806133d8565b6001600160a01b039283166020918202929092010152600954612ea69130911684611ecc565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612edf9085906000908690309042906004016135c0565b600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b505050505050565b600954612f2d9030906001600160a01b031684611ecc565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f6c9030908790600090819061dead904290600401613483565b60606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906134be565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b813561306581613004565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130ab576130ab61306c565b604052919050565b600067ffffffffffffffff8211156130cd576130cd61306c565b5060051b60200190565b600082601f8301126130e857600080fd5b813560206130fd6130f8836130b3565b613082565b82815260059290921b8401810191818101908684111561311c57600080fd5b8286015b848110156131375780358352918301918301613120565b509695505050505050565b6000806040838503121561315557600080fd5b823567ffffffffffffffff8082111561316d57600080fd5b818501915085601f83011261318157600080fd5b813560206131916130f8836130b3565b82815260059290921b840181019181810190898411156131b057600080fd5b948201945b838610156131d75785356131c881613004565b825294820194908201906131b5565b965050860135925050808211156131ed57600080fd5b506131fa858286016130d7565b9150509250929050565b60008060006060848603121561321957600080fd5b833561322481613004565b9250602084013561323481613004565b929592945050506040919091013590565b60006020828403121561325757600080fd5b5035919050565b600081518084526020808501945080840160005b838110156132975781516001600160a01b031687529582019590820190600101613272565b509495945050505050565b602081526000613065602083018461325e565b801515811461301957600080fd5b600080604083850312156132d657600080fd5b82356132e181613004565b915060208301356132f1816132b5565b809150509250929050565b60006020828403121561330e57600080fd5b8135613065816132b5565b6000806040838503121561332c57600080fd5b823561333781613004565b915060208301356132f181613004565b6000806040838503121561335a57600080fd5b50508035926020909101359150565b600181811c9082168061337d57607f821691505b60208210810361339d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613416576134166133ee565b5060010190565b80820180821115610b0c57610b0c6133ee565b60006020828403121561344257600080fd5b5051919050565b60006020828403121561345b57600080fd5b8151613065816132b5565b60006020828403121561347857600080fd5b815161306581613004565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134d357600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b0c57610b0c6133ee565b8082028115828204841417610b0c57610b0c6133ee565b6000826135bb57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006135df60a083018661325e565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206318e3824c17d9eb11fcc2248d47d6489a616774048a48b67857083a9ae97b4964736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063d85ba06311610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a12578063f8b45b0514610a28578063fb002c9714610a3e578063ff5d380714610a5457600080fd5b8063ea4cfe12146109a6578063ee40166e146109c6578063f11a24d3146109dc578063f2fde38b146109f257600080fd5b8063e2f45605116100dc578063e2f456051461094e578063e79d416014610964578063e884f2601461097a578063e94ae90f1461098f57600080fd5b8063d85ba063146108d2578063d86c9fec146108e8578063dd62ed3e1461090857600080fd5b8063b38d5ef41161016f578063bbc0c74211610149578063bbc0c74214610849578063c024666814610868578063c44a24dd14610888578063c876d0b9146108b857600080fd5b8063b38d5ef4146107d9578063b62496f5146107f9578063b79c18861461082957600080fd5b8063a28e86d3116101ab578063a28e86d31461076e578063a457c2d714610783578063a62068ce146107a3578063a9059cbb146107b957600080fd5b80638da5cb5b1461071b57806395d89b41146107395780639a7a23d61461074e57600080fd5b80634a62bb65116102b657806370a082311161025457806382aa7c681161022357806382aa7c68146106b05780638366e79a146106d057806384791215146106f057806388e765ff1461070557600080fd5b806370a082311461063b578063751039fc1461065b5780637571336a146106705780637e926b4b1461069057600080fd5b80635a139dd4116102905780635a139dd4146105d957806366d602ae146105ef5780636a486a8e146106055780636ddd17131461061b57600080fd5b80634a62bb65146105895780634f77f6c0146105a357806357bd8bb3146105b957600080fd5b806323b872dd1161032357806339509351116102fd57806339509351146105075780633c14f4d514610527578063452ed4f114610549578063499b83941461056957600080fd5b806323b872dd146104ab5780632fe82a92146104cb578063313ce567146104eb57600080fd5b806310d5de531161035f57806310d5de531461042457806318160ddd146104545780631a8145bb146104735780632307b4411461048957600080fd5b806306fdde03146103915780630758d924146103bc578063095ea7b3146103f457600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610a69565b6040516103b39190612fb6565b60405180910390f35b3480156103c857600080fd5b506009546103dc906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b34801561040057600080fd5b5061041461040f36600461301c565b610afb565b60405190151581526020016103b3565b34801561043057600080fd5b5061041461043f366004613048565b601e6020526000908152604090205460ff1681565b34801561046057600080fd5b506002545b6040519081526020016103b3565b34801561047f57600080fd5b50610465601c5481565b34801561049557600080fd5b506104a96104a4366004613142565b610b12565b005b3480156104b757600080fd5b506104146104c6366004613204565b610c73565b3480156104d757600080fd5b506103dc6104e6366004613245565b610d1d565b3480156104f757600080fd5b50604051601281526020016103b3565b34801561051357600080fd5b5061041461052236600461301c565b610d47565b34801561053357600080fd5b5061053c610d83565b6040516103b391906132a2565b34801561055557600080fd5b50600a546103dc906001600160a01b031681565b34801561057557600080fd5b506104a9610584366004613048565b610de4565b34801561059557600080fd5b506012546104149060ff1681565b3480156105af57600080fd5b5061046560195481565b3480156105c557600080fd5b506104a96105d4366004613048565b610ebd565b3480156105e557600080fd5b5061046560165481565b3480156105fb57600080fd5b5061046560075481565b34801561061157600080fd5b5061046560185481565b34801561062757600080fd5b506012546104149062010000900460ff1681565b34801561064757600080fd5b50610465610656366004613048565b610f74565b34801561066757600080fd5b506104a9610f8f565b34801561067c57600080fd5b506104a961068b3660046132c3565b610fc5565b34801561069c57600080fd5b506104a96106ab3660046132fc565b61108d565b3480156106bc57600080fd5b506104a96106cb366004613245565b61114f565b3480156106dc57600080fd5b506104146106eb366004613319565b611283565b3480156106fc57600080fd5b506104a96114bd565b34801561071157600080fd5b5061046560065481565b34801561072757600080fd5b506005546001600160a01b03166103dc565b34801561074557600080fd5b506103a6611534565b34801561075a57600080fd5b506104a96107693660046132c3565b611543565b34801561077a57600080fd5b506104a9611637565b34801561078f57600080fd5b5061041461079e36600461301c565b611670565b3480156107af57600080fd5b50610465600e5481565b3480156107c557600080fd5b506104146107d436600461301c565b611709565b3480156107e557600080fd5b506104a96107f4366004613347565b611716565b34801561080557600080fd5b50610414610814366004613048565b601f6020526000908152604090205460ff1681565b34801561083557600080fd5b506104a9610844366004613347565b61175b565b34801561085557600080fd5b5060125461041490610100900460ff1681565b34801561087457600080fd5b506104a96108833660046132c3565b6117a0565b34801561089457600080fd5b506104146108a3366004613048565b600f6020526000908152604090205460ff1681565b3480156108c457600080fd5b506014546104149060ff1681565b3480156108de57600080fd5b5061046560155481565b3480156108f457600080fd5b506104a9610903366004613048565b611829565b34801561091457600080fd5b50610465610923366004613319565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095a57600080fd5b50610465600b5481565b34801561097057600080fd5b5061046560115481565b34801561098657600080fd5b506104a96118dc565b34801561099b57600080fd5b50600e544310610414565b3480156109b257600080fd5b50600c546103dc906001600160a01b031681565b3480156109d257600080fd5b50610465600d5481565b3480156109e857600080fd5b5061046560175481565b3480156109fe57600080fd5b506104a9610a0d366004613048565b611912565b348015610a1e57600080fd5b50610465601a5481565b348015610a3457600080fd5b5061046560085481565b348015610a4a57600080fd5b50610465601b5481565b348015610a6057600080fd5b506104a96119fd565b606060038054610a7890613369565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa490613369565b8015610af15780601f10610ac657610100808354040283529160200191610af1565b820191906000526020600020905b815481529060010190602001808311610ad457829003601f168201915b5050505050905090565b6000610b08338484611ecc565b5060015b92915050565b6005546001600160a01b03163314610b455760405162461bcd60e51b8152600401610b3c906133a3565b60405180910390fd5b8051825114610b965760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b3c565b60c8825110610c065760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b3c565b60005b8251811015610c6e576000838281518110610c2657610c266133d8565b602002602001015190506000838381518110610c4457610c446133d8565b60200260200101519050610c59338383611ff0565b50508080610c6690613404565b915050610c09565b505050565b6000610c80848484612145565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d055760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b3c565b610d128533858403611ecc565b506001949350505050565b60108181548110610d2d57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b08918590610d7e90869061341d565b611ecc565b60606010805480602002602001604051908101604052809291908181526020018280548015610af157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dbd575050505050905090565b6005546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b038116610e735760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b3c565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166000908152600f602052604090205460ff1615610f505760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b3c565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610b3c906133a3565b6012805460ff19169055565b6005546001600160a01b03163314610fef5760405162461bcd60e51b8152600401610b3c906133a3565b8061106257600a546001600160a01b03908116908316036110625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b3c565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b75760405162461bcd60e51b8152600401610b3c906133a3565b806111045760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b3c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146111795760405162461bcd60e51b8152600401610b3c906133a3565b601254610100900460ff16156111d15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b3c565b600a8111156112325760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b3c565b6012805462ffff0019166201010017905543600d81905561125490829061341d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146112b05760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0383166113065760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b3c565b6001600160a01b038316301415806113265750601254610100900460ff16155b61138f5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b3c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190613430565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561144d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114719190613449565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114e75760405162461bcd60e51b8152600401610b3c906133a3565b604051600090339047908381818185875af1925050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b50505050565b606060048054610a7890613369565b6005546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610b3c906133a3565b600a546001600160a01b03908116908316036115f15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b3c565b6115fb8282612bcc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146116615760405162461bcd60e51b8152600401610b3c906133a3565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b3c565b6116ff3385858403611ecc565b5060019392505050565b6000610b08338484612145565b6005546001600160a01b031633146117405760405162461bcd60e51b8152600401610b3c906133a3565b60168290556017819055611754818361341d565b6015555050565b6005546001600160a01b031633146117855760405162461bcd60e51b8152600401610b3c906133a3565b6019829055601a819055611799818361341d565b6018555050565b6005546001600160a01b031633146117ca5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118535760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166000908152600f602052604090205460ff166118bb5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610b3c565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146119065760405162461bcd60e51b8152600401610b3c906133a3565b6014805460ff19169055565b6005546001600160a01b0316331461193c5760405162461bcd60e51b8152600401610b3c906133a3565b6001600160a01b0381166119a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610b3c906133a3565b601254610100900460ff1615611a935760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b3c565b600046600103611ab85750737a250d5630b4cf539739df2c5dacb4c659f2488d611b86565b4662aa36a703611add575073c532a74256d3db42d0bf7a0400fefdbad7694008611b86565b46603803611b0057507310ed43c718714eb63d5aa57b78b54704e256024e611b86565b46606103611b23575073d99d1c33f9fc3444f8101754abc46c52416550d1611b86565b4661a4b103611b475750731b02da8cb0d097eb8d57a175b88c7d8b47997506611b86565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b3c565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c039190613466565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c899190613466565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190613466565b600a80546001600160a01b0319166001600160a01b03929092169182179055611d24906001612bf6565b600a54611d3b906001600160a01b03166001612bcc565b600954611d52906001600160a01b03166001612bf6565b600954611d69906001600160a01b031660016117a0565b60004711611dc55760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b3c565b6000611dd030610f74565b11611e2c5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b3c565b600954611e479030906001600160a01b0316610d7e82610f74565b6009546001600160a01b031663f305d7194730611e6381610f74565b60008033426040518863ffffffff1660e01b8152600401611e8996959493929190613483565b60606040518083038185885af1158015611ea7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061152e91906134be565b6001600160a01b038316611f2e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3c565b6001600160a01b038216611f8f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120165760405162461bcd60e51b8152600401610b3c906134ec565b6001600160a01b03821661203c5760405162461bcd60e51b8152600401610b3c90613531565b6001600160a01b038316600090815260208190526040902054818110156120b45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b3c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120eb90849061341d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213791815260200190565b60405180910390a350505050565b6001600160a01b03831661216b5760405162461bcd60e51b8152600401610b3c906134ec565b6001600160a01b0382166121915760405162461bcd60e51b8152600401610b3c90613531565b600081116121e15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b3c565b601254610100900460ff16612274576001600160a01b0383166000908152601d602052604090205460ff168061222f57506001600160a01b0382166000908152601d602052604090205460ff165b6122745760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b3c565b600e54431015801561228d5750601254610100900460ff165b1561235d576001600160a01b0383166000908152600f602052604090205460ff1615806122c757506005546001600160a01b038381169116145b806122dc57506001600160a01b03821661dead145b61235d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b3c565b60125460ff161561273b576005546001600160a01b0384811691161480159061239457506005546001600160a01b03838116911614155b80156123ab57506001600160a01b03821661dead14155b80156123d057506001600160a01b0383166000908152601d602052604090205460ff16155b80156123f557506001600160a01b0382166000908152601d602052604090205460ff16155b1561273b5760145460ff161561250e576009546001600160a01b038381169116148015906124315750600a546001600160a01b03838116911614155b1561250e57612441600243613574565b3260009081526013602052604090205410801561247f5750612464600243613574565b6001600160a01b038316600090815260136020526040902054105b6124e95760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b3c565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff16801561254f57506001600160a01b0382166000908152601e602052604090205460ff16155b15612616576006548111156125b75760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b3c565b6008546125c383610f74565b6125cd908361341d565b11156126115760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b3c565b61273b565b6001600160a01b0382166000908152601f602052604090205460ff16801561265757506001600160a01b0383166000908152601e602052604090205460ff16155b156126c1576007548111156126115760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b3c565b6001600160a01b0382166000908152601e602052604090205460ff1661273b576008546126ed83610f74565b6126f7908361341d565b111561273b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b3c565b600061274630610f74565b600b5490915081108015908190612765575060125462010000900460ff165b801561277b5750600a54600160a01b900460ff16155b801561279f57506001600160a01b0384166000908152601f602052604090205460ff165b156127cd57600a805460ff60a01b1916600160a01b1790556127bf612c59565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601d602052604090205460019060ff168061280f57506001600160a01b0385166000908152601d602052604090205460ff165b15612818575060005b60008115612bb857600e5443108061285e5750670c7d713b49da00006006546128419190613574565b851015801561285e575043600e54600861285b919061341d565b10155b801561288257506001600160a01b0387166000908152601f602052604090205460ff165b80156128a757506001600160a01b0386166000908152601f602052604090205460ff16155b80156128cc57506001600160a01b0386166000908152601d602052604090205460ff16155b80156128da57506000601554115b15612a6157600e544310612901576001600660008282546128fb9190613574565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166129e1576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161295a90849061341d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646129ee866063613587565b6129f8919061359e565b905060155460175482612a0b9190613587565b612a15919061359e565b601c6000828254612a26919061341d565b9091555050601554601654612a3b9083613587565b612a45919061359e565b601b6000828254612a56919061341d565b90915550612b9a9050565b6001600160a01b0386166000908152601f602052604090205460ff168015612a8b57506000601854115b15612aed57606460185486612aa09190613587565b612aaa919061359e565b9050601854601a5482612abd9190613587565b612ac7919061359e565b601c6000828254612ad8919061341d565b9091555050601854601954612a3b9083613587565b6001600160a01b0387166000908152601f602052604090205460ff168015612b1757506000601554115b15612b9a57606460155486612b2c9190613587565b612b36919061359e565b905060155460175482612b499190613587565b612b53919061359e565b601c6000828254612b64919061341d565b9091555050601554601654612b799083613587565b612b83919061359e565b601b6000828254612b94919061341d565b90915550505b8015612bab57612bab873083611ff0565b612bb58186613574565b94505b612bc3878787611ff0565b50505050505050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556115fb82825b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6000612c6430610f74565b90506000601b54601c54612c78919061341d565b9050811580612c85575080155b15612c8e575050565b600b54612c9c90600f613587565b821115612cb457600b54612cb190600f613587565b91505b600080600283601c5486612cc89190613587565b612cd2919061359e565b612cdc919061359e565b9050612cf0612ceb8286613574565b612dbb565b601c5447908190600090612d069060029061359e565b612d109087613574565b601b54612d1d9085613587565b612d27919061359e565b9050612d338183613574565b6000601c819055601b5591508315801590612d4e5750600082115b15612d5d57612d5d8483612f15565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612daa576040519150601f19603f3d011682016040523d82523d6000602084013e612daf565b606091505b50505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df057612df06133d8565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6d9190613466565b81600181518110612e8057612e806133d8565b6001600160a01b039283166020918202929092010152600954612ea69130911684611ecc565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612edf9085906000908690309042906004016135c0565b600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b505050505050565b600954612f2d9030906001600160a01b031684611ecc565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f6c9030908790600090819061dead904290600401613483565b60606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906134be565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b813561306581613004565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130ab576130ab61306c565b604052919050565b600067ffffffffffffffff8211156130cd576130cd61306c565b5060051b60200190565b600082601f8301126130e857600080fd5b813560206130fd6130f8836130b3565b613082565b82815260059290921b8401810191818101908684111561311c57600080fd5b8286015b848110156131375780358352918301918301613120565b509695505050505050565b6000806040838503121561315557600080fd5b823567ffffffffffffffff8082111561316d57600080fd5b818501915085601f83011261318157600080fd5b813560206131916130f8836130b3565b82815260059290921b840181019181810190898411156131b057600080fd5b948201945b838610156131d75785356131c881613004565b825294820194908201906131b5565b965050860135925050808211156131ed57600080fd5b506131fa858286016130d7565b9150509250929050565b60008060006060848603121561321957600080fd5b833561322481613004565b9250602084013561323481613004565b929592945050506040919091013590565b60006020828403121561325757600080fd5b5035919050565b600081518084526020808501945080840160005b838110156132975781516001600160a01b031687529582019590820190600101613272565b509495945050505050565b602081526000613065602083018461325e565b801515811461301957600080fd5b600080604083850312156132d657600080fd5b82356132e181613004565b915060208301356132f1816132b5565b809150509250929050565b60006020828403121561330e57600080fd5b8135613065816132b5565b6000806040838503121561332c57600080fd5b823561333781613004565b915060208301356132f181613004565b6000806040838503121561335a57600080fd5b50508035926020909101359150565b600181811c9082168061337d57607f821691505b60208210810361339d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613416576134166133ee565b5060010190565b80820180821115610b0c57610b0c6133ee565b60006020828403121561344257600080fd5b5051919050565b60006020828403121561345b57600080fd5b8151613065816132b5565b60006020828403121561347857600080fd5b815161306581613004565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134d357600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b0c57610b0c6133ee565b8082028115828204841417610b0c57610b0c6133ee565b6000826135bb57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006135df60a083018661325e565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206318e3824c17d9eb11fcc2248d47d6489a616774048a48b67857083a9ae97b4964736f6c63430008130033

Deployed Bytecode Sourcemap

10678:18747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4194:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10819:27;;;;;;;;;;-1:-1:-1;10819:27:0;;;;-1:-1:-1;;;;;10819:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10819:27:0;567:221:1;5174:194:0;;;;;;;;;;-1:-1:-1;5174:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5174:194:0;1249:187:1;11808:63:0;;;;;;;;;;-1:-1:-1;11808:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4515:108;;;;;;;;;;-1:-1:-1;4603:12:0;;4515:108;;;1839:25:1;;;1827:2;1812:18;4515:108:0;1693:177:1;11707:33:0;;;;;;;;;;;;;;;;28703:719;;;;;;;;;;-1:-1:-1;28703:719:0;;;;;:::i;:::-;;:::i;:::-;;5376:529;;;;;;;;;;-1:-1:-1;5376:529:0;;;;;:::i;:::-;;:::i;11129:29::-;;;;;;;;;;-1:-1:-1;11129:29:0;;;;;:::i;:::-;;:::i;4414:93::-;;;;;;;;;;-1:-1:-1;4414:93:0;;4497:2;5358:36:1;;5346:2;5331:18;4414:93:0;5216:184:1;5913:290:0;;;;;;;;;;-1:-1:-1;5913:290:0;;;;;:::i;:::-;;:::i;25684:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10853:21::-;;;;;;;;;;-1:-1:-1;10853:21:0;;;;-1:-1:-1;;;;;10853:21:0;;;25141:350;;;;;;;;;;-1:-1:-1;25141:350:0;;;;;:::i;:::-;;:::i;11202:33::-;;;;;;;;;;-1:-1:-1;11202:33:0;;;;;;;;11587:32;;;;;;;;;;;;;;;;25794:176;;;;;;;;;;-1:-1:-1;25794:176:0;;;;;:::i;:::-;;:::i;11475:31::-;;;;;;;;;;;;;;;;10751:28;;;;;;;;;;;;;;;;11552;;;;;;;;;;;;;;;;11282:31;;;;;;;;;;-1:-1:-1;11282:31:0;;;;;;;;;;;4631:143;;;;;;;;;;-1:-1:-1;4631:143:0;;;;;:::i;:::-;;:::i;25499:84::-;;;;;;;;;;;;;:::i;14320:336::-;;;;;;;;;;-1:-1:-1;14320:336:0;;;;;:::i;:::-;;:::i;8622:249::-;;;;;;;;;;-1:-1:-1;8622:249:0;;;;;:::i;:::-;;:::i;26175:464::-;;;;;;;;;;-1:-1:-1;26175:464:0;;;;;:::i;:::-;;:::i;24573:560::-;;;;;;;;;;-1:-1:-1;24573:560:0;;;;;:::i;:::-;;:::i;15835:190::-;;;;;;;;;;;;;:::i;10717:27::-;;;;;;;;;;;;;;;;8408:79;;;;;;;;;;-1:-1:-1;8473:6:0;;-1:-1:-1;;;;;8473:6:0;8408:79;;4302:104;;;;;;;;;;;;;:::i;14908:355::-;;;;;;;;;;-1:-1:-1;14908:355:0;;;;;:::i;:::-;;:::i;25591:85::-;;;;;;;;;;;;;:::i;6211:475::-;;;;;;;;;;-1:-1:-1;6211:475:0;;;;;:::i;:::-;;:::i;11036:33::-;;;;;;;;;;;;;;;;4782:200;;;;;;;;;;-1:-1:-1;4782:200:0;;;;;:::i;:::-;;:::i;15279:267::-;;;;;;;;;;-1:-1:-1;15279:267:0;;;;;:::i;:::-;;:::i;11878:57::-;;;;;;;;;;-1:-1:-1;11878:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15554:273;;;;;;;;;;-1:-1:-1;15554:273:0;;;;;:::i;:::-;;:::i;11242:33::-;;;;;;;;;;-1:-1:-1;11242:33:0;;;;;;;;;;;16039:182;;;;;;;;;;-1:-1:-1;16039:182:0;;;;;:::i;:::-;;:::i;11076:46::-;;;;;;;;;;-1:-1:-1;11076:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11393:39;;;;;;;;;;-1:-1:-1;11393:39:0;;;;;;;;11441:27;;;;;;;;;;;;;;;;25982:181;;;;;;;;;;-1:-1:-1;25982:181:0;;;;;:::i;:::-;;:::i;4990:176::-;;;;;;;;;;-1:-1:-1;4990:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5131:18:0;;;5104:7;5131:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4990:176;10911:33;;;;;;;;;;;;;;;;11165:28;;;;;;;;;;;;;;;;13974:98;;;;;;;;;;;;;:::i;22070:122::-;;;;;;;;;;-1:-1:-1;22166:18:0;;22151:12;:33;22070:122;;10951:32;;;;;;;;;;-1:-1:-1;10951:32:0;;;;-1:-1:-1;;;;;10951:32:0;;;10992:37;;;;;;;;;;;;;;;;11513:30;;;;;;;;;;;;;;;;8879:281;;;;;;;;;;-1:-1:-1;8879:281:0;;;;;:::i;:::-;;:::i;11626:31::-;;;;;;;;;;;;;;;;10786:24;;;;;;;;;;;;;;;;11666:34;;;;;;;;;;;;;;;;26652:2034;;;;;;;;;;;;;:::i;4194:100::-;4248:13;4281:5;4274:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4194:100;:::o;5174:194::-;5282:4;5299:39;339:10;5322:7;5331:6;5299:8;:39::i;:::-;-1:-1:-1;5356:4:0;5174:194;;;;;:::o;28703:719::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;;;;;;;;;28884:15:::1;:22;28866:7;:14;:40;28844:120;;;::::0;-1:-1:-1;;;28844:120:0;;8487:2:1;28844:120:0::1;::::0;::::1;8469:21:1::0;8526:2;8506:18;;;8499:30;8565:32;8545:18;;;8538:60;8615:18;;28844:120:0::1;8285:354:1::0;28844:120:0::1;29014:3;28997:7;:14;:20;28975:124;;;::::0;-1:-1:-1;;;28975:124:0;;8846:2:1;28975:124:0::1;::::0;::::1;8828:21:1::0;8885:2;8865:18;;;8858:30;8924:34;8904:18;;;8897:62;-1:-1:-1;;;8975:18:1;;;8968:52;9037:19;;28975:124:0::1;8644:418:1::0;28975:124:0::1;29213:9;29208:207;29232:7;:14;29228:1;:18;29208:207;;;29268:14;29285:7;29293:1;29285:10;;;;;;;;:::i;:::-;;;;;;;29268:27;;29310:14;29327:15;29343:1;29327:18;;;;;;;;:::i;:::-;;;;;;;29310:35;;29360:43;29376:10;29388:6;29396;29360:15;:43::i;:::-;29253:162;;29248:3;;;;;:::i;:::-;;;;29208:207;;;;28703:719:::0;;:::o;5376:529::-;5516:4;5533:36;5543:6;5551:9;5562:6;5533:9;:36::i;:::-;-1:-1:-1;;;;;5609:19:0;;5582:24;5609:19;;;:11;:19;;;;;;;;339:10;5609:33;;;;;;;;5675:26;;;;5653:116;;;;-1:-1:-1;;;5653:116:0;;9673:2:1;5653:116:0;;;9655:21:1;9712:2;9692:18;;;9685:30;9751:34;9731:18;;;9724:62;-1:-1:-1;;;9802:18:1;;;9795:38;9850:19;;5653:116:0;9471:404:1;5653:116:0;5805:57;5814:6;339:10;5855:6;5836:16;:25;5805:8;:57::i;:::-;-1:-1:-1;5893:4:0;;5376:529;-1:-1:-1;;;;5376:529:0:o;11129:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11129:29:0;;-1:-1:-1;11129:29:0;:::o;5913:290::-;339:10;6026:4;6115:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6115:34:0;;;;;;;;;;6026:4;;6043:130;;6093:7;;6115:47;;6152:10;;6115:47;:::i;:::-;6043:8;:130::i;25684:102::-;25730:16;25766:12;25759:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25759:19:0;;;;;;;;;;;;;;;;;;;;;;25684:102;:::o;25141:350::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25267:32:0;::::1;25245:120;;;::::0;-1:-1:-1;;;25245:120:0;;10212:2:1;25245:120:0::1;::::0;::::1;10194:21:1::0;10251:2;10231:18;;;10224:30;10290:34;10270:18;;;10263:62;-1:-1:-1;;;10341:18:1;;;10334:36;10387:19;;25245:120:0::1;10010:402:1::0;25245:120:0::1;25376:17;:47:::0;;-1:-1:-1;;;;;;25376:47:0::1;-1:-1:-1::0;;;;;25376:47:0;::::1;::::0;;::::1;::::0;;;25439:44:::1;::::0;::::1;::::0;-1:-1:-1;;25439:44:0::1;25141:350:::0;:::o;25794:176::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25869:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;25868:23;25860:62;;;::::0;-1:-1:-1;;;25860:62:0;;10619:2:1;25860:62:0::1;::::0;::::1;10601:21:1::0;10658:2;10638:18;;;10631:30;10697:28;10677:18;;;10670:56;10743:18;;25860:62:0::1;10417:350:1::0;25860:62:0::1;-1:-1:-1::0;;;;;25933:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;25933:29:0::1;25958:4;25933:29;::::0;;25794:176::o;4631:143::-;-1:-1:-1;;;;;4748:18:0;4721:7;4748:18;;;;;;;;;;;;4631:143::o;25499:84::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;25553:14:::1;:22:::0;;-1:-1:-1;;25553:22:0::1;::::0;;25499:84::o;14320:336::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;14442:4:::1;14437:155;;14499:6;::::0;-1:-1:-1;;;;;14499:6:0;;::::1;14489:16:::0;;::::1;::::0;14463:117:::1;;;::::0;-1:-1:-1;;;14463:117:0;;10974:2:1;14463:117:0::1;::::0;::::1;10956:21:1::0;11013:2;10993:18;;;10986:30;11052:34;11032:18;;;11025:62;-1:-1:-1;;;11103:18:1;;;11096:37;11150:19;;14463:117:0::1;10772:403:1::0;14463:117:0::1;-1:-1:-1::0;;;;;14602:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;14602:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14320:336::o;8622:249::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;8733:15:::1;8725:52;;;::::0;-1:-1:-1;;;8725:52:0;;11382:2:1;8725:52:0::1;::::0;::::1;11364:21:1::0;11421:2;11401:18;;;11394:30;11460:26;11440:18;;;11433:54;11504:18;;8725:52:0::1;11180:348:1::0;8725:52:0::1;8814:6;::::0;8793:40:::1;::::0;8830:1:::1;::::0;-1:-1:-1;;;;;8814:6:0::1;::::0;8793:40:::1;::::0;8830:1;;8793:40:::1;-1:-1:-1::0;8844:6:0::1;:19:::0;;-1:-1:-1;;;;;;8844:19:0::1;::::0;;8622:249::o;26175:464::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;26263:13:::1;::::0;::::1;::::0;::::1;;;26262:14;26254:50;;;::::0;-1:-1:-1;;;26254:50:0;;11735:2:1;26254:50:0::1;::::0;::::1;11717:21:1::0;11774:2;11754:18;;;11747:30;11813:25;11793:18;;;11786:53;11856:18;;26254:50:0::1;11533:347:1::0;26254:50:0::1;26357:2;26337:16;:22;;26315:111;;;::::0;-1:-1:-1;;;26315:111:0;;12087:2:1;26315:111:0::1;::::0;::::1;12069:21:1::0;12126:2;12106:18;;;12099:30;12165:34;12145:18;;;12138:62;-1:-1:-1;;;12216:18:1;;;12209:37;12263:19;;26315:111:0::1;11885:403:1::0;26315:111:0::1;26437:13;:20:::0;;-1:-1:-1;;26468:18:0;;;;;26518:12:::1;26497:18;:33:::0;;;26562:37:::1;::::0;26583:16;;26562:37:::1;:::i;:::-;26541:18;:58:::0;26615:16:::1;::::0;::::1;::::0;;;::::1;26175:464:::0;:::o;24573:560::-;8535:6;;24685:10;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24716:20:0;::::1;24708:59;;;::::0;-1:-1:-1;;;24708:59:0;;12495:2:1;24708:59:0::1;::::0;::::1;12477:21:1::0;12534:2;12514:18;;;12507:30;12573:28;12553:18;;;12546:56;12619:18;;24708:59:0::1;12293:350:1::0;24708:59:0::1;-1:-1:-1::0;;;;;24800:23:0;::::1;24818:4;24800:23;;::::0;:41:::1;;-1:-1:-1::0;24828:13:0::1;::::0;::::1;::::0;::::1;;;24827:14;24800:41;24778:143;;;::::0;-1:-1:-1;;;24778:143:0;;12850:2:1;24778:143:0::1;::::0;::::1;12832:21:1::0;12889:2;12869:18;;;12862:30;12928:34;12908:18;;;12901:62;-1:-1:-1;;;12979:18:1;;;12972:50;13039:19;;24778:143:0::1;12648:416:1::0;24778:143:0::1;24959:39;::::0;-1:-1:-1;;;24959:39:0;;24992:4:::1;24959:39;::::0;::::1;731:51:1::0;24932:24:0::1;::::0;-1:-1:-1;;;;;24959:24:0;::::1;::::0;::::1;::::0;704:18:1;;24959:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25017:46;::::0;-1:-1:-1;;;25017:46:0;;-1:-1:-1;;;;;13450:32:1;;;25017:46:0::1;::::0;::::1;13432:51:1::0;13499:18;;;13492:34;;;24932:66:0;;-1:-1:-1;25017:23:0;;::::1;::::0;::::1;::::0;13405:18:1;;25017:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25079;::::0;;-1:-1:-1;;;;;13450:32:1;;13432:51;;13514:2;13499:18;;13492:34;;;25009:54:0;;-1:-1:-1;25079:46:0::1;::::0;13405:18:1;25079:46:0::1;;;;;;;24697:436;24573:560:::0;;;;:::o;15835:190::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;15935:82:::1;::::0;15898:12:::1;::::0;15943:10:::1;::::0;15967:21:::1;::::0;15898:12;15935:82;15898:12;15935:82;15967:21;15943:10;15935:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;15835:190:0:o;4302:104::-;4358:13;4391:7;4384:14;;;;;:::i;14908:355::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;15056:6:::1;::::0;-1:-1:-1;;;;;15056:6:0;;::::1;15048:14:::0;;::::1;::::0;15026:121:::1;;;::::0;-1:-1:-1;;;15026:121:0;;14199:2:1;15026:121:0::1;::::0;::::1;14181:21:1::0;14238:2;14218:18;;;14211:30;14277:34;14257:18;;;14250:62;14348:27;14328:18;;;14321:55;14393:19;;15026:121:0::1;13997:421:1::0;15026:121:0::1;15158:41;15187:4;15193:5;15158:28;:41::i;:::-;15215:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15215:40:0;::::1;::::0;::::1;::::0;;;::::1;14908:355:::0;;:::o;25591:85::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;25647:14:::1;:21:::0;;-1:-1:-1;;25647:21:0::1;25664:4;25647:21;::::0;;25591:85::o;6211:475::-;339:10;6329:4;6373:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6373:34:0;;;;;;;;;;6440:35;;;;6418:122;;;;-1:-1:-1;;;6418:122:0;;14625:2:1;6418:122:0;;;14607:21:1;14664:2;14644:18;;;14637:30;14703:34;14683:18;;;14676:62;-1:-1:-1;;;14754:18:1;;;14747:35;14799:19;;6418:122:0;14423:401:1;6418:122:0;6576:67;339:10;6599:7;6627:15;6608:16;:34;6576:8;:67::i;:::-;-1:-1:-1;6674:4:0;;6211:475;-1:-1:-1;;;6211:475:0:o;4782:200::-;4893:4;4910:42;339:10;4934:9;4945:6;4910:9;:42::i;15279:267::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;15403:16:::1;:33:::0;;;15447:15:::1;:31:::0;;;15504:34:::1;15465:13:::0;15422:14;15504:34:::1;:::i;:::-;15489:12;:49:::0;-1:-1:-1;;15279:267:0:o;15554:273::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;15679:17:::1;:34:::0;;;15724:16:::1;:32:::0;;;15783:36:::1;15743:13:::0;15699:14;15783:36:::1;:::i;:::-;15767:13;:52:::0;-1:-1:-1;;15554:273:0:o;16039:182::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16124:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16124:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16179:34;;1389:41:1;;;16179:34:0::1;::::0;1362:18:1;16179:34:0::1;;;;;;;16039:182:::0;;:::o;25982:181::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26058:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;26050:64;;;::::0;-1:-1:-1;;;26050:64:0;;15031:2:1;26050:64:0::1;::::0;::::1;15013:21:1::0;15070:2;15050:18;;;15043:30;15109:31;15089:18;;;15082:59;15158:18;;26050:64:0::1;14829:353:1::0;26050:64:0::1;-1:-1:-1::0;;;;;26125:22:0::1;26150:5;26125:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;26125:30:0::1;::::0;;25982:181::o;13974:98::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;14036:20:::1;:28:::0;;-1:-1:-1;;14036:28:0::1;::::0;;13974:98::o;8879:281::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8982:22:0;::::1;8960:110;;;::::0;-1:-1:-1;;;8960:110:0;;15389:2:1;8960:110:0::1;::::0;::::1;15371:21:1::0;15428:2;15408:18;;;15401:30;15467:34;15447:18;;;15440:62;-1:-1:-1;;;15518:18:1;;;15511:36;15564:19;;8960:110:0::1;15187:402:1::0;8960:110:0::1;9107:6;::::0;9086:38:::1;::::0;-1:-1:-1;;;;;9086:38:0;;::::1;::::0;9107:6:::1;::::0;9086:38:::1;::::0;9107:6:::1;::::0;9086:38:::1;9135:6;:17:::0;;-1:-1:-1;;;;;;9135:17:0::1;-1:-1:-1::0;;;;;9135:17:0;;;::::1;::::0;;;::::1;::::0;;8879:281::o;26652:2034::-;8535:6;;-1:-1:-1;;;;;8535:6:0;339:10;8535:22;8527:67;;;;-1:-1:-1;;;8527:67:0;;;;;;;:::i;:::-;26713:13:::1;::::0;::::1;::::0;::::1;;;26712:14;26704:70;;;::::0;-1:-1:-1;;;26704:70:0;;15796:2:1;26704:70:0::1;::::0;::::1;15778:21:1::0;15835:2;15815:18;;;15808:30;15874:34;15854:18;;;15847:62;-1:-1:-1;;;15925:18:1;;;15918:41;15976:19;;26704:70:0::1;15594:407:1::0;26704:70:0::1;26792:18;26827:13;26844:1;26827:18:::0;26823:730:::1;;-1:-1:-1::0;26875:42:0::1;26823:730;;;26958:13;26975:8;26958:25:::0;26954:599:::1;;-1:-1:-1::0;27013:42:0::1;26954:599;;;27093:13;27110:2;27093:19:::0;27089:464:::1;;-1:-1:-1::0;27142:42:0::1;27089:464;;;27227:13;27244:2;27227:19:::0;27223:330:::1;;-1:-1:-1::0;27276:42:0::1;27223:330;;;27361:13;27378:5;27361:22:::0;27357:196:::1;;-1:-1:-1::0;27413:42:0::1;27357:196;;;27511:30;::::0;-1:-1:-1;;;27511:30:0;;16208:2:1;27511:30:0::1;::::0;::::1;16190:21:1::0;16247:2;16227:18;;;16220:30;-1:-1:-1;;;16266:18:1;;;16259:50;16326:18;;27511:30:0::1;16006:344:1::0;27357:196:0::1;27595:9;:34:::0;;-1:-1:-1;;;;;;27595:34:0::1;-1:-1:-1::0;;;;;27595:34:0;::::1;::::0;;::::1;::::0;;;27695:19:::1;::::0;;-1:-1:-1;;;27695:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;27595:34;27695:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27683:43:0::1;;27749:4;27769:9;;;;;;;;;-1:-1:-1::0;;;;;27769:9:0::1;-1:-1:-1::0;;;;;27769:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27683:113;::::0;-1:-1:-1;;;;;;27683:113:0::1;::::0;;;;;;-1:-1:-1;;;;;16841:15:1;;;27683:113:0::1;::::0;::::1;16823:34:1::0;16893:15;;16873:18;;;16866:43;16758:18;;27683:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27674:6;:122:::0;;-1:-1:-1;;;;;;27674:122:0::1;-1:-1:-1::0;;;;;27674:122:0;;;::::1;::::0;;::::1;::::0;;27809:49:::1;::::0;-1:-1:-1;27809:26:0::1;:49::i;:::-;27906:6;::::0;27869:51:::1;::::0;-1:-1:-1;;;;;27906:6:0::1;::::0;27869:28:::1;:51::i;:::-;27976:9;::::0;27941:52:::1;::::0;-1:-1:-1;;;;;27976:9:0::1;::::0;27941:26:::1;:52::i;:::-;28028:9;::::0;28004:41:::1;::::0;-1:-1:-1;;;;;28028:9:0::1;::::0;28004:15:::1;:41::i;:::-;28106:1;28082:21;:25;28060:110;;;::::0;-1:-1:-1;;;28060:110:0;;17122:2:1;28060:110:0::1;::::0;::::1;17104:21:1::0;17161:2;17141:18;;;17134:30;17200:34;17180:18;;;17173:62;-1:-1:-1;;;17251:18:1;;;17244:33;17294:19;;28060:110:0::1;16920:399:1::0;28060:110:0::1;28230:1;28203:24;28221:4;28203:9;:24::i;:::-;:28;28181:116;;;::::0;-1:-1:-1;;;28181:116:0;;17526:2:1;28181:116:0::1;::::0;::::1;17508:21:1::0;17565:2;17545:18;;;17538:30;17604:34;17584:18;;;17577:62;-1:-1:-1;;;17655:18:1;;;17648:36;17701:19;;28181:116:0::1;17324:402:1::0;28181:116:0::1;28353:9;::::0;28321:69:::1;::::0;28338:4:::1;::::0;-1:-1:-1;;;;;28353:9:0::1;28365:24;28338:4:::0;28365:9:::1;:24::i;28321:69::-;28403:9;::::0;-1:-1:-1;;;;;28403:9:0::1;:25;28436:21;28481:4;28501:24;28481:4:::0;28501:9:::1;:24::i;:::-;28540:1;28583::::0;28626:10:::1;28651:15;28403:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7677:380::-:0;-1:-1:-1;;;;;7813:19:0;;7805:68;;;;-1:-1:-1;;;7805:68:0;;18856:2:1;7805:68:0;;;18838:21:1;18895:2;18875:18;;;18868:30;18934:34;18914:18;;;18907:62;-1:-1:-1;;;18985:18:1;;;18978:34;19029:19;;7805:68:0;18654:400:1;7805:68:0;-1:-1:-1;;;;;7892:21:0;;7884:68;;;;-1:-1:-1;;;7884:68:0;;19261:2:1;7884:68:0;;;19243:21:1;19300:2;19280:18;;;19273:30;19339:34;19319:18;;;19312:62;-1:-1:-1;;;19390:18:1;;;19383:32;19432:19;;7884:68:0;19059:398:1;7884:68:0;-1:-1:-1;;;;;7965:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8017:32;;1839:25:1;;;8017:32:0;;1812:18:1;8017:32:0;;;;;;;7677:380;;;:::o;6694:651::-;-1:-1:-1;;;;;6834:20:0;;6826:70;;;;-1:-1:-1;;;6826:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6915:23:0;;6907:71;;;;-1:-1:-1;;;6907:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7015:17:0;;6991:21;7015:17;;;;;;;;;;;7065:23;;;;7043:111;;;;-1:-1:-1;;;7043:111:0;;20474:2:1;7043:111:0;;;20456:21:1;20513:2;20493:18;;;20486:30;20552:34;20532:18;;;20525:62;-1:-1:-1;;;20603:18:1;;;20596:36;20649:19;;7043:111:0;20272:402:1;7043:111:0;-1:-1:-1;;;;;7190:17:0;;;:9;:17;;;;;;;;;;;7210:22;;;7190:42;;7254:20;;;;;;;;:30;;7226:6;;7190:9;7254:30;;7226:6;;7254:30;:::i;:::-;;;;;;;;7319:9;-1:-1:-1;;;;;7302:35:0;7311:6;-1:-1:-1;;;;;7302:35:0;;7330:6;7302:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7302:35:0;;;;;;;;6815:530;6694:651;;;:::o;16229:5833::-;-1:-1:-1;;;;;16361:18:0;;16353:68;;;;-1:-1:-1;;;16353:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16440:16:0;;16432:64;;;;-1:-1:-1;;;16432:64:0;;;;;;;:::i;:::-;16524:1;16515:6;:10;16507:52;;;;-1:-1:-1;;;16507:52:0;;20881:2:1;16507:52:0;;;20863:21:1;20920:2;20900:18;;;20893:30;20959:31;20939:18;;;20932:59;21008:18;;16507:52:0;20679:353:1;16507:52:0;16577:13;;;;;;;16572:183;;-1:-1:-1;;;;;16633:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;16662:23:0;;;;;;:19;:23;;;;;;;;16633:52;16607:136;;;;-1:-1:-1;;;16607:136:0;;21239:2:1;16607:136:0;;;21221:21:1;21278:2;21258:18;;;21251:30;-1:-1:-1;;;21297:18:1;;;21290:52;21359:18;;16607:136:0;21037:346:1;16607:136:0;22166:18;;22151:12;:33;16771:27;:44;;;;-1:-1:-1;16802:13:0;;;;;;;16771:44;16767:272;;;-1:-1:-1;;;;;16859:20:0;;;;;;:14;:20;;;;;;;;16858:21;;:38;;-1:-1:-1;8473:6:0;;-1:-1:-1;;;;;16883:13:0;;;8473:6;;16883:13;16858:38;:63;;;-1:-1:-1;;;;;;16900:21:0;;16914:6;16900:21;16858:63;16832:195;;;;-1:-1:-1;;;16832:195:0;;21590:2:1;16832:195:0;;;21572:21:1;21629:2;21609:18;;;21602:30;21668:34;21648:18;;;21641:62;21739:34;21719:18;;;21712:62;-1:-1:-1;;;21790:19:1;;;21783:37;21837:19;;16832:195:0;21388:474:1;16832:195:0;17055:14;;;;17051:2148;;;8473:6;;-1:-1:-1;;;;;17108:15:0;;;8473:6;;17108:15;;;;:49;;-1:-1:-1;8473:6:0;;-1:-1:-1;;;;;17144:13:0;;;8473:6;;17144:13;;17108:49;:91;;;;-1:-1:-1;;;;;;17178:21:0;;17192:6;17178:21;;17108:91;:138;;;;-1:-1:-1;;;;;;17221:25:0;;;;;;:19;:25;;;;;;;;17220:26;17108:138;:183;;;;-1:-1:-1;;;;;;17268:23:0;;;;;;:19;:23;;;;;;;;17267:24;17108:183;17086:2102;;;17330:20;;;;17326:692;;;17393:9;;-1:-1:-1;;;;;17379:24:0;;;17393:9;;17379:24;;;;:49;;-1:-1:-1;17421:6:0;;-1:-1:-1;;;;;17407:21:0;;;17421:6;;17407:21;;17379:49;17375:624;;;17570:16;17585:1;17570:12;:16;:::i;:::-;17524:9;17495:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;17691:16:0;17706:1;17691:12;:16;:::i;:::-;-1:-1:-1;;;;;17623:32:0;;;;;;:28;:32;;;;;;:84;17495:212;17457:363;;;;-1:-1:-1;;;17457:363:0;;22202:2:1;17457:363:0;;;22184:21:1;22241:2;22221:18;;;22214:30;22280:34;22260:18;;;22253:62;-1:-1:-1;;;22331:18:1;;;22324:51;22392:19;;17457:363:0;22000:417:1;17457:363:0;17876:9;17847:39;;;;:28;:39;;;;;;17889:12;17847:54;;;;-1:-1:-1;;;;;17928:32:0;;;;;;:47;17375:624;-1:-1:-1;;;;;18092:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;18149:35:0;;;;;;:31;:35;;;;;;;;18148:36;18092:92;18066:1107;;;18271:12;;18261:6;:22;;18227:148;;;;-1:-1:-1;;;18227:148:0;;22624:2:1;18227:148:0;;;22606:21:1;22663:2;22643:18;;;22636:30;22702:34;22682:18;;;22675:62;-1:-1:-1;;;22753:18:1;;;22746:38;22801:19;;18227:148:0;22422:404:1;18227:148:0;18458:9;;18441:13;18451:2;18441:9;:13::i;:::-;18432:22;;:6;:22;:::i;:::-;:35;;18398:140;;;;-1:-1:-1;;;18398:140:0;;23033:2:1;18398:140:0;;;23015:21:1;23072:2;23052:18;;;23045:30;-1:-1:-1;;;23091:18:1;;;23084:49;23150:18;;18398:140:0;22831:343:1;18398:140:0;18066:1107;;;-1:-1:-1;;;;;18636:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;18691:37:0;;;;;;:31;:37;;;;;;;;18690:38;18636:92;18610:563;;;18815:13;;18805:6;:23;;18771:151;;;;-1:-1:-1;;;18771:151:0;;23381:2:1;18771:151:0;;;23363:21:1;23420:2;23400:18;;;23393:30;23459:34;23439:18;;;23432:62;-1:-1:-1;;;23510:18:1;;;23503:40;23560:19;;18771:151:0;23179:406:1;18610:563:0;-1:-1:-1;;;;;18953:35:0;;;;;;:31;:35;;;;;;;;18948:225;;19073:9;;19056:13;19066:2;19056:9;:13::i;:::-;19047:22;;:6;:22;:::i;:::-;:35;;19013:140;;;;-1:-1:-1;;;19013:140:0;;23033:2:1;19013:140:0;;;23015:21:1;23072:2;23052:18;;;23045:30;-1:-1:-1;;;23091:18:1;;;23084:49;23150:18;;19013:140:0;22831:343:1;19013:140:0;19211:28;19242:24;19260:4;19242:9;:24::i;:::-;19318:18;;19211:55;;-1:-1:-1;19294:42:0;;;;;;;19367:22;;-1:-1:-1;19378:11:0;;;;;;;19367:22;:35;;;;-1:-1:-1;19394:8:0;;-1:-1:-1;;;19394:8:0;;;;19393:9;19367:35;:68;;;;-1:-1:-1;;;;;;19406:29:0;;;;;;:25;:29;;;;;;;;19367:68;19349:196;;;19462:8;:15;;-1:-1:-1;;;;19462:15:0;-1:-1:-1;;;19462:15:0;;;19492:10;:8;:10::i;:::-;19517:8;:16;;-1:-1:-1;;;;19517:16:0;;;19349:196;-1:-1:-1;;;;;19676:25:0;;19557:12;19676:25;;;:19;:25;;;;;;19572:4;;19676:25;;;:52;;-1:-1:-1;;;;;;19705:23:0;;;;;;:19;:23;;;;;;;;19676:52;19672:100;;;-1:-1:-1;19755:5:0;19672:100;19784:12;19889:7;19885:2124;;;22166:18;;22151:12;:33;19972:153;;;;20049:8;20034:12;;:23;;;;:::i;:::-;20024:6;:33;;:100;;;;;20112:12;20086:18;;20107:1;20086:22;;;;:::i;:::-;:38;;20024:100;19971:207;;;;-1:-1:-1;;;;;;20147:31:0;;;;;;:25;:31;;;;;;;;19971:207;:258;;;;-1:-1:-1;;;;;;20200:29:0;;;;;;:25;:29;;;;;;;;20199:30;19971:258;:303;;;;-1:-1:-1;;;;;;20251:23:0;;;;;;:19;:23;;;;;;;;20250:24;19971:303;:340;;;;;20310:1;20295:12;;:16;19971:340;19949:1911;;;22166:18;;22151:12;:33;20346:333;;20658:1;20642:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;20346:333:0;-1:-1:-1;;;;;20704:18:0;;;;;;:14;:18;;;;;;;;20699:226;;-1:-1:-1;;;;;20747:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;20747:25:0;20768:4;20747:25;;;;;;20795:13;:18;;20768:4;;20795:13;;:18;;20768:4;;20795:18;:::i;:::-;;;;-1:-1:-1;;20836:12:0;:21;;;;;;;-1:-1:-1;20836:21:0;;;;;;;;-1:-1:-1;;;;;;20836:21:0;-1:-1:-1;;;;;20836:21:0;;;;;;;;20885:20;;731:51:1;;;20885:20:0;;719:2:1;704:18;20885:20:0;;;;;;;20699:226;20968:3;20953:11;:6;20962:2;20953:11;:::i;:::-;20952:19;;;;:::i;:::-;20945:26;;21039:12;;21020:15;;21013:4;:22;;;;:::i;:::-;21012:39;;;;:::i;:::-;20990:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21121:12:0;;21101:16;;21094:23;;:4;:23;:::i;:::-;21093:40;;;;:::i;:::-;21070:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;19949:1911:0;;-1:-1:-1;19949:1911:0;;-1:-1:-1;;;;;21196:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21245:1;21229:13;;:17;21196:50;21192:668;;;21301:3;21284:13;;21275:6;:22;;;;:::i;:::-;21274:30;;;;:::i;:::-;21267:37;;21373:13;;21353:16;;21346:4;:23;;;;:::i;:::-;21345:41;;;;:::i;:::-;21323:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21499:13:0;;21457:17;;21450:24;;:4;:24;:::i;21192:668::-;-1:-1:-1;;;;;21574:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21624:1;21609:12;;:16;21574:51;21570:290;;;21679:3;21663:12;;21654:6;:21;;;;:::i;:::-;21653:29;;;;:::i;:::-;21646:36;;21750:12;;21731:15;;21724:4;:22;;;;:::i;:::-;21723:39;;;;:::i;:::-;21701:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21832:12:0;;21812:16;;21805:23;;:4;:23;:::i;:::-;21804:40;;;;:::i;:::-;21781:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21570:290:0;21880:8;;21876:91;;21909:42;21925:4;21939;21946;21909:15;:42::i;:::-;21983:14;21993:4;21983:14;;:::i;:::-;;;19885:2124;22021:33;22037:4;22043:2;22047:6;22021:15;:33::i;:::-;16342:5720;;;;16229:5833;;;:::o;14664:236::-;-1:-1:-1;;;;;14747:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;14747:39:0;;;;;;;14797;14747:31;:39;14080:232;-1:-1:-1;;;;;14193:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;14193:52:0;;;;;;;;;;14261:43;;24153:51:1;;;24220:18;;;24213:50;14261:43:0;;24126:18:1;14261:43:0;;;;;;;14080:232;;:::o;23296:1269::-;23335:23;23361:24;23379:4;23361:9;:24::i;:::-;23335:50;;23396:25;23445:19;;23424:18;;:40;;;;:::i;:::-;23396:68;-1:-1:-1;23481:20:0;;;:46;;-1:-1:-1;23505:22:0;;23481:46;23477:85;;;23544:7;;23296:1269::o;23477:85::-;23596:18;;:23;;23617:2;23596:23;:::i;:::-;23578:15;:41;23574:115;;;23654:18;;:23;;23675:2;23654:23;:::i;:::-;23636:41;;23574:115;23701:12;23775:23;23888:1;23855:17;23820:18;;23802:15;:36;;;;:::i;:::-;23801:71;;;;:::i;:::-;:88;;;;:::i;:::-;23775:114;-1:-1:-1;23902:51:0;23919:33;23775:114;23919:15;:33;:::i;:::-;23902:16;:51::i;:::-;24167:18;;23987:21;;;;23966:18;;24167:22;;24188:1;;24167:22;:::i;:::-;24146:44;;:17;:44;:::i;:::-;24109:19;;24096:32;;:10;:32;:::i;:::-;24095:96;;;;:::i;:::-;24068:123;-1:-1:-1;24204:35:0;24068:123;24204:35;;:::i;:::-;24273:1;24252:18;:22;;;24285:19;:23;24204:35;-1:-1:-1;24325:19:0;;;;;:42;;;24366:1;24348:15;:19;24325:42;24321:121;;;24384:46;24397:15;24414;24384:12;:46::i;:::-;24476:17;;24468:89;;-1:-1:-1;;;;;24476:17:0;;;;24521:21;;24468:89;;;;24521:21;24476:17;24468:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;23296:1269:0:o;22200:571::-;22350:16;;;22364:1;22350:16;;;;;;;;22326:21;;22350:16;;;;;;;;;;-1:-1:-1;22350:16:0;22326:40;;22395:4;22377;22382:1;22377:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22377:23:0;;;:7;;;;;;;;;;:23;;;;22421:9;;:16;;;-1:-1:-1;;;22421:16:0;;;;:9;;;;;:14;;:16;;;;;22377:7;;22421:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22411:4;22416:1;22411:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22411:26:0;;;:7;;;;;;;;;:26;22482:9;;22450:56;;22467:4;;22482:9;22494:11;22450:8;:56::i;:::-;22545:9;;:218;;-1:-1:-1;;;22545:218:0;;-1:-1:-1;;;;;22545:9:0;;;;:60;;:218;;22620:11;;22545:9;;22690:4;;22717;;22737:15;;22545:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:516;22200:571;:::o;22779:509::-;22959:9;;22927:56;;22944:4;;-1:-1:-1;;;;;22959:9:0;22971:11;22927:8;:56::i;:::-;23026:9;;:254;;-1:-1:-1;;;23026:254:0;;-1:-1:-1;;;;;23026:9:0;;;;:25;;23059:9;;23026:254;;23092:4;;23112:11;;23026:9;;;;23232:6;;23254:15;;23026:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22779:509;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:127::-;1936:10;1931:3;1927:20;1924:1;1917:31;1967:4;1964:1;1957:15;1991:4;1988:1;1981:15;2007:275;2078:2;2072:9;2143:2;2124:13;;-1:-1:-1;;2120:27:1;2108:40;;2178:18;2163:34;;2199:22;;;2160:62;2157:88;;;2225:18;;:::i;:::-;2261:2;2254:22;2007:275;;-1:-1:-1;2007:275:1:o;2287:183::-;2347:4;2380:18;2372:6;2369:30;2366:56;;;2402:18;;:::i;:::-;-1:-1:-1;2447:1:1;2443:14;2459:4;2439:25;;2287:183::o;2475:662::-;2529:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:55;;2600:1;2597;2590:12;2549:55;2636:6;2623:20;2662:4;2686:60;2702:43;2742:2;2702:43;:::i;:::-;2686:60;:::i;:::-;2780:15;;;2866:1;2862:10;;;;2850:23;;2846:32;;;2811:12;;;;2890:15;;;2887:35;;;2918:1;2915;2908:12;2887:35;2954:2;2946:6;2942:15;2966:142;2982:6;2977:3;2974:15;2966:142;;;3048:17;;3036:30;;3086:12;;;;2999;;2966:142;;;-1:-1:-1;3126:5:1;2475:662;-1:-1:-1;;;;;;2475:662:1:o;3142:1215::-;3260:6;3268;3321:2;3309:9;3300:7;3296:23;3292:32;3289:52;;;3337:1;3334;3327:12;3289:52;3377:9;3364:23;3406:18;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3501:6;3490:9;3486:22;3476:32;;3546:7;3539:4;3535:2;3531:13;3527:27;3517:55;;3568:1;3565;3558:12;3517:55;3604:2;3591:16;3626:4;3650:60;3666:43;3706:2;3666:43;:::i;3650:60::-;3744:15;;;3826:1;3822:10;;;;3814:19;;3810:28;;;3775:12;;;;3850:19;;;3847:39;;;3882:1;3879;3872:12;3847:39;3906:11;;;;3926:217;3942:6;3937:3;3934:15;3926:217;;;4022:3;4009:17;4039:31;4064:5;4039:31;:::i;:::-;4083:18;;3959:12;;;;4121;;;;3926:217;;;4162:5;-1:-1:-1;;4205:18:1;;4192:32;;-1:-1:-1;;4236:16:1;;;4233:36;;;4265:1;4262;4255:12;4233:36;;4288:63;4343:7;4332:8;4321:9;4317:24;4288:63;:::i;:::-;4278:73;;;3142:1215;;;;;:::o;4362:456::-;4439:6;4447;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:31;4607:5;4582:31;:::i;:::-;4632:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;4702:33;4661:32;4702:33;:::i;:::-;4362:456;;4754:7;;-1:-1:-1;;;4808:2:1;4793:18;;;;4780:32;;4362:456::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5405:461::-;5458:3;5496:5;5490:12;5523:6;5518:3;5511:19;5549:4;5578:2;5573:3;5569:12;5562:19;;5615:2;5608:5;5604:14;5636:1;5646:195;5660:6;5657:1;5654:13;5646:195;;;5725:13;;-1:-1:-1;;;;;5721:39:1;5709:52;;5781:12;;;;5816:15;;;;5757:1;5675:9;5646:195;;;-1:-1:-1;5857:3:1;;5405:461;-1:-1:-1;;;;;5405:461:1:o;5871:261::-;6050:2;6039:9;6032:21;6013:4;6070:56;6122:2;6111:9;6107:18;6099:6;6070:56;:::i;6137:118::-;6223:5;6216:13;6209:21;6202:5;6199:32;6189:60;;6245:1;6242;6235:12;6260:382;6325:6;6333;6386:2;6374:9;6365:7;6361:23;6357:32;6354:52;;;6402:1;6399;6392:12;6354:52;6441:9;6428:23;6460:31;6485:5;6460:31;:::i;:::-;6510:5;-1:-1:-1;6567:2:1;6552:18;;6539:32;6580:30;6539:32;6580:30;:::i;:::-;6629:7;6619:17;;;6260:382;;;;;:::o;6647:241::-;6703:6;6756:2;6744:9;6735:7;6731:23;6727:32;6724:52;;;6772:1;6769;6762:12;6724:52;6811:9;6798:23;6830:28;6852:5;6830:28;:::i;6893:388::-;6961:6;6969;7022:2;7010:9;7001:7;6997:23;6993:32;6990:52;;;7038:1;7035;7028:12;6990:52;7077:9;7064:23;7096:31;7121:5;7096:31;:::i;:::-;7146:5;-1:-1:-1;7203:2:1;7188:18;;7175:32;7216:33;7175:32;7216:33;:::i;7286:248::-;7354:6;7362;7415:2;7403:9;7394:7;7390:23;7386:32;7383:52;;;7431:1;7428;7421:12;7383:52;-1:-1:-1;;7454:23:1;;;7524:2;7509:18;;;7496:32;;-1:-1:-1;7286:248:1:o;7539:380::-;7618:1;7614:12;;;;7661;;;7682:61;;7736:4;7728:6;7724:17;7714:27;;7682:61;7789:2;7781:6;7778:14;7758:18;7755:38;7752:161;;7835:10;7830:3;7826:20;7823:1;7816:31;7870:4;7867:1;7860:15;7898:4;7895:1;7888:15;7752:161;;7539:380;;;:::o;7924:356::-;8126:2;8108:21;;;8145:18;;;8138:30;8204:34;8199:2;8184:18;;8177:62;8271:2;8256:18;;7924:356::o;9067:127::-;9128:10;9123:3;9119:20;9116:1;9109:31;9159:4;9156:1;9149:15;9183:4;9180:1;9173:15;9199:127;9260:10;9255:3;9251:20;9248:1;9241:31;9291:4;9288:1;9281:15;9315:4;9312:1;9305:15;9331:135;9370:3;9391:17;;;9388:43;;9411:18;;:::i;:::-;-1:-1:-1;9458:1:1;9447:13;;9331:135::o;9880:125::-;9945:9;;;9966:10;;;9963:36;;;9979:18;;:::i;13069:184::-;13139:6;13192:2;13180:9;13171:7;13167:23;13163:32;13160:52;;;13208:1;13205;13198:12;13160:52;-1:-1:-1;13231:16:1;;13069:184;-1:-1:-1;13069:184:1:o;13537:245::-;13604:6;13657:2;13645:9;13636:7;13632:23;13628:32;13625:52;;;13673:1;13670;13663:12;13625:52;13705:9;13699:16;13724:28;13746:5;13724:28;:::i;16355:251::-;16425:6;16478:2;16466:9;16457:7;16453:23;16449:32;16446:52;;;16494:1;16491;16484:12;16446:52;16526:9;16520:16;16545:31;16570:5;16545:31;:::i;17731:607::-;-1:-1:-1;;;;;18090:15:1;;;18072:34;;18137:2;18122:18;;18115:34;;;;18180:2;18165:18;;18158:34;;;;18223:2;18208:18;;18201:34;;;;18272:15;;;18266:3;18251:19;;18244:44;18052:3;18304:19;;18297:35;;;;18021:3;18006:19;;17731:607::o;18343:306::-;18431:6;18439;18447;18500:2;18488:9;18479:7;18475:23;18471:32;18468:52;;;18516:1;18513;18506:12;18468:52;18545:9;18539:16;18529:26;;18595:2;18584:9;18580:18;18574:25;18564:35;;18639:2;18628:9;18624:18;18618:25;18608:35;;18343:306;;;;;:::o;19462:401::-;19664:2;19646:21;;;19703:2;19683:18;;;19676:30;19742:34;19737:2;19722:18;;19715:62;-1:-1:-1;;;19808:2:1;19793:18;;19786:35;19853:3;19838:19;;19462:401::o;19868:399::-;20070:2;20052:21;;;20109:2;20089:18;;;20082:30;20148:34;20143:2;20128:18;;20121:62;-1:-1:-1;;;20214:2:1;20199:18;;20192:33;20257:3;20242:19;;19868:399::o;21867:128::-;21934:9;;;21955:11;;;21952:37;;;21969:18;;:::i;23590:168::-;23663:9;;;23694;;23711:15;;;23705:22;;23691:37;23681:71;;23732:18;;:::i;23763:217::-;23803:1;23829;23819:132;;23873:10;23868:3;23864:20;23861:1;23854:31;23908:4;23905:1;23898:15;23936:4;23933:1;23926:15;23819:132;-1:-1:-1;23965:9:1;;23763:217::o;24274:582::-;24573:6;24562:9;24555:25;24616:6;24611:2;24600:9;24596:18;24589:34;24659:3;24654:2;24643:9;24639:18;24632:31;24536:4;24680:57;24732:3;24721:9;24717:19;24709:6;24680:57;:::i;:::-;-1:-1:-1;;;;;24773:32:1;;;;24768:2;24753:18;;24746:60;-1:-1:-1;24837:3:1;24822:19;24815:35;24672:65;24274:582;-1:-1:-1;;;24274:582:1:o

Swarm Source

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