ETH Price: $3,176.68 (-8.47%)
Gas: 3 Gwei

Token

The Example (THEEXAMPLE)
 

Overview

Max Total Supply

1,000,000,000 THEEXAMPLE

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,503,218.198719076400732501 THEEXAMPLE

Value
$0.00
0x961076Ef6Dcc6852622d348Bbda3dA5643cd7434
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:
TheExample

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-20
*/

// SPDX-License-Identifier: MIT
/*
 * https://theexample.net
 */
pragma solidity 0.8.13;

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 TheExample 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 marketingAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public flaggedAsBot;
    address[] public botBuyers;
    uint256 public botsCaught;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 private defaultMarketingFee;
    uint256 private defaultLiquidityFee;
    uint256 private defaultMarketingSellFee;
    uint256 private defaultLiquiditySellFee;    

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForMarketing;
    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 UpdatedMarketingAddress(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);

    event EnabledSellingForever();

    constructor() payable ERC20("The Example", "THEEXAMPLE") {
        address newOwner = msg.sender;

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 4) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Rinkeby
        } 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);

        uint256 totalSupply = 1 * 1e9 * 1e18;

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

        buyMarketingFee = 9;
        buyLiquidityFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        defaultMarketingFee = 2;
        defaultLiquidityFee = 1;
        defaultMarketingSellFee = 2;
        defaultLiquiditySellFee = 1;        

        sellMarketingFee = 9;
        sellLiquidityFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        marketingAddress = address(0x4Bea81D285808382306D501348210C1810E59e17);

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

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

        _createInitialSupply(address(0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045), (totalSupply * 10) / 100); // VITALIK
        _createInitialSupply(address(this), (totalSupply * 90) / 100);

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function getBotBuyers() external view returns (address[] memory) {
        return botBuyers;
    }

    function unflagBot(address wallet) external onlyOwner {
        require(flaggedAsBot[wallet], "Wallet is already not flagged.");
        flaggedAsBot[wallet] = false;
    }

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

    function flagMultipleBots(address[] memory wallets) external onlyOwner {
        require(
            wallets.length < 600,
            "Can only mark 600 wallets per txn due to gas limits"
        );
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            flaggedAsBot[wallet] = true;
        }
    }

    function unflagMultipleBots(address[] memory wallets) external onlyOwner {
        require(
            wallets.length < 600,
            "Can only mark 600 wallets per txn due to gas limits"
        );
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            flaggedAsBot[wallet] = false;
        }
    }

    // disable Transfer delay - cannot be reenabled
    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)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

    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 (!earlyBuyPenaltyInEffect() && tradingActive) {
            require(
                !flaggedAsBot[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(sellingEnabled, "Selling disabled");
                    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 (
                (earlyBuyPenaltyInEffect() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // 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 (!flaggedAsBot[to]) {
                    flaggedAsBot[to] = true;
                    botsCaught += 1;
                    botBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

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

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() 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 + tokensForMarketing;

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

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

        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 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

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

        (success, ) = address(marketingAddress).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);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

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

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

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

    function resetTaxes() external onlyOwner {
        buyMarketingFee = defaultMarketingFee;
        buyLiquidityFee = defaultLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = defaultMarketingSellFee;
        sellLiquidityFee = defaultLiquiditySellFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
    }

    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 addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // add the liquidity
        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
            address(this),
            block.timestamp
        );
    }

    function removeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

        require(lpBalance > 0, "No LP tokens in contract");

        uint256 lpAmount = (lpBalance * percent) / 10000;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function setSellingEnabled(bool confirmSellingEnabled) external onlyOwner {
        require(confirmSellingEnabled, "Confirm selling enabled!");
        require(!sellingEnabled, "Selling already enabled!");

        sellingEnabled = true;
        emit EnabledSellingForever();
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // add the liquidity
        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
            address(this),
            block.timestamp
        );
    }
}

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":"EnabledSellingForever","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":"UpdatedMarketingAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"botBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"flagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"flagMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"flaggedAsBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBotBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","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":"resetTaxes","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmSellingEnabled","type":"bool"}],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"unflagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"unflagMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805463ffffffff191660019081179091556014805460ff19169091179055600b60808181526a546865204578616d706c6560a81b60a0908152610100604052600a60c0908152695448454558414d504c4560b01b60e05291926200006d91600391620008a3565b50805162000083906004906020840190620008a3565b5050506000620000986200054460201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004432833981519152908290a35033600046600103620000fd5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200016f565b46600403620001225750737a250d5630b4cf539739df2c5dacb4c659f2488d6200016f565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000949565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000949565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000949565b600a80546001600160a01b0319166001600160a01b039290921691821790556200031890600162000548565b600a5462000331906001600160a01b03166001620005ab565b6b033b2e3c9fd0803ce800000060646200034d82600162000991565b620003599190620009b3565b60065560646200036b82600162000991565b620003779190620009b3565b60075560646200038982600162000991565b620003959190620009b3565b600855612710620003a882600562000991565b620003b49190620009b3565b600b556009601681905560006017819055620003d091620009d6565b6015556002601881905560016019819055601a91909155601b556009601d8190556000601e8190556200040391620009d6565b601c55600c80546001600160a01b031916734bea81d285808382306d501348210c1810e59e171790556200043983600162000548565b6200044630600162000548565b6200045561dead600162000548565b600c546200046e906001600160a01b0316600162000548565b60095462000487906001600160a01b0316600162000548565b6200049483600162000617565b620004a130600162000617565b620004b061dead600162000617565b600c54620004c9906001600160a01b0316600162000617565b600954620004e2906001600160a01b0316600162000617565b6200051c73d8da6bf26964af9d7eed9e03e53415d37aa9604560646200050a84600a62000991565b620005169190620009b3565b620006c1565b620005303060646200050a84605a62000991565b6200053b83620007a6565b50505062000a2d565b3390565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055620005db828262000548565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006625760405162461bcd60e51b8152602060048201819052602482015260008051602062004412833981519152604482015260640162000166565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000166565b80600260008282546200072d9190620009d6565b90915550506001600160a01b038216600090815260208190526040812080548392906200075c908490620009d6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007f15760405162461bcd60e51b8152602060048201819052602482015260008051602062004412833981519152604482015260640162000166565b6001600160a01b038116620008585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000166565b6005546040516001600160a01b038084169216906000805160206200443283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b828054620008b190620009f1565b90600052602060002090601f016020900481019282620008d5576000855562000920565b82601f10620008f057805160ff191683800117855562000920565b8280016001018555821562000920579182015b828111156200092057825182559160200191906001019062000903565b506200092e92915062000932565b5090565b5b808211156200092e576000815560010162000933565b6000602082840312156200095c57600080fd5b81516001600160a01b03811681146200097457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009ae57620009ae6200097b565b500290565b600082620009d157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009ec57620009ec6200097b565b500190565b600181811c9082168062000a0657607f821691505b60208210810362000a2757634e487b7160e01b600052602260045260246000fd5b50919050565b6139d58062000a3d6000396000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063d5fb5b171161010d578063efda1165116100a0578063f63743421161006f578063f637434214610afb578063f771cb6514610b11578063f8b45b0514610b32578063fed20c7814610b4857600080fd5b8063efda116514610a90578063f11a24d314610ab0578063f2fde38b14610ac6578063f5648a4f14610ae657600080fd5b8063e2f45605116100dc578063e2f4560514610a3a578063e7b71ce214610a50578063e884f26014610a65578063ee40166e14610a7a57600080fd5b8063d5fb5b171461099e578063d85ba063146109be578063dd62ed3e146109d4578063e1d9888f14610a1a57600080fd5b8063a62068ce11610185578063b987553911610154578063b987553914610925578063bbc0c74214610945578063c024666814610964578063c876d0b91461098457600080fd5b8063a62068ce1461089f578063a9059cbb146108b5578063b16d78cf146108d5578063b62496f5146108f557600080fd5b80639a7a23d6116101c15780639a7a23d61461082a578063a28e86d31461084a578063a457c2d71461085f578063a5ece9411461087f57600080fd5b80638da5cb5b146107c1578063906e9dd0146107df57806392136913146107ff57806395d89b411461081557600080fd5b806366ca9b83116102e2578063751039fc1161027557806382aa7c681161024457806382aa7c681461074b5780638366e79a1461076b57806385b12c7c1461078b57806388e765ff146107ab57600080fd5b8063751039fc146106e05780637571336a146106f55780637bce5a04146107155780637e926b4b1461072b57600080fd5b80636b0a894c116102b15780636b0a894c1461066a5780636ddd17131461068057806370a08231146106a0578063713318c1146106c057600080fd5b806366ca9b83146105fc57806366d602ae1461061c5780636a11afc6146106325780636a486a8e1461065457600080fd5b80631f3fed8f1161035a5780633950935111610329578063395093511461058b578063452ed4f1146105ab5780634a62bb65146105cb57806358a6d531146105e557600080fd5b80631f3fed8f1461051957806323b872dd1461052f578063243c20f71461054f578063313ce5671461056f57600080fd5b8063095ea7b311610396578063095ea7b31461049457806310d5de53146104b457806318160ddd146104e45780631a8145bb1461050357600080fd5b8063017e0192146103d357806302dbd8f81461041857806306fdde031461043a5780630758d9241461045c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506104036103ee3660046132ca565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042457600080fd5b506104386104333660046132ee565b610b68565b005b34801561044657600080fd5b5061044f610c08565b60405161040f9190613310565b34801561046857600080fd5b5060095461047c906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b3480156104a057600080fd5b506104036104af366004613365565b610c9a565b3480156104c057600080fd5b506104036104cf3660046132ca565b60226020526000908152604090205460ff1681565b3480156104f057600080fd5b506002545b60405190815260200161040f565b34801561050f57600080fd5b506104f560205481565b34801561052557600080fd5b506104f5601f5481565b34801561053b57600080fd5b5061040361054a366004613391565b610cb0565b34801561055b57600080fd5b5061043861056a3660046132ca565b610d5a565b34801561057b57600080fd5b506040516012815260200161040f565b34801561059757600080fd5b506104036105a6366004613365565b610e11565b3480156105b757600080fd5b50600a5461047c906001600160a01b031681565b3480156105d757600080fd5b506012546104039060ff1681565b3480156105f157600080fd5b50600e544310610403565b34801561060857600080fd5b506104386106173660046132ee565b610e4d565b34801561062857600080fd5b506104f560075481565b34801561063e57600080fd5b50610647610ee0565b60405161040f9190613416565b34801561066057600080fd5b506104f5601c5481565b34801561067657600080fd5b506104f560115481565b34801561068c57600080fd5b506012546104039062010000900460ff1681565b3480156106ac57600080fd5b506104f56106bb3660046132ca565b610f41565b3480156106cc57600080fd5b506104386106db36600461343f565b610f5c565b3480156106ec57600080fd5b50610438611006565b34801561070157600080fd5b50610438610710366004613512565b61103c565b34801561072157600080fd5b506104f560165481565b34801561073757600080fd5b5061043861074636600461354b565b611104565b34801561075757600080fd5b50610438610766366004613568565b6111c6565b34801561077757600080fd5b50610403610786366004613581565b6112ba565b34801561079757600080fd5b506104386107a6366004613568565b6114f4565b3480156107b757600080fd5b506104f560065481565b3480156107cd57600080fd5b506005546001600160a01b031661047c565b3480156107eb57600080fd5b506104386107fa3660046132ca565b6116e1565b34801561080b57600080fd5b506104f5601d5481565b34801561082157600080fd5b5061044f6117b9565b34801561083657600080fd5b50610438610845366004613512565b6117c8565b34801561085657600080fd5b506104386118bc565b34801561086b57600080fd5b5061040361087a366004613365565b6118f5565b34801561088b57600080fd5b50600c5461047c906001600160a01b031681565b3480156108ab57600080fd5b506104f5600e5481565b3480156108c157600080fd5b506104036108d0366004613365565b61198e565b3480156108e157600080fd5b506104386108f036600461354b565b61199b565b34801561090157600080fd5b506104036109103660046132ca565b60236020526000908152604090205460ff1681565b34801561093157600080fd5b5061043861094036600461354b565b611aab565b34801561095157600080fd5b5060125461040390610100900460ff1681565b34801561097057600080fd5b5061043861097f366004613512565b611b6a565b34801561099057600080fd5b506014546104039060ff1681565b3480156109aa57600080fd5b5061047c6109b9366004613568565b611bf3565b3480156109ca57600080fd5b506104f560155481565b3480156109e057600080fd5b506104f56109ef366004613581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2657600080fd5b50610438610a3536600461343f565b611c1d565b348015610a4657600080fd5b506104f5600b5481565b348015610a5c57600080fd5b50610438611cca565b348015610a7157600080fd5b50610438611d2e565b348015610a8657600080fd5b506104f5600d5481565b348015610a9c57600080fd5b50610438610aab366004613568565b611d64565b348015610abc57600080fd5b506104f560175481565b348015610ad257600080fd5b50610438610ae13660046132ca565b611f65565b348015610af257600080fd5b50610438612050565b348015610b0757600080fd5b506104f5601e5481565b348015610b1d57600080fd5b50601254610403906301000000900460ff1681565b348015610b3e57600080fd5b506104f560085481565b348015610b5457600080fd5b50610438610b633660046132ca565b6120bc565b6005546001600160a01b03163314610b9b5760405162461bcd60e51b8152600401610b92906135af565b60405180910390fd5b601d829055601e819055610baf81836135fa565b601c819055600a1015610c045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b92565b5050565b606060038054610c1790613612565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4390613612565b8015610c905780601f10610c6557610100808354040283529160200191610c90565b820191906000526020600020905b815481529060010190602001808311610c7357829003601f168201915b5050505050905090565b6000610ca733848461216f565b50600192915050565b6000610cbd848484612293565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d425760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b92565b610d4f853385840361216f565b506001949350505050565b6005546001600160a01b03163314610d845760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b0381166000908152600f602052604090205460ff1615610ded5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b92565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca7918590610e489086906135fa565b61216f565b6005546001600160a01b03163314610e775760405162461bcd60e51b8152600401610b92906135af565b60168290556017819055610e8b81836135fa565b6015819055600a1015610c045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b92565b60606010805480602002602001604051908101604052809291908181526020018280548015610c9057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f1a575050505050905090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f865760405162461bcd60e51b8152600401610b92906135af565b610258815110610fa85760405162461bcd60e51b8152600401610b929061364c565b60005b8151811015610c04576000828281518110610fc857610fc861369f565b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff191690555080610ffe816136b5565b915050610fab565b6005546001600160a01b031633146110305760405162461bcd60e51b8152600401610b92906135af565b6012805460ff19169055565b6005546001600160a01b031633146110665760405162461bcd60e51b8152600401610b92906135af565b806110d957600a546001600160a01b03908116908316036110d95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b92565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b92906135af565b8061117b5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b92565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146111f05760405162461bcd60e51b8152600401610b92906135af565b601254610100900460ff16156112485760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b92565b600a8111156112695760405162461bcd60e51b8152600401610b92906136ce565b6012805462ffff0019166201010017905543600d81905561128b9082906135fa565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146112e75760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b03831661133d5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b92565b6001600160a01b0383163014158061135d5750601254610100900460ff16155b6113c65760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b92565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190613715565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a8919061372e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461151e5760405162461bcd60e51b8152600401610b92906135af565b601254610100900460ff16156115465760405162461bcd60e51b8152600401610b929061374b565b600a81106115665760405162461bcd60e51b8152600401610b92906136ce565b6012805462ffff0019166201010017905543600d8190556115889082906135fa565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116115d45760405162461bcd60e51b8152600401610b9290613796565b60006115df30610f41565b1161163b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b92565b6009546116569030906001600160a01b0316610e4882610f41565b6009546001600160a01b031663f305d719473061167281610f41565b60008030426040518863ffffffff1660e01b8152600401611698969594939291906137d9565b60606040518083038185885af11580156116b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116db9190613814565b50505050565b6005546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b03811661176f5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b92565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610c1790613612565b6005546001600160a01b031633146117f25760405162461bcd60e51b8152600401610b92906135af565b600a546001600160a01b03908116908316036118765760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b92565b6118808282612d66565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118e65760405162461bcd60e51b8152600401610b92906135af565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b92565b611984338585840361216f565b5060019392505050565b6000610ca7338484612293565b6005546001600160a01b031633146119c55760405162461bcd60e51b8152600401610b92906135af565b80611a125760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610b92565b6012546301000000900460ff1615611a6c5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b92565b6012805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610b92906135af565b80611b225760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b92565b601254610100900460ff1615611b4a5760405162461bcd60e51b8152600401610b929061374b565b600047116115d45760405162461bcd60e51b8152600401610b9290613796565b6005546001600160a01b03163314611b945760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611c0357600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611c475760405162461bcd60e51b8152600401610b92906135af565b610258815110611c695760405162461bcd60e51b8152600401610b929061364c565b60005b8151811015610c04576000828281518110611c8957611c8961369f565b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff191660011790555080611cc2816136b5565b915050611c6c565b6005546001600160a01b03163314611cf45760405162461bcd60e51b8152600401610b92906135af565b60185460168190556019546017819055611d0d916135fa565b601555601a54601d819055601b54601e819055611d29916135fa565b601c55565b6005546001600160a01b03163314611d585760405162461bcd60e51b8152600401610b92906135af565b6014805460ff19169055565b6005546001600160a01b03163314611d8e5760405162461bcd60e51b8152600401610b92906135af565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb9190613715565b905060008111611e4d5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b92565b6000612710611e5c8484613842565b611e669190613861565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee1919061372e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90611f1c90309085906001908190339042906004016137d9565b60408051808303816000875af1158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190613883565b5050505050565b6005546001600160a01b03163314611f8f5760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b038116611ff45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b92565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461207a5760405162461bcd60e51b8152600401610b92906135af565b604051600090339047908381818185875af1925050503d80600081146116db576040519150601f19603f3d011682016040523d82523d6000602084013e6116db565b6005546001600160a01b031633146120e65760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b0381166000908152600f602052604090205460ff1661214e5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b92565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166121d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b92565b6001600160a01b0382166122325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b92565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b8152600401610b92906138a7565b6001600160a01b0382166122df5760405162461bcd60e51b8152600401610b92906138ec565b6000811161232f5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b92565b601254610100900460ff166123c2576001600160a01b03831660009081526021602052604090205460ff168061237d57506001600160a01b03821660009081526021602052604090205460ff165b6123c25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b92565b600e5443101580156123db5750601254610100900460ff165b156124ab576001600160a01b0383166000908152600f602052604090205460ff16158061241557506005546001600160a01b038381169116145b8061242a57506001600160a01b03821661dead145b6124ab5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b92565b60125460ff16156128d5576005546001600160a01b038481169116148015906124e257506005546001600160a01b03838116911614155b80156124f957506001600160a01b03821661dead14155b801561251e57506001600160a01b03831660009081526021602052604090205460ff16155b801561254357506001600160a01b03821660009081526021602052604090205460ff16155b156128d55760145460ff161561265c576009546001600160a01b0383811691161480159061257f5750600a546001600160a01b03838116911614155b1561265c5761258f60024361392f565b326000908152601360205260409020541080156125cd57506125b260024361392f565b6001600160a01b038316600090815260136020526040902054105b6126375760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b92565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561269d57506001600160a01b03821660009081526022602052604090205460ff16155b15612764576006548111156127055760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b92565b60085461271183610f41565b61271b90836135fa565b111561275f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b92565b6128d5565b6001600160a01b03821660009081526023602052604090205460ff1680156127a557506001600160a01b03831660009081526022602052604090205460ff16155b1561285b576012546301000000900460ff166127f65760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610b92565b60075481111561275f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b92565b6001600160a01b03821660009081526022602052604090205460ff166128d55760085461288783610f41565b61289190836135fa565b11156128d55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b92565b60006128e030610f41565b600b54909150811080159081906128ff575060125462010000900460ff165b80156129155750600a54600160a01b900460ff16155b801561293957506001600160a01b03841660009081526023602052604090205460ff165b1561296757600a805460ff60a01b1916600160a01b179055612959612d94565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff16806129a957506001600160a01b03851660009081526021602052604090205460ff165b156129b2575060005b60008115612d5257600e544310806129f85750670c7d713b49da00006006546129db919061392f565b85101580156129f8575043600e5460086129f591906135fa565b10155b8015612a1c57506001600160a01b03871660009081526023602052604090205460ff165b8015612a4157506001600160a01b03861660009081526023602052604090205460ff16155b8015612a6657506001600160a01b03861660009081526021602052604090205460ff16155b8015612a7457506000601554115b15612bfb57600e544310612a9b57600160066000828254612a95919061392f565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612b7b576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612af49084906135fa565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b88866063613842565b612b929190613861565b905060155460175482612ba59190613842565b612baf9190613861565b60206000828254612bc091906135fa565b9091555050601554601654612bd59083613842565b612bdf9190613861565b601f6000828254612bf091906135fa565b90915550612d349050565b6001600160a01b03861660009081526023602052604090205460ff168015612c2557506000601c54115b15612c87576064601c5486612c3a9190613842565b612c449190613861565b9050601c54601e5482612c579190613842565b612c619190613861565b60206000828254612c7291906135fa565b9091555050601c54601d54612bd59083613842565b6001600160a01b03871660009081526023602052604090205460ff168015612cb157506000601554115b15612d3457606460155486612cc69190613842565b612cd09190613861565b905060155460175482612ce39190613842565b612ced9190613861565b60206000828254612cfe91906135fa565b9091555050601554601654612d139083613842565b612d1d9190613861565b601f6000828254612d2e91906135fa565b90915550505b8015612d4557612d45873083612ef6565b612d4f818661392f565b94505b612d5d878787612ef6565b50505050505050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611880828261304b565b6000612d9f30610f41565b90506000601f54602054612db391906135fa565b9050811580612dc0575080155b15612dc9575050565b600b54612dd790600a613842565b821115612def57600b54612dec90600a613842565b91505b60008060028360205486612e039190613842565b612e0d9190613861565b612e179190613861565b9050612e2b612e26828661392f565b6130ae565b60205447908190600090612e4190600290613861565b612e4b908761392f565b601f54612e589085613842565b612e629190613861565b9050612e6e818361392f565b60006020819055601f5591508315801590612e895750600082115b15612e9857612e988483613208565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612ee5576040519150601f19603f3d011682016040523d82523d6000602084013e612eea565b606091505b50505050505050505050565b6001600160a01b038316612f1c5760405162461bcd60e51b8152600401610b92906138a7565b6001600160a01b038216612f425760405162461bcd60e51b8152600401610b92906138ec565b6001600160a01b03831660009081526020819052604090205481811015612fba5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b92565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ff19084906135fa565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161303d91815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130e3576130e361369f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561313c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131609190613946565b816001815181106131735761317361369f565b6001600160a01b039283166020918202929092010152600954613199913091168461216f565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906131d2908590600090869030904290600401613963565b600060405180830381600087803b1580156131ec57600080fd5b505af1158015613200573d6000803e3d6000fd5b505050505050565b6009546132209030906001600160a01b03168461216f565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061325f9030908790600090819061dead9042906004016137d9565b60606040518083038185885af115801561327d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5e9190613814565b6001600160a01b03811681146132b757600080fd5b50565b80356132c5816132a2565b919050565b6000602082840312156132dc57600080fd5b81356132e7816132a2565b9392505050565b6000806040838503121561330157600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561333d57858101830151858201604001528201613321565b8181111561334f576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561337857600080fd5b8235613383816132a2565b946020939093013593505050565b6000806000606084860312156133a657600080fd5b83356133b1816132a2565b925060208401356133c1816132a2565b929592945050506040919091013590565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b6020815260006132e760208301846133d2565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561345257600080fd5b823567ffffffffffffffff8082111561346a57600080fd5b818501915085601f83011261347e57600080fd5b81358181111561349057613490613429565b8060051b604051601f19603f830116810181811085821117156134b5576134b5613429565b6040529182528482019250838101850191888311156134d357600080fd5b938501935b828510156134f8576134e9856132ba565b845293850193928501926134d8565b98975050505050505050565b80151581146132b757600080fd5b6000806040838503121561352557600080fd5b8235613530816132a2565b9150602083013561354081613504565b809150509250929050565b60006020828403121561355d57600080fd5b81356132e781613504565b60006020828403121561357a57600080fd5b5035919050565b6000806040838503121561359457600080fd5b823561359f816132a2565b91506020830135613540816132a2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561360d5761360d6135e4565b500190565b600181811c9082168061362657607f821691505b60208210810361364657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526033908201527f43616e206f6e6c79206d61726b203630302077616c6c657473207065722074786040820152726e2064756520746f20676173206c696d69747360681b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136c7576136c76135e4565b5060010190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561372757600080fd5b5051919050565b60006020828403121561374057600080fd5b81516132e781613504565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382957600080fd5b8351925060208401519150604084015190509250925092565b600081600019048311821515161561385c5761385c6135e4565b500290565b60008261387e57634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561389657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613941576139416135e4565b500390565b60006020828403121561395857600080fd5b81516132e7816132a2565b85815284602082015260a06040820152600061398260a08301866133d2565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212203c7e365665c7577e9c0cb21e48f3fb4fcf070c188510597c2a36145f0080589664736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063d5fb5b171161010d578063efda1165116100a0578063f63743421161006f578063f637434214610afb578063f771cb6514610b11578063f8b45b0514610b32578063fed20c7814610b4857600080fd5b8063efda116514610a90578063f11a24d314610ab0578063f2fde38b14610ac6578063f5648a4f14610ae657600080fd5b8063e2f45605116100dc578063e2f4560514610a3a578063e7b71ce214610a50578063e884f26014610a65578063ee40166e14610a7a57600080fd5b8063d5fb5b171461099e578063d85ba063146109be578063dd62ed3e146109d4578063e1d9888f14610a1a57600080fd5b8063a62068ce11610185578063b987553911610154578063b987553914610925578063bbc0c74214610945578063c024666814610964578063c876d0b91461098457600080fd5b8063a62068ce1461089f578063a9059cbb146108b5578063b16d78cf146108d5578063b62496f5146108f557600080fd5b80639a7a23d6116101c15780639a7a23d61461082a578063a28e86d31461084a578063a457c2d71461085f578063a5ece9411461087f57600080fd5b80638da5cb5b146107c1578063906e9dd0146107df57806392136913146107ff57806395d89b411461081557600080fd5b806366ca9b83116102e2578063751039fc1161027557806382aa7c681161024457806382aa7c681461074b5780638366e79a1461076b57806385b12c7c1461078b57806388e765ff146107ab57600080fd5b8063751039fc146106e05780637571336a146106f55780637bce5a04146107155780637e926b4b1461072b57600080fd5b80636b0a894c116102b15780636b0a894c1461066a5780636ddd17131461068057806370a08231146106a0578063713318c1146106c057600080fd5b806366ca9b83146105fc57806366d602ae1461061c5780636a11afc6146106325780636a486a8e1461065457600080fd5b80631f3fed8f1161035a5780633950935111610329578063395093511461058b578063452ed4f1146105ab5780634a62bb65146105cb57806358a6d531146105e557600080fd5b80631f3fed8f1461051957806323b872dd1461052f578063243c20f71461054f578063313ce5671461056f57600080fd5b8063095ea7b311610396578063095ea7b31461049457806310d5de53146104b457806318160ddd146104e45780631a8145bb1461050357600080fd5b8063017e0192146103d357806302dbd8f81461041857806306fdde031461043a5780630758d9241461045c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506104036103ee3660046132ca565b600f6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042457600080fd5b506104386104333660046132ee565b610b68565b005b34801561044657600080fd5b5061044f610c08565b60405161040f9190613310565b34801561046857600080fd5b5060095461047c906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b3480156104a057600080fd5b506104036104af366004613365565b610c9a565b3480156104c057600080fd5b506104036104cf3660046132ca565b60226020526000908152604090205460ff1681565b3480156104f057600080fd5b506002545b60405190815260200161040f565b34801561050f57600080fd5b506104f560205481565b34801561052557600080fd5b506104f5601f5481565b34801561053b57600080fd5b5061040361054a366004613391565b610cb0565b34801561055b57600080fd5b5061043861056a3660046132ca565b610d5a565b34801561057b57600080fd5b506040516012815260200161040f565b34801561059757600080fd5b506104036105a6366004613365565b610e11565b3480156105b757600080fd5b50600a5461047c906001600160a01b031681565b3480156105d757600080fd5b506012546104039060ff1681565b3480156105f157600080fd5b50600e544310610403565b34801561060857600080fd5b506104386106173660046132ee565b610e4d565b34801561062857600080fd5b506104f560075481565b34801561063e57600080fd5b50610647610ee0565b60405161040f9190613416565b34801561066057600080fd5b506104f5601c5481565b34801561067657600080fd5b506104f560115481565b34801561068c57600080fd5b506012546104039062010000900460ff1681565b3480156106ac57600080fd5b506104f56106bb3660046132ca565b610f41565b3480156106cc57600080fd5b506104386106db36600461343f565b610f5c565b3480156106ec57600080fd5b50610438611006565b34801561070157600080fd5b50610438610710366004613512565b61103c565b34801561072157600080fd5b506104f560165481565b34801561073757600080fd5b5061043861074636600461354b565b611104565b34801561075757600080fd5b50610438610766366004613568565b6111c6565b34801561077757600080fd5b50610403610786366004613581565b6112ba565b34801561079757600080fd5b506104386107a6366004613568565b6114f4565b3480156107b757600080fd5b506104f560065481565b3480156107cd57600080fd5b506005546001600160a01b031661047c565b3480156107eb57600080fd5b506104386107fa3660046132ca565b6116e1565b34801561080b57600080fd5b506104f5601d5481565b34801561082157600080fd5b5061044f6117b9565b34801561083657600080fd5b50610438610845366004613512565b6117c8565b34801561085657600080fd5b506104386118bc565b34801561086b57600080fd5b5061040361087a366004613365565b6118f5565b34801561088b57600080fd5b50600c5461047c906001600160a01b031681565b3480156108ab57600080fd5b506104f5600e5481565b3480156108c157600080fd5b506104036108d0366004613365565b61198e565b3480156108e157600080fd5b506104386108f036600461354b565b61199b565b34801561090157600080fd5b506104036109103660046132ca565b60236020526000908152604090205460ff1681565b34801561093157600080fd5b5061043861094036600461354b565b611aab565b34801561095157600080fd5b5060125461040390610100900460ff1681565b34801561097057600080fd5b5061043861097f366004613512565b611b6a565b34801561099057600080fd5b506014546104039060ff1681565b3480156109aa57600080fd5b5061047c6109b9366004613568565b611bf3565b3480156109ca57600080fd5b506104f560155481565b3480156109e057600080fd5b506104f56109ef366004613581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2657600080fd5b50610438610a3536600461343f565b611c1d565b348015610a4657600080fd5b506104f5600b5481565b348015610a5c57600080fd5b50610438611cca565b348015610a7157600080fd5b50610438611d2e565b348015610a8657600080fd5b506104f5600d5481565b348015610a9c57600080fd5b50610438610aab366004613568565b611d64565b348015610abc57600080fd5b506104f560175481565b348015610ad257600080fd5b50610438610ae13660046132ca565b611f65565b348015610af257600080fd5b50610438612050565b348015610b0757600080fd5b506104f5601e5481565b348015610b1d57600080fd5b50601254610403906301000000900460ff1681565b348015610b3e57600080fd5b506104f560085481565b348015610b5457600080fd5b50610438610b633660046132ca565b6120bc565b6005546001600160a01b03163314610b9b5760405162461bcd60e51b8152600401610b92906135af565b60405180910390fd5b601d829055601e819055610baf81836135fa565b601c819055600a1015610c045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b92565b5050565b606060038054610c1790613612565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4390613612565b8015610c905780601f10610c6557610100808354040283529160200191610c90565b820191906000526020600020905b815481529060010190602001808311610c7357829003601f168201915b5050505050905090565b6000610ca733848461216f565b50600192915050565b6000610cbd848484612293565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d425760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b92565b610d4f853385840361216f565b506001949350505050565b6005546001600160a01b03163314610d845760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b0381166000908152600f602052604090205460ff1615610ded5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b92565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca7918590610e489086906135fa565b61216f565b6005546001600160a01b03163314610e775760405162461bcd60e51b8152600401610b92906135af565b60168290556017819055610e8b81836135fa565b6015819055600a1015610c045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b92565b60606010805480602002602001604051908101604052809291908181526020018280548015610c9057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f1a575050505050905090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f865760405162461bcd60e51b8152600401610b92906135af565b610258815110610fa85760405162461bcd60e51b8152600401610b929061364c565b60005b8151811015610c04576000828281518110610fc857610fc861369f565b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff191690555080610ffe816136b5565b915050610fab565b6005546001600160a01b031633146110305760405162461bcd60e51b8152600401610b92906135af565b6012805460ff19169055565b6005546001600160a01b031633146110665760405162461bcd60e51b8152600401610b92906135af565b806110d957600a546001600160a01b03908116908316036110d95760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b92565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b92906135af565b8061117b5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b92565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b031633146111f05760405162461bcd60e51b8152600401610b92906135af565b601254610100900460ff16156112485760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b92565b600a8111156112695760405162461bcd60e51b8152600401610b92906136ce565b6012805462ffff0019166201010017905543600d81905561128b9082906135fa565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146112e75760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b03831661133d5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b92565b6001600160a01b0383163014158061135d5750601254610100900460ff16155b6113c65760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b92565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190613715565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a8919061372e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461151e5760405162461bcd60e51b8152600401610b92906135af565b601254610100900460ff16156115465760405162461bcd60e51b8152600401610b929061374b565b600a81106115665760405162461bcd60e51b8152600401610b92906136ce565b6012805462ffff0019166201010017905543600d8190556115889082906135fa565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116115d45760405162461bcd60e51b8152600401610b9290613796565b60006115df30610f41565b1161163b5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b92565b6009546116569030906001600160a01b0316610e4882610f41565b6009546001600160a01b031663f305d719473061167281610f41565b60008030426040518863ffffffff1660e01b8152600401611698969594939291906137d9565b60606040518083038185885af11580156116b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116db9190613814565b50505050565b6005546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b03811661176f5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b92565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b606060048054610c1790613612565b6005546001600160a01b031633146117f25760405162461bcd60e51b8152600401610b92906135af565b600a546001600160a01b03908116908316036118765760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b92565b6118808282612d66565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118e65760405162461bcd60e51b8152600401610b92906135af565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b92565b611984338585840361216f565b5060019392505050565b6000610ca7338484612293565b6005546001600160a01b031633146119c55760405162461bcd60e51b8152600401610b92906135af565b80611a125760405162461bcd60e51b815260206004820152601860248201527f436f6e6669726d2073656c6c696e6720656e61626c65642100000000000000006044820152606401610b92565b6012546301000000900460ff1615611a6c5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b92565b6012805463ff000000191663010000001790556040517f9392259d24d71f51fdce621059e3218b1271b2a2781a380c58fff224548c193c90600090a150565b6005546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610b92906135af565b80611b225760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610b92565b601254610100900460ff1615611b4a5760405162461bcd60e51b8152600401610b929061374b565b600047116115d45760405162461bcd60e51b8152600401610b9290613796565b6005546001600160a01b03163314611b945760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60108181548110611c0357600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611c475760405162461bcd60e51b8152600401610b92906135af565b610258815110611c695760405162461bcd60e51b8152600401610b929061364c565b60005b8151811015610c04576000828281518110611c8957611c8961369f565b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff191660011790555080611cc2816136b5565b915050611c6c565b6005546001600160a01b03163314611cf45760405162461bcd60e51b8152600401610b92906135af565b60185460168190556019546017819055611d0d916135fa565b601555601a54601d819055601b54601e819055611d29916135fa565b601c55565b6005546001600160a01b03163314611d585760405162461bcd60e51b8152600401610b92906135af565b6014805460ff19169055565b6005546001600160a01b03163314611d8e5760405162461bcd60e51b8152600401610b92906135af565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfb9190613715565b905060008111611e4d5760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610b92565b6000612710611e5c8484613842565b611e669190613861565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee1919061372e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90611f1c90309085906001908190339042906004016137d9565b60408051808303816000875af1158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190613883565b5050505050565b6005546001600160a01b03163314611f8f5760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b038116611ff45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b92565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461207a5760405162461bcd60e51b8152600401610b92906135af565b604051600090339047908381818185875af1925050503d80600081146116db576040519150601f19603f3d011682016040523d82523d6000602084013e6116db565b6005546001600160a01b031633146120e65760405162461bcd60e51b8152600401610b92906135af565b6001600160a01b0381166000908152600f602052604090205460ff1661214e5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610b92565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6001600160a01b0383166121d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b92565b6001600160a01b0382166122325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b92565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b8152600401610b92906138a7565b6001600160a01b0382166122df5760405162461bcd60e51b8152600401610b92906138ec565b6000811161232f5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b92565b601254610100900460ff166123c2576001600160a01b03831660009081526021602052604090205460ff168061237d57506001600160a01b03821660009081526021602052604090205460ff165b6123c25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b92565b600e5443101580156123db5750601254610100900460ff165b156124ab576001600160a01b0383166000908152600f602052604090205460ff16158061241557506005546001600160a01b038381169116145b8061242a57506001600160a01b03821661dead145b6124ab5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b92565b60125460ff16156128d5576005546001600160a01b038481169116148015906124e257506005546001600160a01b03838116911614155b80156124f957506001600160a01b03821661dead14155b801561251e57506001600160a01b03831660009081526021602052604090205460ff16155b801561254357506001600160a01b03821660009081526021602052604090205460ff16155b156128d55760145460ff161561265c576009546001600160a01b0383811691161480159061257f5750600a546001600160a01b03838116911614155b1561265c5761258f60024361392f565b326000908152601360205260409020541080156125cd57506125b260024361392f565b6001600160a01b038316600090815260136020526040902054105b6126375760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b92565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561269d57506001600160a01b03821660009081526022602052604090205460ff16155b15612764576006548111156127055760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b92565b60085461271183610f41565b61271b90836135fa565b111561275f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b92565b6128d5565b6001600160a01b03821660009081526023602052604090205460ff1680156127a557506001600160a01b03831660009081526022602052604090205460ff16155b1561285b576012546301000000900460ff166127f65760405162461bcd60e51b815260206004820152601060248201526f14d95b1b1a5b99c8191a5cd8589b195960821b6044820152606401610b92565b60075481111561275f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b92565b6001600160a01b03821660009081526022602052604090205460ff166128d55760085461288783610f41565b61289190836135fa565b11156128d55760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b92565b60006128e030610f41565b600b54909150811080159081906128ff575060125462010000900460ff165b80156129155750600a54600160a01b900460ff16155b801561293957506001600160a01b03841660009081526023602052604090205460ff165b1561296757600a805460ff60a01b1916600160a01b179055612959612d94565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff16806129a957506001600160a01b03851660009081526021602052604090205460ff165b156129b2575060005b60008115612d5257600e544310806129f85750670c7d713b49da00006006546129db919061392f565b85101580156129f8575043600e5460086129f591906135fa565b10155b8015612a1c57506001600160a01b03871660009081526023602052604090205460ff165b8015612a4157506001600160a01b03861660009081526023602052604090205460ff16155b8015612a6657506001600160a01b03861660009081526021602052604090205460ff16155b8015612a7457506000601554115b15612bfb57600e544310612a9b57600160066000828254612a95919061392f565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff16612b7b576001600160a01b0386166000908152600f60205260408120805460ff191660019081179091556011805491929091612af49084906135fa565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612b88866063613842565b612b929190613861565b905060155460175482612ba59190613842565b612baf9190613861565b60206000828254612bc091906135fa565b9091555050601554601654612bd59083613842565b612bdf9190613861565b601f6000828254612bf091906135fa565b90915550612d349050565b6001600160a01b03861660009081526023602052604090205460ff168015612c2557506000601c54115b15612c87576064601c5486612c3a9190613842565b612c449190613861565b9050601c54601e5482612c579190613842565b612c619190613861565b60206000828254612c7291906135fa565b9091555050601c54601d54612bd59083613842565b6001600160a01b03871660009081526023602052604090205460ff168015612cb157506000601554115b15612d3457606460155486612cc69190613842565b612cd09190613861565b905060155460175482612ce39190613842565b612ced9190613861565b60206000828254612cfe91906135fa565b9091555050601554601654612d139083613842565b612d1d9190613861565b601f6000828254612d2e91906135fa565b90915550505b8015612d4557612d45873083612ef6565b612d4f818661392f565b94505b612d5d878787612ef6565b50505050505050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611880828261304b565b6000612d9f30610f41565b90506000601f54602054612db391906135fa565b9050811580612dc0575080155b15612dc9575050565b600b54612dd790600a613842565b821115612def57600b54612dec90600a613842565b91505b60008060028360205486612e039190613842565b612e0d9190613861565b612e179190613861565b9050612e2b612e26828661392f565b6130ae565b60205447908190600090612e4190600290613861565b612e4b908761392f565b601f54612e589085613842565b612e629190613861565b9050612e6e818361392f565b60006020819055601f5591508315801590612e895750600082115b15612e9857612e988483613208565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612ee5576040519150601f19603f3d011682016040523d82523d6000602084013e612eea565b606091505b50505050505050505050565b6001600160a01b038316612f1c5760405162461bcd60e51b8152600401610b92906138a7565b6001600160a01b038216612f425760405162461bcd60e51b8152600401610b92906138ec565b6001600160a01b03831660009081526020819052604090205481811015612fba5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b92565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ff19084906135fa565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161303d91815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130e3576130e361369f565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561313c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131609190613946565b816001815181106131735761317361369f565b6001600160a01b039283166020918202929092010152600954613199913091168461216f565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906131d2908590600090869030904290600401613963565b600060405180830381600087803b1580156131ec57600080fd5b505af1158015613200573d6000803e3d6000fd5b505050505050565b6009546132209030906001600160a01b03168461216f565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061325f9030908790600090819061dead9042906004016137d9565b60606040518083038185885af115801561327d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f5e9190613814565b6001600160a01b03811681146132b757600080fd5b50565b80356132c5816132a2565b919050565b6000602082840312156132dc57600080fd5b81356132e7816132a2565b9392505050565b6000806040838503121561330157600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561333d57858101830151858201604001528201613321565b8181111561334f576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561337857600080fd5b8235613383816132a2565b946020939093013593505050565b6000806000606084860312156133a657600080fd5b83356133b1816132a2565b925060208401356133c1816132a2565b929592945050506040919091013590565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b6020815260006132e760208301846133d2565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561345257600080fd5b823567ffffffffffffffff8082111561346a57600080fd5b818501915085601f83011261347e57600080fd5b81358181111561349057613490613429565b8060051b604051601f19603f830116810181811085821117156134b5576134b5613429565b6040529182528482019250838101850191888311156134d357600080fd5b938501935b828510156134f8576134e9856132ba565b845293850193928501926134d8565b98975050505050505050565b80151581146132b757600080fd5b6000806040838503121561352557600080fd5b8235613530816132a2565b9150602083013561354081613504565b809150509250929050565b60006020828403121561355d57600080fd5b81356132e781613504565b60006020828403121561357a57600080fd5b5035919050565b6000806040838503121561359457600080fd5b823561359f816132a2565b91506020830135613540816132a2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561360d5761360d6135e4565b500190565b600181811c9082168061362657607f821691505b60208210810361364657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526033908201527f43616e206f6e6c79206d61726b203630302077616c6c657473207065722074786040820152726e2064756520746f20676173206c696d69747360681b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600182016136c7576136c76135e4565b5060010190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60006020828403121561372757600080fd5b5051919050565b60006020828403121561374057600080fd5b81516132e781613504565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382957600080fd5b8351925060208401519150604084015190509250925092565b600081600019048311821515161561385c5761385c6135e4565b500290565b60008261387e57634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561389657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613941576139416135e4565b500390565b60006020828403121561395857600080fd5b81516132e7816132a2565b85815284602082015260a06040820152600061398260a08301866133d2565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212203c7e365665c7577e9c0cb21e48f3fb4fcf070c188510597c2a36145f0080589664736f6c634300080d0033

Deployed Bytecode Sourcemap

10707:21524:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11110:44;;;;;;;;;;-1:-1:-1;11110:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;11110:44:0;;;;;;;;18146:340;;;;;;;;;;-1:-1:-1;18146:340:0;;;;;:::i;:::-;;:::i;:::-;;4059:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10854:27::-;;;;;;;;;;-1:-1:-1;10854:27:0;;;;-1:-1:-1;;;;;10854:27:0;;;;;;-1:-1:-1;;;;;1770:32:1;;;1752:51;;1740:2;1725:18;10854:27:0;1588:221:1;5114:210:0;;;;;;;;;;-1:-1:-1;5114:210:0;;;;;:::i;:::-;;:::i;12054:63::-;;;;;;;;;;-1:-1:-1;12054:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4380:108;;;;;;;;;;-1:-1:-1;4468:12:0;;4380:108;;;2280:25:1;;;2268:2;2253:18;4380:108:0;2134:177:1;11953:33:0;;;;;;;;;;;;;;;;11913;;;;;;;;;;;;;;;;5332:529;;;;;;;;;;-1:-1:-1;5332:529:0;;;;;:::i;:::-;;:::i;15550:169::-;;;;;;;;;;-1:-1:-1;15550:169:0;;;;;:::i;:::-;;:::i;4279:93::-;;;;;;;;;;-1:-1:-1;4279:93:0;;4362:2;2919:36:1;;2907:2;2892:18;4279:93:0;2777:184:1;5869:297:0;;;;;;;;;;-1:-1:-1;5869:297:0;;;;;:::i;:::-;;:::i;10888:21::-;;;;;;;;;;-1:-1:-1;10888:21:0;;;;-1:-1:-1;;;;;10888:21:0;;;11228:33;;;;;;;;;;-1:-1:-1;11228:33:0;;;;;;;;24528:121;;;;;;;;;;-1:-1:-1;24623:18:0;;24608:12;:33;24528:121;;17805:333;;;;;;;;;;-1:-1:-1;17805:333:0;;;;;:::i;:::-;;:::i;10786:28::-;;;;;;;;;;;;;;;;15259:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11800:28::-;;;;;;;;;;;;;;;;11194:25;;;;;;;;;;;;;;;;11308:31;;;;;;;;;;-1:-1:-1;11308:31:0;;;;;;;;;;;4496:177;;;;;;;;;;-1:-1:-1;4496:177:0;;;;;:::i;:::-;;:::i;16097:365::-;;;;;;;;;;-1:-1:-1;16097:365:0;;;;;:::i;:::-;;:::i;28188:84::-;;;;;;;;;;;;;:::i;16858:334::-;;;;;;;;;;-1:-1:-1;16858:334:0;;;;;:::i;:::-;;:::i;11542:30::-;;;;;;;;;;;;;;;;8590:265;;;;;;;;;;-1:-1:-1;8590:265:0;;;;;:::i;:::-;;:::i;28754:464::-;;;;;;;;;;-1:-1:-1;28754:464:0;;;;;:::i;:::-;;:::i;27024:567::-;;;;;;;;;;-1:-1:-1;27024:567:0;;;;;:::i;:::-;;:::i;31063:1165::-;;;;;;;;;;-1:-1:-1;31063:1165:0;;;;;:::i;:::-;;:::i;10752:27::-;;;;;;;;;;;;;;;;8376:79;;;;;;;;;;-1:-1:-1;8441:6:0;;-1:-1:-1;;;;;8441:6:0;8376:79;;27854:326;;;;;;;;;;-1:-1:-1;27854:326:0;;;;;:::i;:::-;;:::i;11835:31::-;;;;;;;;;;;;;;;;4167:104;;;;;;;;;;;;;:::i;17200:353::-;;;;;;;;;;-1:-1:-1;17200:353:0;;;;;:::i;:::-;;:::i;28280:84::-;;;;;;;;;;;;;:::i;6174:482::-;;;;;;;;;;-1:-1:-1;6174:482:0;;;;;:::i;:::-;;:::i;10986:31::-;;;;;;;;;;-1:-1:-1;10986:31:0;;;;-1:-1:-1;;;;;10986:31:0;;;11070:33;;;;;;;;;;;;;;;;4681:216;;;;;;;;;;-1:-1:-1;4681:216:0;;;;;:::i;:::-;;:::i;30768:287::-;;;;;;;;;;-1:-1:-1;30768:287:0;;;;;:::i;:::-;;:::i;12124:57::-;;;;;;;;;;-1:-1:-1;12124:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29226:861;;;;;;;;;;-1:-1:-1;29226:861:0;;;;;:::i;:::-;;:::i;11268:33::-;;;;;;;;;;-1:-1:-1;11268:33:0;;;;;;;;;;;18494:182;;;;;;;;;;-1:-1:-1;18494:182:0;;;;;:::i;:::-;;:::i;11460:39::-;;;;;;;;;;-1:-1:-1;11460:39:0;;;;;;;;11161:26;;;;;;;;;;-1:-1:-1;11161:26:0;;;;;:::i;:::-;;:::i;11508:27::-;;;;;;;;;;;;;;;;4905:201;;;;;;;;;;-1:-1:-1;4905:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5071:18:0;;;5039:7;5071:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4905:201;15727:362;;;;;;;;;;-1:-1:-1;15727:362:0;;;;;:::i;:::-;;:::i;10946:33::-;;;;;;;;;;;;;;;;28372:374;;;;;;;;;;;;;:::i;16523:98::-;;;;;;;;;;;;;:::i;11026:37::-;;;;;;;;;;;;;;;;30095:665;;;;;;;;;;-1:-1:-1;30095:665:0;;;;;:::i;:::-;;:::i;11579:30::-;;;;;;;;;;;;;;;;8863:281;;;;;;;;;;-1:-1:-1;8863:281:0;;;;;:::i;:::-;;:::i;27661:185::-;;;;;;;;;;;;;:::i;11873:31::-;;;;;;;;;;;;;;;;11346:34;;;;;;;;;;-1:-1:-1;11346:34:0;;;;;;;;;;;10821:24;;;;;;;;;;;;;;;;15367:175;;;;;;;;;;-1:-1:-1;15367:175:0;;;;;:::i;:::-;;:::i;18146:340::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;;;;;;;;;18269:16:::1;:32:::0;;;18312:16:::1;:32:::0;;;18371:35:::1;18331:13:::0;18288;18371:35:::1;:::i;:::-;18355:13;:51:::0;;;18442:2:::1;-1:-1:-1::0;18425:19:0::1;18417:61;;;::::0;-1:-1:-1;;;18417:61:0;;7326:2:1;18417:61:0::1;::::0;::::1;7308:21:1::0;7365:2;7345:18;;;7338:30;7404:31;7384:18;;;7377:59;7453:18;;18417:61:0::1;7124:353:1::0;18417:61:0::1;18146:340:::0;;:::o;4059:100::-;4113:13;4146:5;4139:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4059:100;:::o;5114:210::-;5233:4;5255:39;209:10;5278:7;5287:6;5255:8;:39::i;:::-;-1:-1:-1;5312:4:0;5114:210;;;;:::o;5332:529::-;5472:4;5489:36;5499:6;5507:9;5518:6;5489:9;:36::i;:::-;-1:-1:-1;;;;;5565:19:0;;5538:24;5565:19;;;:11;:19;;;;;;;;209:10;5565:33;;;;;;;;5631:26;;;;5609:116;;;;-1:-1:-1;;;5609:116:0;;8069:2:1;5609:116:0;;;8051:21:1;8108:2;8088:18;;;8081:30;8147:34;8127:18;;;8120:62;-1:-1:-1;;;8198:18:1;;;8191:38;8246:19;;5609:116:0;7867:404:1;5609:116:0;5761:57;5770:6;209:10;5811:6;5792:16;:25;5761:8;:57::i;:::-;-1:-1:-1;5849:4:0;;5332:529;-1:-1:-1;;;;5332:529:0:o;15550:169::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15622:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;15621:21;15613:60;;;::::0;-1:-1:-1;;;15613:60:0;;8478:2:1;15613:60:0::1;::::0;::::1;8460:21:1::0;8517:2;8497:18;;;8490:30;8556:28;8536:18;;;8529:56;8602:18;;15613:60:0::1;8276:350:1::0;15613:60:0::1;-1:-1:-1::0;;;;;15684:20:0::1;;::::0;;;:12:::1;:20;::::0;;;;:27;;-1:-1:-1;;15684:27:0::1;15707:4;15684:27;::::0;;15550:169::o;5869:297::-;209:10;5984:4;6078:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6078:34:0;;;;;;;;;;5984:4;;6006:130;;6056:7;;6078:47;;6115:10;;6078:47;:::i;:::-;6006:8;:130::i;17805:333::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;17927:15:::1;:31:::0;;;17969:15:::1;:31:::0;;;18026:33:::1;17987:13:::0;17945;18026:33:::1;:::i;:::-;18011:12;:48:::0;;;18094:2:::1;-1:-1:-1::0;18078:18:0::1;18070:60;;;::::0;-1:-1:-1;;;18070:60:0;;7326:2:1;18070:60:0::1;::::0;::::1;7308:21:1::0;7365:2;7345:18;;;7338:30;7404:31;7384:18;;;7377:59;7453:18;;18070:60:0::1;7124:353:1::0;15259:100:0;15306:16;15342:9;15335:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15335:16:0;;;;;;;;;;;;;;;;;;;;;;15259:100;:::o;4496:177::-;-1:-1:-1;;;;;4647:18:0;4615:7;4647:18;;;;;;;;;;;;4496:177::o;16097:365::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;16220:3:::1;16203:7;:14;:20;16181:121;;;;-1:-1:-1::0;;;16181:121:0::1;;;;;;;:::i;:::-;16318:9;16313:142;16337:7;:14;16333:1;:18;16313:142;;;16373:14;16390:7;16398:1;16390:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;16415:20:0::1;16438:5;16415:20:::0;;;:12:::1;:20:::0;;;;;;:28;;-1:-1:-1;;16415:28:0::1;::::0;;-1:-1:-1;16353:3:0;::::1;::::0;::::1;:::i;:::-;;;;16313:142;;28188:84:::0;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;28242:14:::1;:22:::0;;-1:-1:-1;;28242:22:0::1;::::0;;28188:84::o;16858:334::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;16978:4:::1;16973:155;;17035:6;::::0;-1:-1:-1;;;;;17035:6:0;;::::1;17025:16:::0;;::::1;::::0;16999:117:::1;;;::::0;-1:-1:-1;;;16999:117:0;;9525:2:1;16999:117:0::1;::::0;::::1;9507:21:1::0;9564:2;9544:18;;;9537:30;9603:34;9583:18;;;9576:62;-1:-1:-1;;;9654:18:1;;;9647:37;9701:19;;16999:117:0::1;9323:403:1::0;16999:117:0::1;-1:-1:-1::0;;;;;17138:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17138:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16858:334::o;8590:265::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;8717:15:::1;8709:52;;;::::0;-1:-1:-1;;;8709:52:0;;9933:2:1;8709:52:0::1;::::0;::::1;9915:21:1::0;9972:2;9952:18;;;9945:30;10011:26;9991:18;;;9984:54;10055:18;;8709:52:0::1;9731:348:1::0;8709:52:0::1;8798:6;::::0;8777:40:::1;::::0;8814:1:::1;::::0;-1:-1:-1;;;;;8798:6:0::1;::::0;8777:40:::1;::::0;8814:1;;8777:40:::1;-1:-1:-1::0;8828:6:0::1;:19:::0;;-1:-1:-1;;;;;;8828:19:0::1;::::0;;8590:265::o;28754:464::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;28842:13:::1;::::0;::::1;::::0;::::1;;;28841:14;28833:50;;;::::0;-1:-1:-1;;;28833:50:0;;10286:2:1;28833:50:0::1;::::0;::::1;10268:21:1::0;10325:2;10305:18;;;10298:30;10364:25;10344:18;;;10337:53;10407:18;;28833:50:0::1;10084:347:1::0;28833:50:0::1;28936:2;28916:16;:22;;28894:111;;;;-1:-1:-1::0;;;28894:111:0::1;;;;;;;:::i;:::-;29016:13;:20:::0;;-1:-1:-1;;29047:18:0;;;;;29097:12:::1;29076:18;:33:::0;;;29141:37:::1;::::0;29162:16;;29141:37:::1;:::i;:::-;29120:18;:58:::0;29194:16:::1;::::0;::::1;::::0;;;::::1;28754:464:::0;:::o;27024:567::-;8503:6;;27138:10;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27174:20:0;::::1;27166:59;;;::::0;-1:-1:-1;;;27166:59:0;;11046:2:1;27166:59:0::1;::::0;::::1;11028:21:1::0;11085:2;11065:18;;;11058:30;11124:28;11104:18;;;11097:56;11170:18;;27166:59:0::1;10844:350:1::0;27166:59:0::1;-1:-1:-1::0;;;;;27258:23:0;::::1;27276:4;27258:23;;::::0;:41:::1;;-1:-1:-1::0;27286:13:0::1;::::0;::::1;::::0;::::1;;;27285:14;27258:41;27236:143;;;::::0;-1:-1:-1;;;27236:143:0;;11401:2:1;27236:143:0::1;::::0;::::1;11383:21:1::0;11440:2;11420:18;;;11413:30;11479:34;11459:18;;;11452:62;-1:-1:-1;;;11530:18:1;;;11523:50;11590:19;;27236:143:0::1;11199:416:1::0;27236:143:0::1;27417:39;::::0;-1:-1:-1;;;27417:39:0;;27450:4:::1;27417:39;::::0;::::1;1752:51:1::0;27390:24:0::1;::::0;-1:-1:-1;;;;;27417:24:0;::::1;::::0;::::1;::::0;1725:18:1;;27417:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27475:46;::::0;-1:-1:-1;;;27475:46:0;;-1:-1:-1;;;;;12001:32:1;;;27475:46:0::1;::::0;::::1;11983:51:1::0;12050:18;;;12043:34;;;27390:66:0;;-1:-1:-1;27475:23:0;;::::1;::::0;::::1;::::0;11956:18:1;;27475:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27537;::::0;;-1:-1:-1;;;;;12001:32:1;;11983:51;;12065:2;12050:18;;12043:34;;;27467:54:0;;-1:-1:-1;27537:46:0::1;::::0;11956:18:1;27537:46:0::1;;;;;;;27155:436;27024:567:::0;;;;:::o;31063:1165::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;31144:13:::1;::::0;::::1;::::0;::::1;;;31143:14;31135:70;;;;-1:-1:-1::0;;;31135:70:0::1;;;;;;;:::i;:::-;31257:2;31238:16;:21;31216:110;;;;-1:-1:-1::0;;;31216:110:0::1;;;;;;;:::i;:::-;31374:13;:20:::0;;-1:-1:-1;;31405:18:0;;;;;31455:12:::1;31434:18;:33:::0;;;31499:37:::1;::::0;31520:16;;31499:37:::1;:::i;:::-;31478:18;:58:::0;31552:16:::1;::::0;::::1;::::0;;;::::1;31657:1;31633:21;:25;31611:110;;;;-1:-1:-1::0;;;31611:110:0::1;;;;;;;:::i;:::-;31781:1;31754:24;31772:4;31754:9;:24::i;:::-;:28;31732:116;;;::::0;-1:-1:-1;;;31732:116:0;;13356:2:1;31732:116:0::1;::::0;::::1;13338:21:1::0;13395:2;13375:18;;;13368:30;13434:34;13414:18;;;13407:62;-1:-1:-1;;;13485:18:1;;;13478:36;13531:19;;31732:116:0::1;13154:402:1::0;31732:116:0::1;31893:9;::::0;31861:69:::1;::::0;31878:4:::1;::::0;-1:-1:-1;;;;;31893:9:0::1;31905:24;31878:4:::0;31905:9:::1;:24::i;31861:69::-;31943:9;::::0;-1:-1:-1;;;;;31943:9:0::1;:25;31976:21;32021:4;32041:24;32021:4:::0;32041:9:::1;:24::i;:::-;32080:1;32123::::0;32174:4:::1;32194:15;31943:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31063:1165:::0;:::o;27854:326::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27962:31:0;::::1;27940:118;;;::::0;-1:-1:-1;;;27940:118:0;;14686:2:1;27940:118:0::1;::::0;::::1;14668:21:1::0;14725:2;14705:18;;;14698:30;14764:34;14744:18;;;14737:62;-1:-1:-1;;;14815:18:1;;;14808:35;14860:19;;27940:118:0::1;14484:401:1::0;27940:118:0::1;28069:16;:45:::0;;-1:-1:-1;;;;;;28069:45:0::1;-1:-1:-1::0;;;;;28069:45:0;::::1;::::0;;::::1;::::0;;;28130:42:::1;::::0;::::1;::::0;-1:-1:-1;;28130:42:0::1;27854:326:::0;:::o;4167:104::-;4223:13;4256:7;4249:14;;;;;:::i;17200:353::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;17346:6:::1;::::0;-1:-1:-1;;;;;17346:6:0;;::::1;17338:14:::0;;::::1;::::0;17316:121:::1;;;::::0;-1:-1:-1;;;17316:121:0;;15092:2:1;17316:121:0::1;::::0;::::1;15074:21:1::0;15131:2;15111:18;;;15104:30;15170:34;15150:18;;;15143:62;15241:27;15221:18;;;15214:55;15286:19;;17316:121:0::1;14890:421:1::0;17316:121:0::1;17448:41;17477:4;17483:5;17448:28;:41::i;:::-;17505:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17505:40:0;::::1;::::0;::::1;::::0;;;::::1;17200:353:::0;;:::o;28280:84::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;28335:14:::1;:21:::0;;-1:-1:-1;;28335:21:0::1;28352:4;28335:21;::::0;;28280:84::o;6174:482::-;209:10;6294:4;6343:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6343:34:0;;;;;;;;;;6410:35;;;;6388:122;;;;-1:-1:-1;;;6388:122:0;;15518:2:1;6388:122:0;;;15500:21:1;15557:2;15537:18;;;15530:30;15596:34;15576:18;;;15569:62;-1:-1:-1;;;15647:18:1;;;15640:35;15692:19;;6388:122:0;15316:401:1;6388:122:0;6546:67;209:10;6569:7;6597:15;6578:16;:34;6546:8;:67::i;:::-;-1:-1:-1;6644:4:0;;6174:482;-1:-1:-1;;;6174:482:0:o;4681:216::-;4803:4;4825:42;209:10;4849:9;4860:6;4825:9;:42::i;30768:287::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;30861:21:::1;30853:58;;;::::0;-1:-1:-1;;;30853:58:0;;15924:2:1;30853:58:0::1;::::0;::::1;15906:21:1::0;15963:2;15943:18;;;15936:30;16002:26;15982:18;;;15975:54;16046:18;;30853:58:0::1;15722:348:1::0;30853:58:0::1;30931:14;::::0;;;::::1;;;30930:15;30922:52;;;::::0;-1:-1:-1;;;30922:52:0;;16277:2:1;30922:52:0::1;::::0;::::1;16259:21:1::0;16316:2;16296:18;;;16289:30;16355:26;16335:18;;;16328:54;16399:18;;30922:52:0::1;16075:348:1::0;30922:52:0::1;30987:14;:21:::0;;-1:-1:-1;;30987:21:0::1;::::0;::::1;::::0;;31024:23:::1;::::0;::::1;::::0;30987:21;;31024:23:::1;30768:287:::0;:::o;29226:861::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;29298:12:::1;29290:56;;;::::0;-1:-1:-1;;;29290:56:0;;16630:2:1;29290:56:0::1;::::0;::::1;16612:21:1::0;16669:2;16649:18;;;16642:30;16708:33;16688:18;;;16681:61;16759:18;;29290:56:0::1;16428:355:1::0;29290:56:0::1;29366:13;::::0;::::1;::::0;::::1;;;29365:14;29357:70;;;;-1:-1:-1::0;;;29357:70:0::1;;;;;;;:::i;:::-;29516:1;29492:21;:25;29470:110;;;;-1:-1:-1::0;;;29470:110:0::1;;;;;;;:::i;18494:182::-:0;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18579:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18579:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18634:34;;681:41:1;;;18634:34:0::1;::::0;654:18:1;18634:34:0::1;;;;;;;18494:182:::0;;:::o;11161:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11161:26:0;;-1:-1:-1;11161:26:0;:::o;15727:362::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;15848:3:::1;15831:7;:14;:20;15809:121;;;;-1:-1:-1::0;;;15809:121:0::1;;;;;;;:::i;:::-;15946:9;15941:141;15965:7;:14;15961:1;:18;15941:141;;;16001:14;16018:7;16026:1;16018:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;16043:20:0::1;;::::0;;;:12:::1;:20:::0;;;;;;:27;;-1:-1:-1;;16043:27:0::1;16066:4;16043:27;::::0;;-1:-1:-1;15981:3:0;::::1;::::0;::::1;:::i;:::-;;;;15941:141;;28372:374:::0;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;28442:19:::1;::::0;28424:15:::1;:37:::0;;;28490:19:::1;::::0;28472:15:::1;:37:::0;;;28535:33:::1;::::0;::::1;:::i;:::-;28520:12;:48:::0;28600:23:::1;::::0;28581:16:::1;:42:::0;;;28653:23:::1;::::0;28634:16:::1;:42:::0;;;28703:35:::1;::::0;::::1;:::i;:::-;28687:13;:51:::0;28372:374::o;16523:98::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;16585:20:::1;:28:::0;;-1:-1:-1;;16585:28:0::1;::::0;;16523:98::o;30095:665::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;30187:6:::1;::::0;30180:39:::1;::::0;-1:-1:-1;;;30180:39:0;;30213:4:::1;30180:39;::::0;::::1;1752:51:1::0;30160:17:0::1;::::0;-1:-1:-1;;;;;30187:6:0::1;::::0;30180:24:::1;::::0;1725:18:1;;30180:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30160:59;;30252:1;30240:9;:13;30232:50;;;::::0;-1:-1:-1;;;30232:50:0;;16990:2:1;30232:50:0::1;::::0;::::1;16972:21:1::0;17029:2;17009:18;;;17002:30;17068:26;17048:18;;;17041:54;17112:18;;30232:50:0::1;16788:348:1::0;30232:50:0::1;30295:16;30338:5;30315:19;30327:7:::0;30315:9;:19:::1;:::i;:::-;30314:29;;;;:::i;:::-;30430:6;::::0;30454:9:::1;::::0;30423:52:::1;::::0;-1:-1:-1;;;30423:52:0;;-1:-1:-1;;;;;30454:9:0;;::::1;30423:52;::::0;::::1;11983:51:1::0;12050:18;;;12043:34;;;30295:48:0;;-1:-1:-1;30430:6:0::1;::::0;30423:22:::1;::::0;11956:18:1;;30423:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30521:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;30521:231:0;;-1:-1:-1;;;;;30521:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;30572:4:::1;::::0;30592:8;;30521:9;;;;30701:10:::1;::::0;30726:15:::1;::::0;30521:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30149:611;;30095:665:::0;:::o;8863:281::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8966:22:0;::::1;8944:110;;;::::0;-1:-1:-1;;;8944:110:0;;18600:2:1;8944:110:0::1;::::0;::::1;18582:21:1::0;18639:2;18619:18;;;18612:30;18678:34;18658:18;;;18651:62;-1:-1:-1;;;18729:18:1;;;18722:36;18775:19;;8944:110:0::1;18398:402:1::0;8944:110:0::1;9091:6;::::0;9070:38:::1;::::0;-1:-1:-1;;;;;9070:38:0;;::::1;::::0;9091:6:::1;::::0;9070:38:::1;::::0;9091:6:::1;::::0;9070:38:::1;9119:6;:17:::0;;-1:-1:-1;;;;;;9119:17:0::1;-1:-1:-1::0;;;;;9119:17:0;;;::::1;::::0;;;::::1;::::0;;8863:281::o;27661:185::-;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;27756:82:::1;::::0;27719:12:::1;::::0;27764:10:::1;::::0;27788:21:::1;::::0;27719:12;27756:82;27719:12;27756:82;27788:21;27764:10;27756:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15367:175:::0;8503:6;;-1:-1:-1;;;;;8503:6:0;209:10;8503:22;8495:67;;;;-1:-1:-1;;;8495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15440:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;15432:63;;;::::0;-1:-1:-1;;;15432:63:0;;19217:2:1;15432:63:0::1;::::0;::::1;19199:21:1::0;19256:2;19236:18;;;19229:30;19295:32;19275:18;;;19268:60;19345:18;;15432:63:0::1;19015:354:1::0;15432:63:0::1;-1:-1:-1::0;;;;;15506:20:0::1;15529:5;15506:20:::0;;;:12:::1;:20;::::0;;;;:28;;-1:-1:-1;;15506:28:0::1;::::0;;15367:175::o;7645:380::-;-1:-1:-1;;;;;7781:19:0;;7773:68;;;;-1:-1:-1;;;7773:68:0;;19576:2:1;7773:68:0;;;19558:21:1;19615:2;19595:18;;;19588:30;19654:34;19634:18;;;19627:62;-1:-1:-1;;;19705:18:1;;;19698:34;19749:19;;7773:68:0;19374:400:1;7773:68:0;-1:-1:-1;;;;;7860:21:0;;7852:68;;;;-1:-1:-1;;;7852:68:0;;19981:2:1;7852:68:0;;;19963:21:1;20020:2;20000:18;;;19993:30;20059:34;20039:18;;;20032:62;-1:-1:-1;;;20110:18:1;;;20103:32;20152:19;;7852:68:0;19779:398:1;7852:68:0;-1:-1:-1;;;;;7933:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7985:32;;2280:25:1;;;7985:32:0;;2253:18:1;7985:32:0;;;;;;;7645:380;;;:::o;18684:5836::-;-1:-1:-1;;;;;18816:18:0;;18808:68;;;;-1:-1:-1;;;18808:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18895:16:0;;18887:64;;;;-1:-1:-1;;;18887:64:0;;;;;;;:::i;:::-;18979:1;18970:6;:10;18962:52;;;;-1:-1:-1;;;18962:52:0;;21194:2:1;18962:52:0;;;21176:21:1;21233:2;21213:18;;;21206:30;21272:31;21252:18;;;21245:59;21321:18;;18962:52:0;20992:353:1;18962:52:0;19032:13;;;;;;;19027:183;;-1:-1:-1;;;;;19088:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19117:23:0;;;;;;:19;:23;;;;;;;;19088:52;19062:136;;;;-1:-1:-1;;;19062:136:0;;21552:2:1;19062:136:0;;;21534:21:1;21591:2;21571:18;;;21564:30;-1:-1:-1;;;21610:18:1;;;21603:52;21672:18;;19062:136:0;21350:346:1;19062:136:0;24623:18;;24608:12;:33;19226:26;:43;;;;-1:-1:-1;19256:13:0;;;;;;;19226:43;19222:269;;;-1:-1:-1;;;;;19313:18:0;;;;;;:12;:18;;;;;;;;19312:19;;:36;;-1:-1:-1;8441:6:0;;-1:-1:-1;;;;;19335:13:0;;;8441:6;;19335:13;19312:36;:61;;;-1:-1:-1;;;;;;19352:21:0;;19366:6;19352:21;19312:61;19286:193;;;;-1:-1:-1;;;19286:193:0;;21903:2:1;19286:193:0;;;21885:21:1;21942:2;21922:18;;;21915:30;21981:34;21961:18;;;21954:62;22052:34;22032:18;;;22025:62;-1:-1:-1;;;22103:19:1;;;22096:37;22150:19;;19286:193:0;21701:474:1;19286:193:0;19507:14;;;;19503:2214;;;8441:6;;-1:-1:-1;;;;;19560:15:0;;;8441:6;;19560:15;;;;:49;;-1:-1:-1;8441:6:0;;-1:-1:-1;;;;;19596:13:0;;;8441:6;;19596:13;;19560:49;:91;;;;-1:-1:-1;;;;;;19630:21:0;;19644:6;19630:21;;19560:91;:138;;;;-1:-1:-1;;;;;;19673:25:0;;;;;;:19;:25;;;;;;;;19672:26;19560:138;:183;;;;-1:-1:-1;;;;;;19720:23:0;;;;;;:19;:23;;;;;;;;19719:24;19560:183;19538:2168;;;19782:20;;;;19778:692;;;19845:9;;-1:-1:-1;;;;;19831:24:0;;;19845:9;;19831:24;;;;:49;;-1:-1:-1;19873:6:0;;-1:-1:-1;;;;;19859:21:0;;;19873:6;;19859:21;;19831:49;19827:624;;;20022:16;20037:1;20022:12;:16;:::i;:::-;19976:9;19947:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;20143:16:0;20158:1;20143:12;:16;:::i;:::-;-1:-1:-1;;;;;20075:32:0;;;;;;:28;:32;;;;;;:84;19947:212;19909:363;;;;-1:-1:-1;;;19909:363:0;;22512:2:1;19909:363:0;;;22494:21:1;22551:2;22531:18;;;22524:30;22590:34;22570:18;;;22563:62;-1:-1:-1;;;22641:18:1;;;22634:51;22702:19;;19909:363:0;22310:417:1;19909:363:0;20328:9;20299:39;;;;:28;:39;;;;;;20341:12;20299:54;;;;-1:-1:-1;;;;;20380:32:0;;;;;;:47;19827:624;-1:-1:-1;;;;;20544:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;20601:35:0;;;;;;:31;:35;;;;;;;;20600:36;20544:92;20518:1173;;;20723:12;;20713:6;:22;;20679:148;;;;-1:-1:-1;;;20679:148:0;;22934:2:1;20679:148:0;;;22916:21:1;22973:2;22953:18;;;22946:30;23012:34;22992:18;;;22985:62;-1:-1:-1;;;23063:18:1;;;23056:38;23111:19;;20679:148:0;22732:404:1;20679:148:0;20910:9;;20893:13;20903:2;20893:9;:13::i;:::-;20884:22;;:6;:22;:::i;:::-;:35;;20850:140;;;;-1:-1:-1;;;20850:140:0;;23343:2:1;20850:140:0;;;23325:21:1;23382:2;23362:18;;;23355:30;-1:-1:-1;;;23401:18:1;;;23394:49;23460:18;;20850:140:0;23141:343:1;20850:140:0;20518:1173;;;-1:-1:-1;;;;;21088:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;21143:37:0;;;;;;:31;:37;;;;;;;;21142:38;21088:92;21062:629;;;21231:14;;;;;;;21223:43;;;;-1:-1:-1;;;21223:43:0;;23691:2:1;21223:43:0;;;23673:21:1;23730:2;23710:18;;;23703:30;-1:-1:-1;;;23749:18:1;;;23742:46;23805:18;;21223:43:0;23489:340:1;21223:43:0;21333:13;;21323:6;:23;;21289:151;;;;-1:-1:-1;;;21289:151:0;;24036:2:1;21289:151:0;;;24018:21:1;24075:2;24055:18;;;24048:30;24114:34;24094:18;;;24087:62;-1:-1:-1;;;24165:18:1;;;24158:40;24215:19;;21289:151:0;23834:406:1;21062:629:0;-1:-1:-1;;;;;21471:35:0;;;;;;:31;:35;;;;;;;;21466:225;;21591:9;;21574:13;21584:2;21574:9;:13::i;:::-;21565:22;;:6;:22;:::i;:::-;:35;;21531:140;;;;-1:-1:-1;;;21531:140:0;;23343:2:1;21531:140:0;;;23325:21:1;23382:2;23362:18;;;23355:30;-1:-1:-1;;;23401:18:1;;;23394:49;23460:18;;21531:140:0;23141:343:1;21531:140:0;21729:28;21760:24;21778:4;21760:9;:24::i;:::-;21836:18;;21729:55;;-1:-1:-1;21812:42:0;;;;;;;21885:22;;-1:-1:-1;21896:11:0;;;;;;;21885:22;:35;;;;-1:-1:-1;21912:8:0;;-1:-1:-1;;;21912:8:0;;;;21911:9;21885:35;:68;;;;-1:-1:-1;;;;;;21924:29:0;;;;;;:25;:29;;;;;;;;21885:68;21867:196;;;21980:8;:15;;-1:-1:-1;;;;21980:15:0;-1:-1:-1;;;21980:15:0;;;22010:10;:8;:10::i;:::-;22035:8;:16;;-1:-1:-1;;;;22035:16:0;;;21867:196;-1:-1:-1;;;;;22194:25:0;;22075:12;22194:25;;;:19;:25;;;;;;22090:4;;22194:25;;;:52;;-1:-1:-1;;;;;;22223:23:0;;;;;;:19;:23;;;;;;;;22194:52;22190:100;;;-1:-1:-1;22273:5:0;22190:100;22302:12;22407:7;22403:2064;;;24623:18;;24608:12;:33;22490:152;;;;22566:8;22551:12;;:23;;;;:::i;:::-;22541:6;:33;;:100;;;;;22629:12;22603:18;;22624:1;22603:22;;;;:::i;:::-;:38;;22541:100;22489:206;;;;-1:-1:-1;;;;;;22664:31:0;;;;;;:25;:31;;;;;;;;22489:206;:257;;;;-1:-1:-1;;;;;;22717:29:0;;;;;;:25;:29;;;;;;;;22716:30;22489:257;:302;;;;-1:-1:-1;;;;;;22768:23:0;;;;;;:19;:23;;;;;;;;22767:24;22489:302;:339;;;;;22827:1;22812:12;;:16;22489:339;22467:1851;;;24623:18;;24608:12;:33;22863:332;;23174:1;23158:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;22863:332:0;-1:-1:-1;;;;;23220:16:0;;;;;;:12;:16;;;;;;;;23215:216;;-1:-1:-1;;;;;23261:16:0;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;23261:23:0;23280:4;23261:23;;;;;;23307:10;:15;;23280:4;;23307:10;;:15;;23280:4;;23307:15;:::i;:::-;;;;-1:-1:-1;;23345:9:0;:18;;;;;;;-1:-1:-1;23345:18:0;;;;;;;;-1:-1:-1;;;;;;23345:18:0;-1:-1:-1;;;;;23345:18:0;;;;;;;;23391:20;;1752:51:1;;;23391:20:0;;1740:2:1;1725:18;23391:20:0;;;;;;;23215:216;23474:3;23459:11;:6;23468:2;23459:11;:::i;:::-;23458:19;;;;:::i;:::-;23451:26;;23545:12;;23526:15;;23519:4;:22;;;;:::i;:::-;23518:39;;;;:::i;:::-;23496:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23625:12:0;;23606:15;;23599:22;;:4;:22;:::i;:::-;23598:39;;;;:::i;:::-;23576:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;22467:1851:0;;-1:-1:-1;22467:1851:0;;-1:-1:-1;;;;;23700:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23749:1;23733:13;;:17;23700:50;23696:622;;;23805:3;23788:13;;23779:6;:22;;;;:::i;:::-;23778:30;;;;:::i;:::-;23771:37;;23877:13;;23857:16;;23850:4;:23;;;;:::i;:::-;23849:41;;;;:::i;:::-;23827:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23959:13:0;;23939:16;;23932:23;;:4;:23;:::i;23696:622::-;-1:-1:-1;;;;;24034:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24084:1;24069:12;;:16;24034:51;24030:288;;;24139:3;24123:12;;24114:6;:21;;;;:::i;:::-;24113:29;;;;:::i;:::-;24106:36;;24210:12;;24191:15;;24184:4;:22;;;;:::i;:::-;24183:39;;;;:::i;:::-;24161:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24290:12:0;;24271:15;;24264:22;;:4;:22;:::i;:::-;24263:39;;;;:::i;:::-;24241:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24030:288:0;24338:8;;24334:91;;24367:42;24383:4;24397;24404;24367:15;:42::i;:::-;24441:14;24451:4;24441:14;;:::i;:::-;;;22403:2064;24479:33;24495:4;24501:2;24505:6;24479:15;:33::i;:::-;18797:5723;;;;18684:5836;;;:::o;17561:236::-;-1:-1:-1;;;;;17644:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17644:39:0;;;;;;;17694;17644:31;:39;17694:26;:39::i;25753:1263::-;25792:23;25818:24;25836:4;25818:9;:24::i;:::-;25792:50;;25853:25;25902:18;;25881;;:39;;;;:::i;:::-;25853:67;-1:-1:-1;25937:20:0;;;:46;;-1:-1:-1;25961:22:0;;25937:46;25933:85;;;26000:7;;25753:1263::o;25933:85::-;26052:18;;:23;;26073:2;26052:23;:::i;:::-;26034:15;:41;26030:115;;;26110:18;;:23;;26131:2;26110:23;:::i;:::-;26092:41;;26030:115;26157:12;26231:23;26344:1;26311:17;26276:18;;26258:15;:36;;;;:::i;:::-;26257:71;;;;:::i;:::-;:88;;;;:::i;:::-;26231:114;-1:-1:-1;26358:51:0;26375:33;26231:114;26375:15;:33;:::i;:::-;26358:16;:51::i;:::-;26621:18;;26443:21;;;;26422:18;;26621:22;;26642:1;;26621:22;:::i;:::-;26600:44;;:17;:44;:::i;:::-;26564:18;;26551:31;;:10;:31;:::i;:::-;26550:95;;;;:::i;:::-;26524:121;-1:-1:-1;26658:34:0;26524:121;26658:34;;:::i;:::-;26726:1;26705:18;:22;;;26738:18;:22;26658:34;-1:-1:-1;26777:19:0;;;;;:42;;;26818:1;26800:15;:19;26777:42;26773:121;;;26836:46;26849:15;26866;26836:12;:46::i;:::-;26928:16;;26920:88;;-1:-1:-1;;;;;26928:16:0;;;;26972:21;;26920:88;;;;26972:21;26928:16;26920:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;25753:1263:0:o;6664:651::-;-1:-1:-1;;;;;6804:20:0;;6796:70;;;;-1:-1:-1;;;6796:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6885:23:0;;6877:71;;;;-1:-1:-1;;;6877:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6985:17:0;;6961:21;6985:17;;;;;;;;;;;7035:23;;;;7013:111;;;;-1:-1:-1;;;7013:111:0;;24447:2:1;7013:111:0;;;24429:21:1;24486:2;24466:18;;;24459:30;24525:34;24505:18;;;24498:62;-1:-1:-1;;;24576:18:1;;;24569:36;24622:19;;7013:111:0;24245:402:1;7013:111:0;-1:-1:-1;;;;;7160:17:0;;;:9;:17;;;;;;;;;;;7180:22;;;7160:42;;7224:20;;;;;;;;:30;;7196:6;;7160:9;7224:30;;7196:6;;7224:30;:::i;:::-;;;;;;;;7289:9;-1:-1:-1;;;;;7272:35:0;7281:6;-1:-1:-1;;;;;7272:35:0;;7300:6;7272:35;;;;2280:25:1;;2268:2;2253:18;;2134:177;7272:35:0;;;;;;;;6785:530;6664:651;;;:::o;16629:221::-;-1:-1:-1;;;;;16731:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16731:52:0;;;;;;;;;;16799:43;;24820:51:1;;;24887:18;;;24880:50;16799:43:0;;24793:18:1;16799:43:0;;;;;;;16629:221;;:::o;24657:571::-;24807:16;;;24821:1;24807:16;;;;;;;;24783:21;;24807:16;;;;;;;;;;-1:-1:-1;24807:16:0;24783:40;;24852:4;24834;24839:1;24834:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24834:23:0;;;:7;;;;;;;;;;:23;;;;24878:9;;:16;;;-1:-1:-1;;;24878:16:0;;;;:9;;;;;:14;;:16;;;;;24834:7;;24878:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24868:4;24873:1;24868:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24868:26:0;;;:7;;;;;;;;;:26;24939:9;;24907:56;;24924:4;;24939:9;24951:11;24907:8;:56::i;:::-;25002:9;;:218;;-1:-1:-1;;;25002:218:0;;-1:-1:-1;;;;;25002:9:0;;;;:60;;:218;;25077:11;;25002:9;;25147:4;;25174;;25194:15;;25002:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24712:516;24657:571;:::o;25236:509::-;25416:9;;25384:56;;25401:4;;-1:-1:-1;;;;;25416:9:0;25428:11;25384:8;:56::i;:::-;25483:9;;:254;;-1:-1:-1;;;25483:254:0;;-1:-1:-1;;;;;25483:9:0;;;;:25;;25516:9;;25483:254;;25549:4;;25569:11;;25483:9;;;;25689:6;;25711:15;;25483:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:134::-;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;:::-;525:5;289:247;-1:-1:-1;;;289:247:1:o;733:248::-;801:6;809;862:2;850:9;841:7;837:23;833:32;830:52;;;878:1;875;868:12;830:52;-1:-1:-1;;901:23:1;;;971:2;956:18;;;943:32;;-1:-1:-1;733:248:1:o;986:597::-;1098:4;1127:2;1156;1145:9;1138:21;1188:6;1182:13;1231:6;1226:2;1215:9;1211:18;1204:34;1256:1;1266:140;1280:6;1277:1;1274:13;1266:140;;;1375:14;;;1371:23;;1365:30;1341:17;;;1360:2;1337:26;1330:66;1295:10;;1266:140;;;1424:6;1421:1;1418:13;1415:91;;;1494:1;1489:2;1480:6;1469:9;1465:22;1461:31;1454:42;1415:91;-1:-1:-1;1567:2:1;1546:15;-1:-1:-1;;1542:29:1;1527:45;;;;1574:2;1523:54;;986:597;-1:-1:-1;;;986:597:1:o;1814:315::-;1882:6;1890;1943:2;1931:9;1922:7;1918:23;1914:32;1911:52;;;1959:1;1956;1949:12;1911:52;1998:9;1985:23;2017:31;2042:5;2017:31;:::i;:::-;2067:5;2119:2;2104:18;;;;2091:32;;-1:-1:-1;;;1814:315:1:o;2316:456::-;2393:6;2401;2409;2462:2;2450:9;2441:7;2437:23;2433:32;2430:52;;;2478:1;2475;2468:12;2430:52;2517:9;2504:23;2536:31;2561:5;2536:31;:::i;:::-;2586:5;-1:-1:-1;2643:2:1;2628:18;;2615:32;2656:33;2615:32;2656:33;:::i;:::-;2316:456;;2708:7;;-1:-1:-1;;;2762:2:1;2747:18;;;;2734:32;;2316:456::o;3174:461::-;3227:3;3265:5;3259:12;3292:6;3287:3;3280:19;3318:4;3347:2;3342:3;3338:12;3331:19;;3384:2;3377:5;3373:14;3405:1;3415:195;3429:6;3426:1;3423:13;3415:195;;;3494:13;;-1:-1:-1;;;;;3490:39:1;3478:52;;3550:12;;;;3585:15;;;;3526:1;3444:9;3415:195;;;-1:-1:-1;3626:3:1;;3174:461;-1:-1:-1;;;;;3174:461:1:o;3640:261::-;3819:2;3808:9;3801:21;3782:4;3839:56;3891:2;3880:9;3876:18;3868:6;3839:56;:::i;3906:127::-;3967:10;3962:3;3958:20;3955:1;3948:31;3998:4;3995:1;3988:15;4022:4;4019:1;4012:15;4038:1121;4122:6;4153:2;4196;4184:9;4175:7;4171:23;4167:32;4164:52;;;4212:1;4209;4202:12;4164:52;4252:9;4239:23;4281:18;4322:2;4314:6;4311:14;4308:34;;;4338:1;4335;4328:12;4308:34;4376:6;4365:9;4361:22;4351:32;;4421:7;4414:4;4410:2;4406:13;4402:27;4392:55;;4443:1;4440;4433:12;4392:55;4479:2;4466:16;4501:2;4497;4494:10;4491:36;;;4507:18;;:::i;:::-;4553:2;4550:1;4546:10;4585:2;4579:9;4648:2;4644:7;4639:2;4635;4631:11;4627:25;4619:6;4615:38;4703:6;4691:10;4688:22;4683:2;4671:10;4668:18;4665:46;4662:72;;;4714:18;;:::i;:::-;4750:2;4743:22;4800:18;;;4834:15;;;;-1:-1:-1;4876:11:1;;;4872:20;;;4904:19;;;4901:39;;;4936:1;4933;4926:12;4901:39;4960:11;;;;4980:148;4996:6;4991:3;4988:15;4980:148;;;5062:23;5081:3;5062:23;:::i;:::-;5050:36;;5013:12;;;;5106;;;;4980:148;;;5147:6;4038:1121;-1:-1:-1;;;;;;;;4038:1121:1:o;5164:118::-;5250:5;5243:13;5236:21;5229:5;5226:32;5216:60;;5272:1;5269;5262:12;5287:382;5352:6;5360;5413:2;5401:9;5392:7;5388:23;5384:32;5381:52;;;5429:1;5426;5419:12;5381:52;5468:9;5455:23;5487:31;5512:5;5487:31;:::i;:::-;5537:5;-1:-1:-1;5594:2:1;5579:18;;5566:32;5607:30;5566:32;5607:30;:::i;:::-;5656:7;5646:17;;;5287:382;;;;;:::o;5674:241::-;5730:6;5783:2;5771:9;5762:7;5758:23;5754:32;5751:52;;;5799:1;5796;5789:12;5751:52;5838:9;5825:23;5857:28;5879:5;5857:28;:::i;5920:180::-;5979:6;6032:2;6020:9;6011:7;6007:23;6003:32;6000:52;;;6048:1;6045;6038:12;6000:52;-1:-1:-1;6071:23:1;;5920:180;-1:-1:-1;5920:180:1:o;6105:388::-;6173:6;6181;6234:2;6222:9;6213:7;6209:23;6205:32;6202:52;;;6250:1;6247;6240:12;6202:52;6289:9;6276:23;6308:31;6333:5;6308:31;:::i;:::-;6358:5;-1:-1:-1;6415:2:1;6400:18;;6387:32;6428:33;6387:32;6428:33;:::i;6498:356::-;6700:2;6682:21;;;6719:18;;;6712:30;6778:34;6773:2;6758:18;;6751:62;6845:2;6830:18;;6498:356::o;6859:127::-;6920:10;6915:3;6911:20;6908:1;6901:31;6951:4;6948:1;6941:15;6975:4;6972:1;6965:15;6991:128;7031:3;7062:1;7058:6;7055:1;7052:13;7049:39;;;7068:18;;:::i;:::-;-1:-1:-1;7104:9:1;;6991:128::o;7482:380::-;7561:1;7557:12;;;;7604;;;7625:61;;7679:4;7671:6;7667:17;7657:27;;7625:61;7732:2;7724:6;7721:14;7701:18;7698:38;7695:161;;7778:10;7773:3;7769:20;7766:1;7759:31;7813:4;7810:1;7803:15;7841:4;7838:1;7831:15;7695:161;;7482:380;;;:::o;8631:415::-;8833:2;8815:21;;;8872:2;8852:18;;;8845:30;8911:34;8906:2;8891:18;;8884:62;-1:-1:-1;;;8977:2:1;8962:18;;8955:49;9036:3;9021:19;;8631:415::o;9051:127::-;9112:10;9107:3;9103:20;9100:1;9093:31;9143:4;9140:1;9133:15;9167:4;9164:1;9157:15;9183:135;9222:3;9243:17;;;9240:43;;9263:18;;:::i;:::-;-1:-1:-1;9310:1:1;9299:13;;9183:135::o;10436:403::-;10638:2;10620:21;;;10677:2;10657:18;;;10650:30;10716:34;10711:2;10696:18;;10689:62;-1:-1:-1;;;10782:2:1;10767:18;;10760:37;10829:3;10814:19;;10436:403::o;11620:184::-;11690:6;11743:2;11731:9;11722:7;11718:23;11714:32;11711:52;;;11759:1;11756;11749:12;11711:52;-1:-1:-1;11782:16:1;;11620:184;-1:-1:-1;11620:184:1:o;12088:245::-;12155:6;12208:2;12196:9;12187:7;12183:23;12179:32;12176:52;;;12224:1;12221;12214:12;12176:52;12256:9;12250:16;12275:28;12297:5;12275:28;:::i;12338:407::-;12540:2;12522:21;;;12579:2;12559:18;;;12552:30;12618:34;12613:2;12598:18;;12591:62;-1:-1:-1;;;12684:2:1;12669:18;;12662:41;12735:3;12720:19;;12338:407::o;12750:399::-;12952:2;12934:21;;;12991:2;12971:18;;;12964:30;13030:34;13025:2;13010:18;;13003:62;-1:-1:-1;;;13096:2:1;13081:18;;13074:33;13139:3;13124:19;;12750:399::o;13561:607::-;-1:-1:-1;;;;;13920:15:1;;;13902:34;;13967:2;13952:18;;13945:34;;;;14010:2;13995:18;;13988:34;;;;14053:2;14038:18;;14031:34;;;;14102:15;;;14096:3;14081:19;;14074:44;13882:3;14134:19;;14127:35;;;;13851:3;13836:19;;13561:607::o;14173:306::-;14261:6;14269;14277;14330:2;14318:9;14309:7;14305:23;14301:32;14298:52;;;14346:1;14343;14336:12;14298:52;14375:9;14369:16;14359:26;;14425:2;14414:9;14410:18;14404:25;14394:35;;14469:2;14458:9;14454:18;14448:25;14438:35;;14173:306;;;;;:::o;17141:168::-;17181:7;17247:1;17243;17239:6;17235:14;17232:1;17229:21;17224:1;17217:9;17210:17;17206:45;17203:71;;;17254:18;;:::i;:::-;-1:-1:-1;17294:9:1;;17141:168::o;17314:217::-;17354:1;17380;17370:132;;17424:10;17419:3;17415:20;17412:1;17405:31;17459:4;17456:1;17449:15;17487:4;17484:1;17477:15;17370:132;-1:-1:-1;17516:9:1;;17314:217::o;18148:245::-;18227:6;18235;18288:2;18276:9;18267:7;18263:23;18259:32;18256:52;;;18304:1;18301;18294:12;18256:52;-1:-1:-1;;18327:16:1;;18383:2;18368:18;;;18362:25;18327:16;;18362:25;;-1:-1:-1;18148:245:1:o;20182:401::-;20384:2;20366:21;;;20423:2;20403:18;;;20396:30;20462:34;20457:2;20442:18;;20435:62;-1:-1:-1;;;20528:2:1;20513:18;;20506:35;20573:3;20558:19;;20182:401::o;20588:399::-;20790:2;20772:21;;;20829:2;20809:18;;;20802:30;20868:34;20863:2;20848:18;;20841:62;-1:-1:-1;;;20934:2:1;20919:18;;20912:33;20977:3;20962:19;;20588:399::o;22180:125::-;22220:4;22248:1;22245;22242:8;22239:34;;;22253:18;;:::i;:::-;-1:-1:-1;22290:9:1;;22180:125::o;24941:251::-;25011:6;25064:2;25052:9;25043:7;25039:23;25035:32;25032:52;;;25080:1;25077;25070:12;25032:52;25112:9;25106:16;25131:31;25156:5;25131:31;:::i;25197:582::-;25496:6;25485:9;25478:25;25539:6;25534:2;25523:9;25519:18;25512:34;25582:3;25577:2;25566:9;25562:18;25555:31;25459:4;25603:57;25655:3;25644:9;25640:19;25632:6;25603:57;:::i;:::-;-1:-1:-1;;;;;25696:32:1;;;;25691:2;25676:18;;25669:60;-1:-1:-1;25760:3:1;25745:19;25738:35;25595:65;25197:582;-1:-1:-1;;;25197:582:1:o

Swarm Source

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