ETH Price: $3,341.03 (-0.77%)
Gas: 4 Gwei

Token

Laser Eyes (LASER)
 

Overview

Max Total Supply

21,000,000,000,000 LASER

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,200,000,000 LASER

Value
$0.00
0xa8cfcbec4da56e6e2586494f4d64c26171afa4d0
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:
LASER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*                          

    Website : https://lasereyes.io
    X       : https://x.com/LaserEyestoken
    Telegram: https://t.me/lasereyesoneth

 */
pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership(
        bool confirmRenounce
    ) external virtual onlyOwner {
        require(confirmRenounce, "Please confirm renounce!");
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    IDexRouter public dexRouter;
    address public lpPair;

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

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

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

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

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("Laser Eyes", "LASER") {
        address newOwner = msg.sender;  

        uint256 totalSupply = 21 * 1e12 * 1e18;

        buyOperationsFee = 50;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 50;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;        

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

        operationsAddress = address(msg.sender);

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

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

        _createInitialSupply(address(this), (totalSupply * 90) / 100);
        _createInitialSupply(newOwner, (totalSupply * 10) / 100);

        transferOwnership(newOwner);
    }

    receive() external payable {}

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

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

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

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

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

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

    function updateSellTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

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

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

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

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

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

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

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

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

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

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

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

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

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

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

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

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

        address _dexRouter;

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

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

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

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

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

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        ); 
    }     
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkEarlyBuyLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRetrieval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listSnipers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sniperBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff191660019081179091556014805460ff19169091179055600a6080908152694c61736572204579657360b01b60a052610100604052600560c0908152642620a9a2a960d91b60e052600362000062838262000605565b50600462000071828262000605565b5050506000620000866200026960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003b0c833981519152908290a350603260168190556000601781905533916d01090ea8dd15c79784374000000091620000ee91620006e7565b601555603260198190556000601a8190556200010a91620006e7565b60185560646200011c82600262000703565b6200012891906200071d565b60065560646200013a82600262000703565b6200014691906200071d565b60075560646200015882600262000703565b6200016491906200071d565b6008556127106200017782600562000703565b6200018391906200071d565b600b55600c80546001600160a01b03191633179055620001a58260016200026d565b620001b23060016200026d565b620001c161dead60016200026d565b600c54620001da906001600160a01b031660016200026d565b620001e7826001620002d0565b620001f4306001620002d0565b6200020361dead6001620002d0565b600c546200021c906001600160a01b03166001620002d0565b620002423060646200023084605a62000703565b6200023c91906200071d565b6200037e565b620002568260646200023084600a62000703565b620002618262000463565b505062000740565b3390565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b031633146200031f5760405162461bcd60e51b8152602060048201819052602482015260008051602062003aec83398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620003d65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000316565b8060026000828254620003ea9190620006e7565b90915550506001600160a01b0382166000908152602081905260408120805483929062000419908490620006e7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620004ae5760405162461bcd60e51b8152602060048201819052602482015260008051602062003aec833981519152604482015260640162000316565b6001600160a01b038116620005155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000316565b6005546040516001600160a01b0380841692169060008051602062003b0c83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200058b57607f821691505b602082108103620005ac57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200060057600081815260208120601f850160051c81016020861015620005db5750805b601f850160051c820191505b81811015620005fc57828155600101620005e7565b5050505b505050565b81516001600160401b0381111562000621576200062162000560565b620006398162000632845462000576565b84620005b2565b602080601f831160018114620006715760008415620006585750858301515b600019600386901b1c1916600185901b178555620005fc565b600085815260208120601f198616915b82811015620006a25788860151825594840194600190910190840162000681565b5085821015620006c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620006fd57620006fd620006d1565b92915050565b8082028115828204841417620006fd57620006fd620006d1565b6000826200073b57634e487b7160e01b600052601260045260246000fd5b500490565b61339c80620007506000396000f3fe60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063c876d0b911610102578063e94ae90f116100a0578063f2fde38b1161006f578063f2fde38b146109dc578063f6374342146109fc578063f8b45b0514610a12578063fb002c9714610a2857600080fd5b8063e94ae90f14610979578063ea4cfe1214610990578063ee40166e146109b0578063f11a24d3146109c657600080fd5b8063dd62ed3e116100dc578063dd62ed3e146108f2578063e2f4560514610938578063e79d41601461094e578063e884f2601461096457600080fd5b8063c876d0b9146108a2578063d85ba063146108bc578063d86c9fec146108d257600080fd5b8063a9059cbb1161016f578063b79c188611610149578063b79c188614610813578063bbc0c74214610833578063c024666814610852578063c44a24dd1461087257600080fd5b8063a9059cbb146107a3578063b38d5ef4146107c3578063b62496f5146107e357600080fd5b80639a7a23d6116101ab5780639a7a23d614610738578063a28e86d314610758578063a457c2d71461076d578063a62068ce1461078d57600080fd5b80638da5cb5b146106f057806395d89b411461070e57806396c58b7c1461072357600080fd5b80634f77f6c0116102ab578063751039fc1161024957806382aa7c681161022357806382aa7c68146106855780638366e79a146106a557806384791215146106c557806388e765ff146106da57600080fd5b8063751039fc146106305780637571336a146106455780637e926b4b1461066557600080fd5b806366d602ae1161028557806366d602ae146105c45780636a486a8e146105da5780636ddd1713146105f057806370a082311461061057600080fd5b80634f77f6c01461057857806357bd8bb31461058e5780635a139dd4146105ae57600080fd5b80632fe82a92116103185780633c14f4d5116102f25780633c14f4d5146104fa578063452ed4f11461051c578063499b83941461053c5780634a62bb651461055e57600080fd5b80632fe82a921461049e578063313ce567146104be57806339509351146104da57600080fd5b806310d5de531161035457806310d5de531461041957806318160ddd146104495780631a8145bb1461046857806323b872dd1461047e57600080fd5b806306fdde03146103865780630758d924146103b1578063095ea7b3146103e957600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610a3e565b6040516103a89190612ed1565b60405180910390f35b3480156103bd57600080fd5b506009546103d1906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b3480156103f557600080fd5b50610409610404366004612f37565b610ad0565b60405190151581526020016103a8565b34801561042557600080fd5b50610409610434366004612f63565b601e6020526000908152604090205460ff1681565b34801561045557600080fd5b506002545b6040519081526020016103a8565b34801561047457600080fd5b5061045a601c5481565b34801561048a57600080fd5b50610409610499366004612f87565b610ae7565b3480156104aa57600080fd5b506103d16104b9366004612fc8565b610b96565b3480156104ca57600080fd5b50604051601281526020016103a8565b3480156104e657600080fd5b506104096104f5366004612f37565b610bc0565b34801561050657600080fd5b5061050f610bfc565b6040516103a89190613025565b34801561052857600080fd5b50600a546103d1906001600160a01b031681565b34801561054857600080fd5b5061055c610557366004612f63565b610c5d565b005b34801561056a57600080fd5b506012546104099060ff1681565b34801561058457600080fd5b5061045a60195481565b34801561059a57600080fd5b5061055c6105a9366004612f63565b610d36565b3480156105ba57600080fd5b5061045a60165481565b3480156105d057600080fd5b5061045a60075481565b3480156105e657600080fd5b5061045a60185481565b3480156105fc57600080fd5b506012546104099062010000900460ff1681565b34801561061c57600080fd5b5061045a61062b366004612f63565b610ded565b34801561063c57600080fd5b5061055c610e08565b34801561065157600080fd5b5061055c610660366004613046565b610e3e565b34801561067157600080fd5b5061055c61068036600461307f565b610f06565b34801561069157600080fd5b5061055c6106a0366004612fc8565b610fc8565b3480156106b157600080fd5b506104096106c036600461309c565b6110fc565b3480156106d157600080fd5b5061055c611336565b3480156106e657600080fd5b5061045a60065481565b3480156106fc57600080fd5b506005546001600160a01b03166103d1565b34801561071a57600080fd5b5061039b6113ad565b34801561072f57600080fd5b5061055c6113bc565b34801561074457600080fd5b5061055c610753366004613046565b611889565b34801561076457600080fd5b5061055c61197d565b34801561077957600080fd5b50610409610788366004612f37565b6119b6565b34801561079957600080fd5b5061045a600e5481565b3480156107af57600080fd5b506104096107be366004612f37565b611a4f565b3480156107cf57600080fd5b5061055c6107de3660046130ca565b611a5c565b3480156107ef57600080fd5b506104096107fe366004612f63565b601f6020526000908152604090205460ff1681565b34801561081f57600080fd5b5061055c61082e3660046130ca565b611af3565b34801561083f57600080fd5b5060125461040990610100900460ff1681565b34801561085e57600080fd5b5061055c61086d366004613046565b611b86565b34801561087e57600080fd5b5061040961088d366004612f63565b600f6020526000908152604090205460ff1681565b3480156108ae57600080fd5b506014546104099060ff1681565b3480156108c857600080fd5b5061045a60155481565b3480156108de57600080fd5b5061055c6108ed366004612f63565b611c0f565b3480156108fe57600080fd5b5061045a61090d36600461309c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561094457600080fd5b5061045a600b5481565b34801561095a57600080fd5b5061045a60115481565b34801561097057600080fd5b5061055c611cc2565b34801561098557600080fd5b50600e544310610409565b34801561099c57600080fd5b50600c546103d1906001600160a01b031681565b3480156109bc57600080fd5b5061045a600d5481565b3480156109d257600080fd5b5061045a60175481565b3480156109e857600080fd5b5061055c6109f7366004612f63565b611cf8565b348015610a0857600080fd5b5061045a601a5481565b348015610a1e57600080fd5b5061045a60085481565b348015610a3457600080fd5b5061045a601b5481565b606060038054610a4d906130ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906130ec565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b5050505050905090565b6000610add338484611de3565b5060015b92915050565b6000610af4848484611f07565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b7e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b8b8533858403611de3565b506001949350505050565b60108181548110610ba657600080fd5b6000918252602090912001546001600160a01b0316905081565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610add918590610bf790869061313c565b611de3565b60606010805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c36575050505050905090565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b038116610cec5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b75565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610d605760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0381166000908152600f602052604090205460ff1615610dc95760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b75565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610e325760405162461bcd60e51b8152600401610b759061314f565b6012805460ff19169055565b6005546001600160a01b03163314610e685760405162461bcd60e51b8152600401610b759061314f565b80610edb57600a546001600160a01b0390811690831603610edb5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b75565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f305760405162461bcd60e51b8152600401610b759061314f565b80610f7d5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b75565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314610ff25760405162461bcd60e51b8152600401610b759061314f565b601254610100900460ff161561104a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b75565b600a8111156110ab5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b75565b6012805462ffff0019166201010017905543600d8190556110cd90829061313c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146111295760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b03831661117f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b75565b6001600160a01b0383163014158061119f5750601254610100900460ff16155b6112085760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b75565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190613184565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156112c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ea919061319d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113605760405162461bcd60e51b8152600401610b759061314f565b604051600090339047908381818185875af1925050503d80600081146113a2576040519150601f19603f3d011682016040523d82523d6000602084013e6113a7565b606091505b50505050565b606060048054610a4d906130ec565b6005546001600160a01b031633146113e65760405162461bcd60e51b8152600401610b759061314f565b601254610100900460ff16156114525760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b75565b6000466001036114775750737a250d5630b4cf539739df2c5dacb4c659f2488d611543565b4660050361149a5750737a250d5630b4cf539739df2c5dacb4c659f2488d611543565b466038036114bd57507310ed43c718714eb63d5aa57b78b54704e256024e611543565b466061036114e0575073d99d1c33f9fc3444f8101754abc46c52416550d1611543565b4661a4b1036115045750731b02da8cb0d097eb8d57a175b88c7d8b47997506611543565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b75565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561159c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c091906131ba565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906131ba565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906131ba565b600a80546001600160a01b0319166001600160a01b039290921691821790556116e190600161298e565b600a546116f8906001600160a01b031660016129f1565b60095461170f906001600160a01b0316600161298e565b600954611726906001600160a01b03166001611b86565b600047116117825760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b75565b600061178d30610ded565b116117e95760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b75565b6009546118049030906001600160a01b0316610bf782610ded565b6009546001600160a01b031663f305d719473061182081610ded565b60008033426040518863ffffffff1660e01b8152600401611846969594939291906131d7565b60606040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113a79190613212565b6005546001600160a01b031633146118b35760405162461bcd60e51b8152600401610b759061314f565b600a546001600160a01b03908116908316036119375760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b75565b61194182826129f1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146119a75760405162461bcd60e51b8152600401610b759061314f565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a385760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b75565b611a453385858403611de3565b5060019392505050565b6000610add338484611f07565b6005546001600160a01b03163314611a865760405162461bcd60e51b8152600401610b759061314f565b60168290556017819055611a9a818361313c565b6015819055600a1015611aef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b75565b5050565b6005546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610b759061314f565b6019829055601a819055611b31818361313c565b6018819055600f1015611aef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b75565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c395760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0381166000908152600f602052604090205460ff16611ca15760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610b75565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610b759061314f565b6014805460ff19169055565b6005546001600160a01b03163314611d225760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b038116611d875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b75565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b75565b6001600160a01b038216611ea65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b75565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f2d5760405162461bcd60e51b8152600401610b7590613240565b6001600160a01b038216611f535760405162461bcd60e51b8152600401610b7590613285565b60008111611fa35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b75565b601254610100900460ff16612036576001600160a01b0383166000908152601d602052604090205460ff1680611ff157506001600160a01b0382166000908152601d602052604090205460ff165b6120365760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b75565b600e54431015801561204f5750601254610100900460ff165b1561211f576001600160a01b0383166000908152600f602052604090205460ff16158061208957506005546001600160a01b038381169116145b8061209e57506001600160a01b03821661dead145b61211f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b75565b60125460ff16156124fd576005546001600160a01b0384811691161480159061215657506005546001600160a01b03838116911614155b801561216d57506001600160a01b03821661dead14155b801561219257506001600160a01b0383166000908152601d602052604090205460ff16155b80156121b757506001600160a01b0382166000908152601d602052604090205460ff16155b156124fd5760145460ff16156122d0576009546001600160a01b038381169116148015906121f35750600a546001600160a01b03838116911614155b156122d0576122036002436132c8565b3260009081526013602052604090205410801561224157506122266002436132c8565b6001600160a01b038316600090815260136020526040902054105b6122ab5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b75565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff16801561231157506001600160a01b0382166000908152601e602052604090205460ff16155b156123d8576006548111156123795760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b75565b60085461238583610ded565b61238f908361313c565b11156123d35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b75565b6124fd565b6001600160a01b0382166000908152601f602052604090205460ff16801561241957506001600160a01b0383166000908152601e602052604090205460ff16155b15612483576007548111156123d35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b75565b6001600160a01b0382166000908152601e602052604090205460ff166124fd576008546124af83610ded565b6124b9908361313c565b11156124fd5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b75565b600061250830610ded565b600b5490915081108015908190612527575060125462010000900460ff165b801561253d5750600a54600160a01b900460ff16155b801561256157506001600160a01b0384166000908152601f602052604090205460ff165b1561258f57600a805460ff60a01b1916600160a01b179055612581612a1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601d602052604090205460019060ff16806125d157506001600160a01b0385166000908152601d602052604090205460ff165b156125da575060005b6000811561297a57600e544310806126205750670c7d713b49da000060065461260391906132c8565b8510158015612620575043600e54600861261d919061313c565b10155b801561264457506001600160a01b0387166000908152601f602052604090205460ff165b801561266957506001600160a01b0386166000908152601f602052604090205460ff16155b801561268e57506001600160a01b0386166000908152601d602052604090205460ff16155b801561269c57506000601554115b1561282357600e5443106126c3576001600660008282546126bd91906132c8565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166127a3576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161271c90849061313c565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646127b08660636132db565b6127ba91906132f2565b9050601554601754826127cd91906132db565b6127d791906132f2565b601c60008282546127e8919061313c565b90915550506015546016546127fd90836132db565b61280791906132f2565b601b6000828254612818919061313c565b9091555061295c9050565b6001600160a01b0386166000908152601f602052604090205460ff16801561284d57506000601854115b156128af5760646018548661286291906132db565b61286c91906132f2565b9050601854601a548261287f91906132db565b61288991906132f2565b601c600082825461289a919061313c565b90915550506018546019546127fd90836132db565b6001600160a01b0387166000908152601f602052604090205460ff1680156128d957506000601554115b1561295c576064601554866128ee91906132db565b6128f891906132f2565b90506015546017548261290b91906132db565b61291591906132f2565b601c6000828254612926919061313c565b909155505060155460165461293b90836132db565b61294591906132f2565b601b6000828254612956919061313c565b90915550505b801561296d5761296d873083612b81565b61297781866132c8565b94505b612985878787612b81565b50505050505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055611941828261298e565b6000612a2a30610ded565b90506000601b54601c54612a3e919061313c565b9050811580612a4b575080155b15612a54575050565b600b54612a6290600f6132db565b821115612a7a57600b54612a7790600f6132db565b91505b600080600283601c5486612a8e91906132db565b612a9891906132f2565b612aa291906132f2565b9050612ab6612ab182866132c8565b612cd6565b601c5447908190600090612acc906002906132f2565b612ad690876132c8565b601b54612ae390856132db565b612aed91906132f2565b9050612af981836132c8565b6000601c819055601b5591508315801590612b145750600082115b15612b2357612b238483612e30565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b70576040519150601f19603f3d011682016040523d82523d6000602084013e612b75565b606091505b50505050505050505050565b6001600160a01b038316612ba75760405162461bcd60e51b8152600401610b7590613240565b6001600160a01b038216612bcd5760405162461bcd60e51b8152600401610b7590613285565b6001600160a01b03831660009081526020819052604090205481811015612c455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b75565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c7c90849061313c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cc891815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d0b57612d0b613314565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8891906131ba565b81600181518110612d9b57612d9b613314565b6001600160a01b039283166020918202929092010152600954612dc19130911684611de3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dfa90859060009086903090429060040161332a565b600060405180830381600087803b158015612e1457600080fd5b505af1158015612e28573d6000803e3d6000fd5b505050505050565b600954612e489030906001600160a01b031684611de3565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612e879030908790600090819061dead9042906004016131d7565b60606040518083038185885af1158015612ea5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612eca9190613212565b5050505050565b600060208083528351808285015260005b81811015612efe57858101830151858201604001528201612ee2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f3457600080fd5b50565b60008060408385031215612f4a57600080fd5b8235612f5581612f1f565b946020939093013593505050565b600060208284031215612f7557600080fd5b8135612f8081612f1f565b9392505050565b600080600060608486031215612f9c57600080fd5b8335612fa781612f1f565b92506020840135612fb781612f1f565b929592945050506040919091013590565b600060208284031215612fda57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561301a5781516001600160a01b031687529582019590820190600101612ff5565b509495945050505050565b602081526000612f806020830184612fe1565b8015158114612f3457600080fd5b6000806040838503121561305957600080fd5b823561306481612f1f565b9150602083013561307481613038565b809150509250929050565b60006020828403121561309157600080fd5b8135612f8081613038565b600080604083850312156130af57600080fd5b82356130ba81612f1f565b9150602083013561307481612f1f565b600080604083850312156130dd57600080fd5b50508035926020909101359150565b600181811c9082168061310057607f821691505b60208210810361312057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae157610ae1613126565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561319657600080fd5b5051919050565b6000602082840312156131af57600080fd5b8151612f8081613038565b6000602082840312156131cc57600080fd5b8151612f8081612f1f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561322757600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ae157610ae1613126565b8082028115828204841417610ae157610ae1613126565b60008261330f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061334960a0830186612fe1565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ecf4afddee1f19d8b29f771eb87e89999ae83b4b1ba12a77c380cdb04d502edd64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063c876d0b911610102578063e94ae90f116100a0578063f2fde38b1161006f578063f2fde38b146109dc578063f6374342146109fc578063f8b45b0514610a12578063fb002c9714610a2857600080fd5b8063e94ae90f14610979578063ea4cfe1214610990578063ee40166e146109b0578063f11a24d3146109c657600080fd5b8063dd62ed3e116100dc578063dd62ed3e146108f2578063e2f4560514610938578063e79d41601461094e578063e884f2601461096457600080fd5b8063c876d0b9146108a2578063d85ba063146108bc578063d86c9fec146108d257600080fd5b8063a9059cbb1161016f578063b79c188611610149578063b79c188614610813578063bbc0c74214610833578063c024666814610852578063c44a24dd1461087257600080fd5b8063a9059cbb146107a3578063b38d5ef4146107c3578063b62496f5146107e357600080fd5b80639a7a23d6116101ab5780639a7a23d614610738578063a28e86d314610758578063a457c2d71461076d578063a62068ce1461078d57600080fd5b80638da5cb5b146106f057806395d89b411461070e57806396c58b7c1461072357600080fd5b80634f77f6c0116102ab578063751039fc1161024957806382aa7c681161022357806382aa7c68146106855780638366e79a146106a557806384791215146106c557806388e765ff146106da57600080fd5b8063751039fc146106305780637571336a146106455780637e926b4b1461066557600080fd5b806366d602ae1161028557806366d602ae146105c45780636a486a8e146105da5780636ddd1713146105f057806370a082311461061057600080fd5b80634f77f6c01461057857806357bd8bb31461058e5780635a139dd4146105ae57600080fd5b80632fe82a92116103185780633c14f4d5116102f25780633c14f4d5146104fa578063452ed4f11461051c578063499b83941461053c5780634a62bb651461055e57600080fd5b80632fe82a921461049e578063313ce567146104be57806339509351146104da57600080fd5b806310d5de531161035457806310d5de531461041957806318160ddd146104495780631a8145bb1461046857806323b872dd1461047e57600080fd5b806306fdde03146103865780630758d924146103b1578063095ea7b3146103e957600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610a3e565b6040516103a89190612ed1565b60405180910390f35b3480156103bd57600080fd5b506009546103d1906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b3480156103f557600080fd5b50610409610404366004612f37565b610ad0565b60405190151581526020016103a8565b34801561042557600080fd5b50610409610434366004612f63565b601e6020526000908152604090205460ff1681565b34801561045557600080fd5b506002545b6040519081526020016103a8565b34801561047457600080fd5b5061045a601c5481565b34801561048a57600080fd5b50610409610499366004612f87565b610ae7565b3480156104aa57600080fd5b506103d16104b9366004612fc8565b610b96565b3480156104ca57600080fd5b50604051601281526020016103a8565b3480156104e657600080fd5b506104096104f5366004612f37565b610bc0565b34801561050657600080fd5b5061050f610bfc565b6040516103a89190613025565b34801561052857600080fd5b50600a546103d1906001600160a01b031681565b34801561054857600080fd5b5061055c610557366004612f63565b610c5d565b005b34801561056a57600080fd5b506012546104099060ff1681565b34801561058457600080fd5b5061045a60195481565b34801561059a57600080fd5b5061055c6105a9366004612f63565b610d36565b3480156105ba57600080fd5b5061045a60165481565b3480156105d057600080fd5b5061045a60075481565b3480156105e657600080fd5b5061045a60185481565b3480156105fc57600080fd5b506012546104099062010000900460ff1681565b34801561061c57600080fd5b5061045a61062b366004612f63565b610ded565b34801561063c57600080fd5b5061055c610e08565b34801561065157600080fd5b5061055c610660366004613046565b610e3e565b34801561067157600080fd5b5061055c61068036600461307f565b610f06565b34801561069157600080fd5b5061055c6106a0366004612fc8565b610fc8565b3480156106b157600080fd5b506104096106c036600461309c565b6110fc565b3480156106d157600080fd5b5061055c611336565b3480156106e657600080fd5b5061045a60065481565b3480156106fc57600080fd5b506005546001600160a01b03166103d1565b34801561071a57600080fd5b5061039b6113ad565b34801561072f57600080fd5b5061055c6113bc565b34801561074457600080fd5b5061055c610753366004613046565b611889565b34801561076457600080fd5b5061055c61197d565b34801561077957600080fd5b50610409610788366004612f37565b6119b6565b34801561079957600080fd5b5061045a600e5481565b3480156107af57600080fd5b506104096107be366004612f37565b611a4f565b3480156107cf57600080fd5b5061055c6107de3660046130ca565b611a5c565b3480156107ef57600080fd5b506104096107fe366004612f63565b601f6020526000908152604090205460ff1681565b34801561081f57600080fd5b5061055c61082e3660046130ca565b611af3565b34801561083f57600080fd5b5060125461040990610100900460ff1681565b34801561085e57600080fd5b5061055c61086d366004613046565b611b86565b34801561087e57600080fd5b5061040961088d366004612f63565b600f6020526000908152604090205460ff1681565b3480156108ae57600080fd5b506014546104099060ff1681565b3480156108c857600080fd5b5061045a60155481565b3480156108de57600080fd5b5061055c6108ed366004612f63565b611c0f565b3480156108fe57600080fd5b5061045a61090d36600461309c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561094457600080fd5b5061045a600b5481565b34801561095a57600080fd5b5061045a60115481565b34801561097057600080fd5b5061055c611cc2565b34801561098557600080fd5b50600e544310610409565b34801561099c57600080fd5b50600c546103d1906001600160a01b031681565b3480156109bc57600080fd5b5061045a600d5481565b3480156109d257600080fd5b5061045a60175481565b3480156109e857600080fd5b5061055c6109f7366004612f63565b611cf8565b348015610a0857600080fd5b5061045a601a5481565b348015610a1e57600080fd5b5061045a60085481565b348015610a3457600080fd5b5061045a601b5481565b606060038054610a4d906130ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906130ec565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b5050505050905090565b6000610add338484611de3565b5060015b92915050565b6000610af4848484611f07565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b7e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b8b8533858403611de3565b506001949350505050565b60108181548110610ba657600080fd5b6000918252602090912001546001600160a01b0316905081565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610add918590610bf790869061313c565b611de3565b60606010805480602002602001604051908101604052809291908181526020018280548015610ac657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c36575050505050905090565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b038116610cec5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b75565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b03163314610d605760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0381166000908152600f602052604090205460ff1615610dc95760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610b75565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610e325760405162461bcd60e51b8152600401610b759061314f565b6012805460ff19169055565b6005546001600160a01b03163314610e685760405162461bcd60e51b8152600401610b759061314f565b80610edb57600a546001600160a01b0390811690831603610edb5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b75565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f305760405162461bcd60e51b8152600401610b759061314f565b80610f7d5760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610b75565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314610ff25760405162461bcd60e51b8152600401610b759061314f565b601254610100900460ff161561104a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b75565b600a8111156110ab5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b75565b6012805462ffff0019166201010017905543600d8190556110cd90829061313c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146111295760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b03831661117f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b75565b6001600160a01b0383163014158061119f5750601254610100900460ff16155b6112085760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b75565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190613184565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156112c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ea919061319d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146113605760405162461bcd60e51b8152600401610b759061314f565b604051600090339047908381818185875af1925050503d80600081146113a2576040519150601f19603f3d011682016040523d82523d6000602084013e6113a7565b606091505b50505050565b606060048054610a4d906130ec565b6005546001600160a01b031633146113e65760405162461bcd60e51b8152600401610b759061314f565b601254610100900460ff16156114525760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b75565b6000466001036114775750737a250d5630b4cf539739df2c5dacb4c659f2488d611543565b4660050361149a5750737a250d5630b4cf539739df2c5dacb4c659f2488d611543565b466038036114bd57507310ed43c718714eb63d5aa57b78b54704e256024e611543565b466061036114e0575073d99d1c33f9fc3444f8101754abc46c52416550d1611543565b4661a4b1036115045750731b02da8cb0d097eb8d57a175b88c7d8b47997506611543565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610b75565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561159c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c091906131ba565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906131ba565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906131ba565b600a80546001600160a01b0319166001600160a01b039290921691821790556116e190600161298e565b600a546116f8906001600160a01b031660016129f1565b60095461170f906001600160a01b0316600161298e565b600954611726906001600160a01b03166001611b86565b600047116117825760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b75565b600061178d30610ded565b116117e95760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b75565b6009546118049030906001600160a01b0316610bf782610ded565b6009546001600160a01b031663f305d719473061182081610ded565b60008033426040518863ffffffff1660e01b8152600401611846969594939291906131d7565b60606040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113a79190613212565b6005546001600160a01b031633146118b35760405162461bcd60e51b8152600401610b759061314f565b600a546001600160a01b03908116908316036119375760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b75565b61194182826129f1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146119a75760405162461bcd60e51b8152600401610b759061314f565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a385760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b75565b611a453385858403611de3565b5060019392505050565b6000610add338484611f07565b6005546001600160a01b03163314611a865760405162461bcd60e51b8152600401610b759061314f565b60168290556017819055611a9a818361313c565b6015819055600a1015611aef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610b75565b5050565b6005546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610b759061314f565b6019829055601a819055611b31818361313c565b6018819055600f1015611aef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b75565b6005546001600160a01b03163314611bb05760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c395760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b0381166000908152600f602052604090205460ff16611ca15760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610b75565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610b759061314f565b6014805460ff19169055565b6005546001600160a01b03163314611d225760405162461bcd60e51b8152600401610b759061314f565b6001600160a01b038116611d875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b75565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b75565b6001600160a01b038216611ea65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b75565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f2d5760405162461bcd60e51b8152600401610b7590613240565b6001600160a01b038216611f535760405162461bcd60e51b8152600401610b7590613285565b60008111611fa35760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b75565b601254610100900460ff16612036576001600160a01b0383166000908152601d602052604090205460ff1680611ff157506001600160a01b0382166000908152601d602052604090205460ff165b6120365760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b75565b600e54431015801561204f5750601254610100900460ff165b1561211f576001600160a01b0383166000908152600f602052604090205460ff16158061208957506005546001600160a01b038381169116145b8061209e57506001600160a01b03821661dead145b61211f5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b75565b60125460ff16156124fd576005546001600160a01b0384811691161480159061215657506005546001600160a01b03838116911614155b801561216d57506001600160a01b03821661dead14155b801561219257506001600160a01b0383166000908152601d602052604090205460ff16155b80156121b757506001600160a01b0382166000908152601d602052604090205460ff16155b156124fd5760145460ff16156122d0576009546001600160a01b038381169116148015906121f35750600a546001600160a01b03838116911614155b156122d0576122036002436132c8565b3260009081526013602052604090205410801561224157506122266002436132c8565b6001600160a01b038316600090815260136020526040902054105b6122ab5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b75565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601f602052604090205460ff16801561231157506001600160a01b0382166000908152601e602052604090205460ff16155b156123d8576006548111156123795760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b75565b60085461238583610ded565b61238f908361313c565b11156123d35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b75565b6124fd565b6001600160a01b0382166000908152601f602052604090205460ff16801561241957506001600160a01b0383166000908152601e602052604090205460ff16155b15612483576007548111156123d35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b75565b6001600160a01b0382166000908152601e602052604090205460ff166124fd576008546124af83610ded565b6124b9908361313c565b11156124fd5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b75565b600061250830610ded565b600b5490915081108015908190612527575060125462010000900460ff165b801561253d5750600a54600160a01b900460ff16155b801561256157506001600160a01b0384166000908152601f602052604090205460ff165b1561258f57600a805460ff60a01b1916600160a01b179055612581612a1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601d602052604090205460019060ff16806125d157506001600160a01b0385166000908152601d602052604090205460ff165b156125da575060005b6000811561297a57600e544310806126205750670c7d713b49da000060065461260391906132c8565b8510158015612620575043600e54600861261d919061313c565b10155b801561264457506001600160a01b0387166000908152601f602052604090205460ff165b801561266957506001600160a01b0386166000908152601f602052604090205460ff16155b801561268e57506001600160a01b0386166000908152601d602052604090205460ff16155b801561269c57506000601554115b1561282357600e5443106126c3576001600660008282546126bd91906132c8565b90915550505b6001600160a01b0386166000908152600f602052604090205460ff166127a3576001600160a01b0386166000908152600f60205260408120805460ff19166001908117909155601180549192909161271c90849061313c565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646127b08660636132db565b6127ba91906132f2565b9050601554601754826127cd91906132db565b6127d791906132f2565b601c60008282546127e8919061313c565b90915550506015546016546127fd90836132db565b61280791906132f2565b601b6000828254612818919061313c565b9091555061295c9050565b6001600160a01b0386166000908152601f602052604090205460ff16801561284d57506000601854115b156128af5760646018548661286291906132db565b61286c91906132f2565b9050601854601a548261287f91906132db565b61288991906132f2565b601c600082825461289a919061313c565b90915550506018546019546127fd90836132db565b6001600160a01b0387166000908152601f602052604090205460ff1680156128d957506000601554115b1561295c576064601554866128ee91906132db565b6128f891906132f2565b90506015546017548261290b91906132db565b61291591906132f2565b601c6000828254612926919061313c565b909155505060155460165461293b90836132db565b61294591906132f2565b601b6000828254612956919061313c565b90915550505b801561296d5761296d873083612b81565b61297781866132c8565b94505b612985878787612b81565b50505050505050565b6001600160a01b0382166000818152601e6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055611941828261298e565b6000612a2a30610ded565b90506000601b54601c54612a3e919061313c565b9050811580612a4b575080155b15612a54575050565b600b54612a6290600f6132db565b821115612a7a57600b54612a7790600f6132db565b91505b600080600283601c5486612a8e91906132db565b612a9891906132f2565b612aa291906132f2565b9050612ab6612ab182866132c8565b612cd6565b601c5447908190600090612acc906002906132f2565b612ad690876132c8565b601b54612ae390856132db565b612aed91906132f2565b9050612af981836132c8565b6000601c819055601b5591508315801590612b145750600082115b15612b2357612b238483612e30565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612b70576040519150601f19603f3d011682016040523d82523d6000602084013e612b75565b606091505b50505050505050505050565b6001600160a01b038316612ba75760405162461bcd60e51b8152600401610b7590613240565b6001600160a01b038216612bcd5760405162461bcd60e51b8152600401610b7590613285565b6001600160a01b03831660009081526020819052604090205481811015612c455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b75565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c7c90849061313c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cc891815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d0b57612d0b613314565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8891906131ba565b81600181518110612d9b57612d9b613314565b6001600160a01b039283166020918202929092010152600954612dc19130911684611de3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dfa90859060009086903090429060040161332a565b600060405180830381600087803b158015612e1457600080fd5b505af1158015612e28573d6000803e3d6000fd5b505050505050565b600954612e489030906001600160a01b031684611de3565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612e879030908790600090819061dead9042906004016131d7565b60606040518083038185885af1158015612ea5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612eca9190613212565b5050505050565b600060208083528351808285015260005b81811015612efe57858101830151858201604001528201612ee2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f3457600080fd5b50565b60008060408385031215612f4a57600080fd5b8235612f5581612f1f565b946020939093013593505050565b600060208284031215612f7557600080fd5b8135612f8081612f1f565b9392505050565b600080600060608486031215612f9c57600080fd5b8335612fa781612f1f565b92506020840135612fb781612f1f565b929592945050506040919091013590565b600060208284031215612fda57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561301a5781516001600160a01b031687529582019590820190600101612ff5565b509495945050505050565b602081526000612f806020830184612fe1565b8015158114612f3457600080fd5b6000806040838503121561305957600080fd5b823561306481612f1f565b9150602083013561307481613038565b809150509250929050565b60006020828403121561309157600080fd5b8135612f8081613038565b600080604083850312156130af57600080fd5b82356130ba81612f1f565b9150602083013561307481612f1f565b600080604083850312156130dd57600080fd5b50508035926020909101359150565b600181811c9082168061310057607f821691505b60208210810361312057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae157610ae1613126565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561319657600080fd5b5051919050565b6000602082840312156131af57600080fd5b8151612f8081613038565b6000602082840312156131cc57600080fd5b8151612f8081612f1f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561322757600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ae157610ae1613126565b8082028115828204841417610ae157610ae1613126565b60008261330f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061334960a0830186612fe1565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ecf4afddee1f19d8b29f771eb87e89999ae83b4b1ba12a77c380cdb04d502edd64736f6c63430008130033

Deployed Bytecode Sourcemap

10674:18118:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4190:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10816:27;;;;;;;;;;-1:-1:-1;10816:27:0;;;;-1:-1:-1;;;;;10816:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10816:27:0;567:221:1;5170:194:0;;;;;;;;;;-1:-1:-1;5170:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5170:194:0;1249:187:1;11805:63:0;;;;;;;;;;-1:-1:-1;11805:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4511:108;;;;;;;;;;-1:-1:-1;4599:12:0;;4511:108;;;1839:25:1;;;1827:2;1812:18;4511:108:0;1693:177:1;11704:33:0;;;;;;;;;;;;;;;;5372:529;;;;;;;;;;-1:-1:-1;5372:529:0;;;;;:::i;:::-;;:::i;11126:29::-;;;;;;;;;;-1:-1:-1;11126:29:0;;;;;:::i;:::-;;:::i;4410:93::-;;;;;;;;;;-1:-1:-1;4410:93:0;;4493:2;2871:36:1;;2859:2;2844:18;4410:93:0;2729:184:1;5909:290:0;;;;;;;;;;-1:-1:-1;5909:290:0;;;;;:::i;:::-;;:::i;25787:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10850:21::-;;;;;;;;;;-1:-1:-1;10850:21:0;;;;-1:-1:-1;;;;;10850:21:0;;;25244:350;;;;;;;;;;-1:-1:-1;25244:350:0;;;;;:::i;:::-;;:::i;:::-;;11199:33;;;;;;;;;;-1:-1:-1;11199:33:0;;;;;;;;11584:32;;;;;;;;;;;;;;;;25897:176;;;;;;;;;;-1:-1:-1;25897:176:0;;;;;:::i;:::-;;:::i;11472:31::-;;;;;;;;;;;;;;;;10748:28;;;;;;;;;;;;;;;;11549;;;;;;;;;;;;;;;;11279:31;;;;;;;;;;-1:-1:-1;11279:31:0;;;;;;;;;;;4627:143;;;;;;;;;;-1:-1:-1;4627:143:0;;;;;:::i;:::-;;:::i;25602:84::-;;;;;;;;;;;;;:::i;14280:336::-;;;;;;;;;;-1:-1:-1;14280:336:0;;;;;:::i;:::-;;:::i;8618:249::-;;;;;;;;;;-1:-1:-1;8618:249:0;;;;;:::i;:::-;;:::i;26278:464::-;;;;;;;;;;-1:-1:-1;26278:464:0;;;;;:::i;:::-;;:::i;24676:560::-;;;;;;;;;;-1:-1:-1;24676:560:0;;;;;:::i;:::-;;:::i;15938:190::-;;;;;;;;;;;;;:::i;10714:27::-;;;;;;;;;;;;;;;;8404:79;;;;;;;;;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;8469:6:0;8404:79;;4298:104;;;;;;;;;;;;;:::i;26755:2029::-;;;;;;;;;;;;;:::i;14868:355::-;;;;;;;;;;-1:-1:-1;14868:355:0;;;;;:::i;:::-;;:::i;25694:85::-;;;;;;;;;;;;;:::i;6207:475::-;;;;;;;;;;-1:-1:-1;6207:475:0;;;;;:::i;:::-;;:::i;11033:33::-;;;;;;;;;;;;;;;;4778:200;;;;;;;;;;-1:-1:-1;4778:200:0;;;;;:::i;:::-;;:::i;15239:338::-;;;;;;;;;;-1:-1:-1;15239:338:0;;;;;:::i;:::-;;:::i;11875:57::-;;;;;;;;;;-1:-1:-1;11875:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15585:345;;;;;;;;;;-1:-1:-1;15585:345:0;;;;;:::i;:::-;;:::i;11239:33::-;;;;;;;;;;-1:-1:-1;11239:33:0;;;;;;;;;;;16142:182;;;;;;;;;;-1:-1:-1;16142:182:0;;;;;:::i;:::-;;:::i;11073:46::-;;;;;;;;;;-1:-1:-1;11073:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11390:39;;;;;;;;;;-1:-1:-1;11390:39:0;;;;;;;;11438:27;;;;;;;;;;;;;;;;26085:181;;;;;;;;;;-1:-1:-1;26085:181:0;;;;;:::i;:::-;;:::i;4986:176::-;;;;;;;;;;-1:-1:-1;4986:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5127:18:0;;;5100:7;5127:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4986:176;10908:33;;;;;;;;;;;;;;;;11162:28;;;;;;;;;;;;;;;;13934:98;;;;;;;;;;;;;:::i;22173:122::-;;;;;;;;;;-1:-1:-1;22269:18:0;;22254:12;:33;22173:122;;10948:32;;;;;;;;;;-1:-1:-1;10948:32:0;;;;-1:-1:-1;;;;;10948:32:0;;;10989:37;;;;;;;;;;;;;;;;11510:30;;;;;;;;;;;;;;;;8875:281;;;;;;;;;;-1:-1:-1;8875:281:0;;;;;:::i;:::-;;:::i;11623:31::-;;;;;;;;;;;;;;;;10783:24;;;;;;;;;;;;;;;;11663:34;;;;;;;;;;;;;;;;4190:100;4244:13;4277:5;4270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4190:100;:::o;5170:194::-;5278:4;5295:39;335:10;5318:7;5327:6;5295:8;:39::i;:::-;-1:-1:-1;5352:4:0;5170:194;;;;;:::o;5372:529::-;5512:4;5529:36;5539:6;5547:9;5558:6;5529:9;:36::i;:::-;-1:-1:-1;;;;;5605:19:0;;5578:24;5605:19;;;:11;:19;;;;;;;;335:10;5605:33;;;;;;;;5671:26;;;;5649:116;;;;-1:-1:-1;;;5649:116:0;;5639:2:1;5649:116:0;;;5621:21:1;5678:2;5658:18;;;5651:30;5717:34;5697:18;;;5690:62;-1:-1:-1;;;5768:18:1;;;5761:38;5816:19;;5649:116:0;;;;;;;;;5801:57;5810:6;335:10;5851:6;5832:16;:25;5801:8;:57::i;:::-;-1:-1:-1;5889:4:0;;5372:529;-1:-1:-1;;;;5372:529:0:o;11126:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11126:29:0;;-1:-1:-1;11126:29:0;:::o;5909:290::-;335:10;6022:4;6111:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6111:34:0;;;;;;;;;;6022:4;;6039:130;;6089:7;;6111:47;;6148:10;;6111:47;:::i;:::-;6039:8;:130::i;25787:102::-;25833:16;25869:12;25862:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25862:19:0;;;;;;;;;;;;;;;;;;;;;;25787:102;:::o;25244:350::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25370:32:0;::::1;25348:120;;;::::0;-1:-1:-1;;;25348:120:0;;6671:2:1;25348:120:0::1;::::0;::::1;6653:21:1::0;6710:2;6690:18;;;6683:30;6749:34;6729:18;;;6722:62;-1:-1:-1;;;6800:18:1;;;6793:36;6846:19;;25348:120:0::1;6469:402:1::0;25348:120:0::1;25479:17;:47:::0;;-1:-1:-1;;;;;;25479:47:0::1;-1:-1:-1::0;;;;;25479:47:0;::::1;::::0;;::::1;::::0;;;25542:44:::1;::::0;::::1;::::0;-1:-1:-1;;25542:44:0::1;25244:350:::0;:::o;25897:176::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25972:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;25971:23;25963:62;;;::::0;-1:-1:-1;;;25963:62:0;;7078:2:1;25963:62:0::1;::::0;::::1;7060:21:1::0;7117:2;7097:18;;;7090:30;7156:28;7136:18;;;7129:56;7202:18;;25963:62:0::1;6876:350:1::0;25963:62:0::1;-1:-1:-1::0;;;;;26036:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;26036:29:0::1;26061:4;26036:29;::::0;;25897:176::o;4627:143::-;-1:-1:-1;;;;;4744:18:0;4717:7;4744:18;;;;;;;;;;;;4627:143::o;25602:84::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;25656:14:::1;:22:::0;;-1:-1:-1;;25656:22:0::1;::::0;;25602:84::o;14280:336::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;14402:4:::1;14397:155;;14459:6;::::0;-1:-1:-1;;;;;14459:6:0;;::::1;14449:16:::0;;::::1;::::0;14423:117:::1;;;::::0;-1:-1:-1;;;14423:117:0;;7433:2:1;14423:117:0::1;::::0;::::1;7415:21:1::0;7472:2;7452:18;;;7445:30;7511:34;7491:18;;;7484:62;-1:-1:-1;;;7562:18:1;;;7555:37;7609:19;;14423:117:0::1;7231:403:1::0;14423:117:0::1;-1:-1:-1::0;;;;;14562:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;14562:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14280:336::o;8618:249::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;8729:15:::1;8721:52;;;::::0;-1:-1:-1;;;8721:52:0;;7841:2:1;8721:52:0::1;::::0;::::1;7823:21:1::0;7880:2;7860:18;;;7853:30;7919:26;7899:18;;;7892:54;7963:18;;8721:52:0::1;7639:348:1::0;8721:52:0::1;8810:6;::::0;8789:40:::1;::::0;8826:1:::1;::::0;-1:-1:-1;;;;;8810:6:0::1;::::0;8789:40:::1;::::0;8826:1;;8789:40:::1;-1:-1:-1::0;8840:6:0::1;:19:::0;;-1:-1:-1;;;;;;8840:19:0::1;::::0;;8618:249::o;26278:464::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;26366:13:::1;::::0;::::1;::::0;::::1;;;26365:14;26357:50;;;::::0;-1:-1:-1;;;26357:50:0;;8194:2:1;26357:50:0::1;::::0;::::1;8176:21:1::0;8233:2;8213:18;;;8206:30;8272:25;8252:18;;;8245:53;8315:18;;26357:50:0::1;7992:347:1::0;26357:50:0::1;26460:2;26440:16;:22;;26418:111;;;::::0;-1:-1:-1;;;26418:111:0;;8546:2:1;26418:111:0::1;::::0;::::1;8528:21:1::0;8585:2;8565:18;;;8558:30;8624:34;8604:18;;;8597:62;-1:-1:-1;;;8675:18:1;;;8668:37;8722:19;;26418:111:0::1;8344:403:1::0;26418:111:0::1;26540:13;:20:::0;;-1:-1:-1;;26571:18:0;;;;;26621:12:::1;26600:18;:33:::0;;;26665:37:::1;::::0;26686:16;;26665:37:::1;:::i;:::-;26644:18;:58:::0;26718:16:::1;::::0;::::1;::::0;;;::::1;26278:464:::0;:::o;24676:560::-;8531:6;;24788:10;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24819:20:0;::::1;24811:59;;;::::0;-1:-1:-1;;;24811:59:0;;8954:2:1;24811:59:0::1;::::0;::::1;8936:21:1::0;8993:2;8973:18;;;8966:30;9032:28;9012:18;;;9005:56;9078:18;;24811:59:0::1;8752:350:1::0;24811:59:0::1;-1:-1:-1::0;;;;;24903:23:0;::::1;24921:4;24903:23;;::::0;:41:::1;;-1:-1:-1::0;24931:13:0::1;::::0;::::1;::::0;::::1;;;24930:14;24903:41;24881:143;;;::::0;-1:-1:-1;;;24881:143:0;;9309:2:1;24881:143:0::1;::::0;::::1;9291:21:1::0;9348:2;9328:18;;;9321:30;9387:34;9367:18;;;9360:62;-1:-1:-1;;;9438:18:1;;;9431:50;9498:19;;24881:143:0::1;9107:416:1::0;24881:143:0::1;25062:39;::::0;-1:-1:-1;;;25062:39:0;;25095:4:::1;25062:39;::::0;::::1;731:51:1::0;25035:24:0::1;::::0;-1:-1:-1;;;;;25062:24:0;::::1;::::0;::::1;::::0;704:18:1;;25062:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25120:46;::::0;-1:-1:-1;;;25120:46:0;;-1:-1:-1;;;;;9909:32:1;;;25120:46:0::1;::::0;::::1;9891:51:1::0;9958:18;;;9951:34;;;25035:66:0;;-1:-1:-1;25120:23:0;;::::1;::::0;::::1;::::0;9864:18:1;;25120:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25182;::::0;;-1:-1:-1;;;;;9909:32:1;;9891:51;;9973:2;9958:18;;9951:34;;;25112:54:0;;-1:-1:-1;25182:46:0::1;::::0;9864:18:1;25182:46:0::1;;;;;;;24800:436;24676:560:::0;;;;:::o;15938:190::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;16038:82:::1;::::0;16001:12:::1;::::0;16046:10:::1;::::0;16070:21:::1;::::0;16001:12;16038:82;16001:12;16038:82;16070:21;16046:10;16038:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;15938:190:0:o;4298:104::-;4354:13;4387:7;4380:14;;;;;:::i;26755:2029::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;26819:13:::1;::::0;::::1;::::0;::::1;;;26818:14;26810:70;;;::::0;-1:-1:-1;;;26810:70:0;;10658:2:1;26810:70:0::1;::::0;::::1;10640:21:1::0;10697:2;10677:18;;;10670:30;10736:34;10716:18;;;10709:62;-1:-1:-1;;;10787:18:1;;;10780:41;10838:19;;26810:70:0::1;10456:407:1::0;26810:70:0::1;26898:18;26933:13;26950:1;26933:18:::0;26929:722:::1;;-1:-1:-1::0;26981:42:0::1;26929:722;;;27064:13;27081:1;27064:18:::0;27060:591:::1;;-1:-1:-1::0;27112:42:0::1;27060:591;;;27191:13;27208:2;27191:19:::0;27187:464:::1;;-1:-1:-1::0;27240:42:0::1;27187:464;;;27325:13;27342:2;27325:19:::0;27321:330:::1;;-1:-1:-1::0;27374:42:0::1;27321:330;;;27459:13;27476:5;27459:22:::0;27455:196:::1;;-1:-1:-1::0;27511:42:0::1;27455:196;;;27609:30;::::0;-1:-1:-1;;;27609:30:0;;11070:2:1;27609:30:0::1;::::0;::::1;11052:21:1::0;11109:2;11089:18;;;11082:30;-1:-1:-1;;;11128:18:1;;;11121:50;11188:18;;27609:30:0::1;10868:344:1::0;27455:196:0::1;27693:9;:34:::0;;-1:-1:-1;;;;;;27693:34:0::1;-1:-1:-1::0;;;;;27693:34:0;::::1;::::0;;::::1;::::0;;;27793:19:::1;::::0;;-1:-1:-1;;;27793:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;27693:34;27793:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27781:43:0::1;;27847:4;27867:9;;;;;;;;;-1:-1:-1::0;;;;;27867:9:0::1;-1:-1:-1::0;;;;;27867:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27781:113;::::0;-1:-1:-1;;;;;;27781:113:0::1;::::0;;;;;;-1:-1:-1;;;;;11703:15:1;;;27781:113:0::1;::::0;::::1;11685:34:1::0;11755:15;;11735:18;;;11728:43;11620:18;;27781:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27772:6;:122:::0;;-1:-1:-1;;;;;;27772:122:0::1;-1:-1:-1::0;;;;;27772:122:0;;;::::1;::::0;;::::1;::::0;;27907:49:::1;::::0;-1:-1:-1;27907:26:0::1;:49::i;:::-;28004:6;::::0;27967:51:::1;::::0;-1:-1:-1;;;;;28004:6:0::1;::::0;27967:28:::1;:51::i;:::-;28074:9;::::0;28039:52:::1;::::0;-1:-1:-1;;;;;28074:9:0::1;::::0;28039:26:::1;:52::i;:::-;28126:9;::::0;28102:41:::1;::::0;-1:-1:-1;;;;;28126:9:0::1;::::0;28102:15:::1;:41::i;:::-;28204:1;28180:21;:25;28158:110;;;::::0;-1:-1:-1;;;28158:110:0;;11984:2:1;28158:110:0::1;::::0;::::1;11966:21:1::0;12023:2;12003:18;;;11996:30;12062:34;12042:18;;;12035:62;-1:-1:-1;;;12113:18:1;;;12106:33;12156:19;;28158:110:0::1;11782:399:1::0;28158:110:0::1;28328:1;28301:24;28319:4;28301:9;:24::i;:::-;:28;28279:116;;;::::0;-1:-1:-1;;;28279:116:0;;12388:2:1;28279:116:0::1;::::0;::::1;12370:21:1::0;12427:2;12407:18;;;12400:30;12466:34;12446:18;;;12439:62;-1:-1:-1;;;12517:18:1;;;12510:36;12563:19;;28279:116:0::1;12186:402:1::0;28279:116:0::1;28451:9;::::0;28419:69:::1;::::0;28436:4:::1;::::0;-1:-1:-1;;;;;28451:9:0::1;28463:24;28436:4:::0;28463:9:::1;:24::i;28419:69::-;28501:9;::::0;-1:-1:-1;;;;;28501:9:0::1;:25;28534:21;28579:4;28599:24;28579:4:::0;28599:9:::1;:24::i;:::-;28638:1;28681::::0;28724:10:::1;28749:15;28501:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14868:355::-:0;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;15016:6:::1;::::0;-1:-1:-1;;;;;15016:6:0;;::::1;15008:14:::0;;::::1;::::0;14986:121:::1;;;::::0;-1:-1:-1;;;14986:121:0;;13718:2:1;14986:121:0::1;::::0;::::1;13700:21:1::0;13757:2;13737:18;;;13730:30;13796:34;13776:18;;;13769:62;13867:27;13847:18;;;13840:55;13912:19;;14986:121:0::1;13516:421:1::0;14986:121:0::1;15118:41;15147:4;15153:5;15118:28;:41::i;:::-;15175:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15175:40:0;::::1;::::0;::::1;::::0;;;::::1;14868:355:::0;;:::o;25694:85::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;25750:14:::1;:21:::0;;-1:-1:-1;;25750:21:0::1;25767:4;25750:21;::::0;;25694:85::o;6207:475::-;335:10;6325:4;6369:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6369:34:0;;;;;;;;;;6436:35;;;;6414:122;;;;-1:-1:-1;;;6414:122:0;;14144:2:1;6414:122:0;;;14126:21:1;14183:2;14163:18;;;14156:30;14222:34;14202:18;;;14195:62;-1:-1:-1;;;14273:18:1;;;14266:35;14318:19;;6414:122:0;13942:401:1;6414:122:0;6572:67;335:10;6595:7;6623:15;6604:16;:34;6572:8;:67::i;:::-;-1:-1:-1;6670:4:0;;6207:475;-1:-1:-1;;;6207:475:0:o;4778:200::-;4889:4;4906:42;335:10;4930:9;4941:6;4906:9;:42::i;15239:338::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;15363:16:::1;:33:::0;;;15407:15:::1;:31:::0;;;15464:34:::1;15425:13:::0;15382:14;15464:34:::1;:::i;:::-;15449:12;:49:::0;;;15533:2:::1;-1:-1:-1::0;15517:18:0::1;15509:60;;;::::0;-1:-1:-1;;;15509:60:0;;14550:2:1;15509:60:0::1;::::0;::::1;14532:21:1::0;14589:2;14569:18;;;14562:30;14628:31;14608:18;;;14601:59;14677:18;;15509:60:0::1;14348:353:1::0;15509:60:0::1;15239:338:::0;;:::o;15585:345::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;15710:17:::1;:34:::0;;;15755:16:::1;:32:::0;;;15814:36:::1;15774:13:::0;15730:14;15814:36:::1;:::i;:::-;15798:13;:52:::0;;;15886:2:::1;-1:-1:-1::0;15869:19:0::1;15861:61;;;::::0;-1:-1:-1;;;15861:61:0;;14908:2:1;15861:61:0::1;::::0;::::1;14890:21:1::0;14947:2;14927:18;;;14920:30;14986:31;14966:18;;;14959:59;15035:18;;15861:61:0::1;14706:353:1::0;16142:182:0;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16227:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16227:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16282:34;;1389:41:1;;;16282:34:0::1;::::0;1362:18:1;16282:34:0::1;;;;;;;16142:182:::0;;:::o;26085:181::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26161:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;26153:64;;;::::0;-1:-1:-1;;;26153:64:0;;15266:2:1;26153:64:0::1;::::0;::::1;15248:21:1::0;15305:2;15285:18;;;15278:30;15344:31;15324:18;;;15317:59;15393:18;;26153:64:0::1;15064:353:1::0;26153:64:0::1;-1:-1:-1::0;;;;;26228:22:0::1;26253:5;26228:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;26228:30:0::1;::::0;;26085:181::o;13934:98::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;13996:20:::1;:28:::0;;-1:-1:-1;;13996:28:0::1;::::0;;13934:98::o;8875:281::-;8531:6;;-1:-1:-1;;;;;8531:6:0;335:10;8531:22;8523:67;;;;-1:-1:-1;;;8523:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8978:22:0;::::1;8956:110;;;::::0;-1:-1:-1;;;8956:110:0;;15624:2:1;8956:110:0::1;::::0;::::1;15606:21:1::0;15663:2;15643:18;;;15636:30;15702:34;15682:18;;;15675:62;-1:-1:-1;;;15753:18:1;;;15746:36;15799:19;;8956:110:0::1;15422:402:1::0;8956:110:0::1;9103:6;::::0;9082:38:::1;::::0;-1:-1:-1;;;;;9082:38:0;;::::1;::::0;9103:6:::1;::::0;9082:38:::1;::::0;9103:6:::1;::::0;9082:38:::1;9131:6;:17:::0;;-1:-1:-1;;;;;;9131:17:0::1;-1:-1:-1::0;;;;;9131:17:0;;;::::1;::::0;;;::::1;::::0;;8875:281::o;7673:380::-;-1:-1:-1;;;;;7809:19:0;;7801:68;;;;-1:-1:-1;;;7801:68:0;;16031:2:1;7801:68:0;;;16013:21:1;16070:2;16050:18;;;16043:30;16109:34;16089:18;;;16082:62;-1:-1:-1;;;16160:18:1;;;16153:34;16204:19;;7801:68:0;15829:400:1;7801:68:0;-1:-1:-1;;;;;7888:21:0;;7880:68;;;;-1:-1:-1;;;7880:68:0;;16436:2:1;7880:68:0;;;16418:21:1;16475:2;16455:18;;;16448:30;16514:34;16494:18;;;16487:62;-1:-1:-1;;;16565:18:1;;;16558:32;16607:19;;7880:68:0;16234:398:1;7880:68:0;-1:-1:-1;;;;;7961:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8013:32;;1839:25:1;;;8013:32:0;;1812:18:1;8013:32:0;;;;;;;7673:380;;;:::o;16332:5833::-;-1:-1:-1;;;;;16464:18:0;;16456:68;;;;-1:-1:-1;;;16456:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16543:16:0;;16535:64;;;;-1:-1:-1;;;16535:64:0;;;;;;;:::i;:::-;16627:1;16618:6;:10;16610:52;;;;-1:-1:-1;;;16610:52:0;;17649:2:1;16610:52:0;;;17631:21:1;17688:2;17668:18;;;17661:30;17727:31;17707:18;;;17700:59;17776:18;;16610:52:0;17447:353:1;16610:52:0;16680:13;;;;;;;16675:183;;-1:-1:-1;;;;;16736:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;16765:23:0;;;;;;:19;:23;;;;;;;;16736:52;16710:136;;;;-1:-1:-1;;;16710:136:0;;18007:2:1;16710:136:0;;;17989:21:1;18046:2;18026:18;;;18019:30;-1:-1:-1;;;18065:18:1;;;18058:52;18127:18;;16710:136:0;17805:346:1;16710:136:0;22269:18;;22254:12;:33;16874:27;:44;;;;-1:-1:-1;16905:13:0;;;;;;;16874:44;16870:272;;;-1:-1:-1;;;;;16962:20:0;;;;;;:14;:20;;;;;;;;16961:21;;:38;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;16986:13:0;;;8469:6;;16986:13;16961:38;:63;;;-1:-1:-1;;;;;;17003:21:0;;17017:6;17003:21;16961:63;16935:195;;;;-1:-1:-1;;;16935:195:0;;18358:2:1;16935:195:0;;;18340:21:1;18397:2;18377:18;;;18370:30;18436:34;18416:18;;;18409:62;18507:34;18487:18;;;18480:62;-1:-1:-1;;;18558:19:1;;;18551:37;18605:19;;16935:195:0;18156:474:1;16935:195:0;17158:14;;;;17154:2148;;;8469:6;;-1:-1:-1;;;;;17211:15:0;;;8469:6;;17211:15;;;;:49;;-1:-1:-1;8469:6:0;;-1:-1:-1;;;;;17247:13:0;;;8469:6;;17247:13;;17211:49;:91;;;;-1:-1:-1;;;;;;17281:21:0;;17295:6;17281:21;;17211:91;:138;;;;-1:-1:-1;;;;;;17324:25:0;;;;;;:19;:25;;;;;;;;17323:26;17211:138;:183;;;;-1:-1:-1;;;;;;17371:23:0;;;;;;:19;:23;;;;;;;;17370:24;17211:183;17189:2102;;;17433:20;;;;17429:692;;;17496:9;;-1:-1:-1;;;;;17482:24:0;;;17496:9;;17482:24;;;;:49;;-1:-1:-1;17524:6:0;;-1:-1:-1;;;;;17510:21:0;;;17524:6;;17510:21;;17482:49;17478:624;;;17673:16;17688:1;17673:12;:16;:::i;:::-;17627:9;17598:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;17794:16:0;17809:1;17794:12;:16;:::i;:::-;-1:-1:-1;;;;;17726:32:0;;;;;;:28;:32;;;;;;:84;17598:212;17560:363;;;;-1:-1:-1;;;17560:363:0;;18970:2:1;17560:363:0;;;18952:21:1;19009:2;18989:18;;;18982:30;19048:34;19028:18;;;19021:62;-1:-1:-1;;;19099:18:1;;;19092:51;19160:19;;17560:363:0;18768:417:1;17560:363:0;17979:9;17950:39;;;;:28;:39;;;;;;17992:12;17950:54;;;;-1:-1:-1;;;;;18031:32:0;;;;;;:47;17478:624;-1:-1:-1;;;;;18195:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;18252:35:0;;;;;;:31;:35;;;;;;;;18251:36;18195:92;18169:1107;;;18374:12;;18364:6;:22;;18330:148;;;;-1:-1:-1;;;18330:148:0;;19392:2:1;18330:148:0;;;19374:21:1;19431:2;19411:18;;;19404:30;19470:34;19450:18;;;19443:62;-1:-1:-1;;;19521:18:1;;;19514:38;19569:19;;18330:148:0;19190:404:1;18330:148:0;18561:9;;18544:13;18554:2;18544:9;:13::i;:::-;18535:22;;:6;:22;:::i;:::-;:35;;18501:140;;;;-1:-1:-1;;;18501:140:0;;19801:2:1;18501:140:0;;;19783:21:1;19840:2;19820:18;;;19813:30;-1:-1:-1;;;19859:18:1;;;19852:49;19918:18;;18501:140:0;19599:343:1;18501:140:0;18169:1107;;;-1:-1:-1;;;;;18739:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;18794:37:0;;;;;;:31;:37;;;;;;;;18793:38;18739:92;18713:563;;;18918:13;;18908:6;:23;;18874:151;;;;-1:-1:-1;;;18874:151:0;;20149:2:1;18874:151:0;;;20131:21:1;20188:2;20168:18;;;20161:30;20227:34;20207:18;;;20200:62;-1:-1:-1;;;20278:18:1;;;20271:40;20328:19;;18874:151:0;19947:406:1;18713:563:0;-1:-1:-1;;;;;19056:35:0;;;;;;:31;:35;;;;;;;;19051:225;;19176:9;;19159:13;19169:2;19159:9;:13::i;:::-;19150:22;;:6;:22;:::i;:::-;:35;;19116:140;;;;-1:-1:-1;;;19116:140:0;;19801:2:1;19116:140:0;;;19783:21:1;19840:2;19820:18;;;19813:30;-1:-1:-1;;;19859:18:1;;;19852:49;19918:18;;19116:140:0;19599:343:1;19116:140:0;19314:28;19345:24;19363:4;19345:9;:24::i;:::-;19421:18;;19314:55;;-1:-1:-1;19397:42:0;;;;;;;19470:22;;-1:-1:-1;19481:11:0;;;;;;;19470:22;:35;;;;-1:-1:-1;19497:8:0;;-1:-1:-1;;;19497:8:0;;;;19496:9;19470:35;:68;;;;-1:-1:-1;;;;;;19509:29:0;;;;;;:25;:29;;;;;;;;19470:68;19452:196;;;19565:8;:15;;-1:-1:-1;;;;19565:15:0;-1:-1:-1;;;19565:15:0;;;19595:10;:8;:10::i;:::-;19620:8;:16;;-1:-1:-1;;;;19620:16:0;;;19452:196;-1:-1:-1;;;;;19779:25:0;;19660:12;19779:25;;;:19;:25;;;;;;19675:4;;19779:25;;;:52;;-1:-1:-1;;;;;;19808:23:0;;;;;;:19;:23;;;;;;;;19779:52;19775:100;;;-1:-1:-1;19858:5:0;19775:100;19887:12;19992:7;19988:2124;;;22269:18;;22254:12;:33;20075:153;;;;20152:8;20137:12;;:23;;;;:::i;:::-;20127:6;:33;;:100;;;;;20215:12;20189:18;;20210:1;20189:22;;;;:::i;:::-;:38;;20127:100;20074:207;;;;-1:-1:-1;;;;;;20250:31:0;;;;;;:25;:31;;;;;;;;20074:207;:258;;;;-1:-1:-1;;;;;;20303:29:0;;;;;;:25;:29;;;;;;;;20302:30;20074:258;:303;;;;-1:-1:-1;;;;;;20354:23:0;;;;;;:19;:23;;;;;;;;20353:24;20074:303;:340;;;;;20413:1;20398:12;;:16;20074:340;20052:1911;;;22269:18;;22254:12;:33;20449:333;;20761:1;20745:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;20449:333:0;-1:-1:-1;;;;;20807:18:0;;;;;;:14;:18;;;;;;;;20802:226;;-1:-1:-1;;;;;20850:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;20850:25:0;20871:4;20850:25;;;;;;20898:13;:18;;20871:4;;20898:13;;:18;;20871:4;;20898:18;:::i;:::-;;;;-1:-1:-1;;20939:12:0;:21;;;;;;;-1:-1:-1;20939:21:0;;;;;;;;-1:-1:-1;;;;;;20939:21:0;-1:-1:-1;;;;;20939:21:0;;;;;;;;20988:20;;731:51:1;;;20988:20:0;;719:2:1;704:18;20988:20:0;;;;;;;20802:226;21071:3;21056:11;:6;21065:2;21056:11;:::i;:::-;21055:19;;;;:::i;:::-;21048:26;;21142:12;;21123:15;;21116:4;:22;;;;:::i;:::-;21115:39;;;;:::i;:::-;21093:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21224:12:0;;21204:16;;21197:23;;:4;:23;:::i;:::-;21196:40;;;;:::i;:::-;21173:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;20052:1911:0;;-1:-1:-1;20052:1911:0;;-1:-1:-1;;;;;21299:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21348:1;21332:13;;:17;21299:50;21295:668;;;21404:3;21387:13;;21378:6;:22;;;;:::i;:::-;21377:30;;;;:::i;:::-;21370:37;;21476:13;;21456:16;;21449:4;:23;;;;:::i;:::-;21448:41;;;;:::i;:::-;21426:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21602:13:0;;21560:17;;21553:24;;:4;:24;:::i;21295:668::-;-1:-1:-1;;;;;21677:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21727:1;21712:12;;:16;21677:51;21673:290;;;21782:3;21766:12;;21757:6;:21;;;;:::i;:::-;21756:29;;;;:::i;:::-;21749:36;;21853:12;;21834:15;;21827:4;:22;;;;:::i;:::-;21826:39;;;;:::i;:::-;21804:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21935:12:0;;21915:16;;21908:23;;:4;:23;:::i;:::-;21907:40;;;;:::i;:::-;21884:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21673:290:0;21983:8;;21979:91;;22012:42;22028:4;22042;22049;22012:15;:42::i;:::-;22086:14;22096:4;22086:14;;:::i;:::-;;;19988:2124;22124:33;22140:4;22146:2;22150:6;22124:15;:33::i;:::-;16445:5720;;;;16332:5833;;;:::o;14040:232::-;-1:-1:-1;;;;;14153:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;14153:52:0;;;;;;;;;;14221:43;;20921:51:1;;;20988:18;;;20981:50;14221:43:0;;20894:18:1;14221:43:0;;;;;;;14040:232;;:::o;14624:236::-;-1:-1:-1;;;;;14707:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;14707:39:0;;;;;;;14757;14707:31;:39;14757:26;:39::i;23399:1269::-;23438:23;23464:24;23482:4;23464:9;:24::i;:::-;23438:50;;23499:25;23548:19;;23527:18;;:40;;;;:::i;:::-;23499:68;-1:-1:-1;23584:20:0;;;:46;;-1:-1:-1;23608:22:0;;23584:46;23580:85;;;23647:7;;23399:1269::o;23580:85::-;23699:18;;:23;;23720:2;23699:23;:::i;:::-;23681:15;:41;23677:115;;;23757:18;;:23;;23778:2;23757:23;:::i;:::-;23739:41;;23677:115;23804:12;23878:23;23991:1;23958:17;23923:18;;23905:15;:36;;;;:::i;:::-;23904:71;;;;:::i;:::-;:88;;;;:::i;:::-;23878:114;-1:-1:-1;24005:51:0;24022:33;23878:114;24022:15;:33;:::i;:::-;24005:16;:51::i;:::-;24270:18;;24090:21;;;;24069:18;;24270:22;;24291:1;;24270:22;:::i;:::-;24249:44;;:17;:44;:::i;:::-;24212:19;;24199:32;;:10;:32;:::i;:::-;24198:96;;;;:::i;:::-;24171:123;-1:-1:-1;24307:35:0;24171:123;24307:35;;:::i;:::-;24376:1;24355:18;:22;;;24388:19;:23;24307:35;-1:-1:-1;24428:19:0;;;;;:42;;;24469:1;24451:15;:19;24428:42;24424:121;;;24487:46;24500:15;24517;24487:12;:46::i;:::-;24579:17;;24571:89;;-1:-1:-1;;;;;24579:17:0;;;;24624:21;;24571:89;;;;24624:21;24579:17;24571:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;23399:1269:0:o;6690:651::-;-1:-1:-1;;;;;6830:20:0;;6822:70;;;;-1:-1:-1;;;6822:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6911:23:0;;6903:71;;;;-1:-1:-1;;;6903:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7011:17:0;;6987:21;7011:17;;;;;;;;;;;7061:23;;;;7039:111;;;;-1:-1:-1;;;7039:111:0;;21244:2:1;7039:111:0;;;21226:21:1;21283:2;21263:18;;;21256:30;21322:34;21302:18;;;21295:62;-1:-1:-1;;;21373:18:1;;;21366:36;21419:19;;7039:111:0;21042:402:1;7039:111:0;-1:-1:-1;;;;;7186:17:0;;;:9;:17;;;;;;;;;;;7206:22;;;7186:42;;7250:20;;;;;;;;:30;;7222:6;;7186:9;7250:30;;7222:6;;7250:30;:::i;:::-;;;;;;;;7315:9;-1:-1:-1;;;;;7298:35:0;7307:6;-1:-1:-1;;;;;7298:35:0;;7326:6;7298:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7298:35:0;;;;;;;;6811:530;6690:651;;;:::o;22303:571::-;22453:16;;;22467:1;22453:16;;;;;;;;22429:21;;22453:16;;;;;;;;;;-1:-1:-1;22453:16:0;22429:40;;22498:4;22480;22485:1;22480:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22480:23:0;;;:7;;;;;;;;;;:23;;;;22524:9;;:16;;;-1:-1:-1;;;22524:16:0;;;;:9;;;;;:14;;:16;;;;;22480:7;;22524:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22514:4;22519:1;22514:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22514:26:0;;;:7;;;;;;;;;:26;22585:9;;22553:56;;22570:4;;22585:9;22597:11;22553:8;:56::i;:::-;22648:9;;:218;;-1:-1:-1;;;22648:218:0;;-1:-1:-1;;;;;22648:9:0;;;;:60;;:218;;22723:11;;22648:9;;22793:4;;22820;;22840:15;;22648:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22358:516;22303:571;:::o;22882:509::-;23062:9;;23030:56;;23047:4;;-1:-1:-1;;;;;23062:9:0;23074:11;23030:8;:56::i;:::-;23129:9;;:254;;-1:-1:-1;;;23129:254:0;;-1:-1:-1;;;;;23129:9:0;;;;:25;;23162:9;;23129:254;;23195:4;;23215:11;;23129:9;;;;23335:6;;23357:15;;23129:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22882:509;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2918:461::-;2971:3;3009:5;3003:12;3036:6;3031:3;3024:19;3062:4;3091:2;3086:3;3082:12;3075:19;;3128:2;3121:5;3117:14;3149:1;3159:195;3173:6;3170:1;3167:13;3159:195;;;3238:13;;-1:-1:-1;;;;;3234:39:1;3222:52;;3294:12;;;;3329:15;;;;3270:1;3188:9;3159:195;;;-1:-1:-1;3370:3:1;;2918:461;-1:-1:-1;;;;;2918:461:1:o;3384:261::-;3563:2;3552:9;3545:21;3526:4;3583:56;3635:2;3624:9;3620:18;3612:6;3583:56;:::i;3650:118::-;3736:5;3729:13;3722:21;3715:5;3712:32;3702:60;;3758:1;3755;3748:12;3773:382;3838:6;3846;3899:2;3887:9;3878:7;3874:23;3870:32;3867:52;;;3915:1;3912;3905:12;3867:52;3954:9;3941:23;3973:31;3998:5;3973:31;:::i;:::-;4023:5;-1:-1:-1;4080:2:1;4065:18;;4052:32;4093:30;4052:32;4093:30;:::i;:::-;4142:7;4132:17;;;3773:382;;;;;:::o;4160:241::-;4216:6;4269:2;4257:9;4248:7;4244:23;4240:32;4237:52;;;4285:1;4282;4275:12;4237:52;4324:9;4311:23;4343:28;4365:5;4343:28;:::i;4406:388::-;4474:6;4482;4535:2;4523:9;4514:7;4510:23;4506:32;4503:52;;;4551:1;4548;4541:12;4503:52;4590:9;4577:23;4609:31;4634:5;4609:31;:::i;:::-;4659:5;-1:-1:-1;4716:2:1;4701:18;;4688:32;4729:33;4688:32;4729:33;:::i;4799:248::-;4867:6;4875;4928:2;4916:9;4907:7;4903:23;4899:32;4896:52;;;4944:1;4941;4934:12;4896:52;-1:-1:-1;;4967:23:1;;;5037:2;5022:18;;;5009:32;;-1:-1:-1;4799:248:1:o;5052:380::-;5131:1;5127:12;;;;5174;;;5195:61;;5249:4;5241:6;5237:17;5227:27;;5195:61;5302:2;5294:6;5291:14;5271:18;5268:38;5265:161;;5348:10;5343:3;5339:20;5336:1;5329:31;5383:4;5380:1;5373:15;5411:4;5408:1;5401:15;5265:161;;5052:380;;;:::o;5846:127::-;5907:10;5902:3;5898:20;5895:1;5888:31;5938:4;5935:1;5928:15;5962:4;5959:1;5952:15;5978:125;6043:9;;;6064:10;;;6061:36;;;6077:18;;:::i;6108:356::-;6310:2;6292:21;;;6329:18;;;6322:30;6388:34;6383:2;6368:18;;6361:62;6455:2;6440:18;;6108:356::o;9528:184::-;9598:6;9651:2;9639:9;9630:7;9626:23;9622:32;9619:52;;;9667:1;9664;9657:12;9619:52;-1:-1:-1;9690:16:1;;9528:184;-1:-1:-1;9528:184:1:o;9996:245::-;10063:6;10116:2;10104:9;10095:7;10091:23;10087:32;10084:52;;;10132:1;10129;10122:12;10084:52;10164:9;10158:16;10183:28;10205:5;10183:28;:::i;11217:251::-;11287:6;11340:2;11328:9;11319:7;11315:23;11311:32;11308:52;;;11356:1;11353;11346:12;11308:52;11388:9;11382:16;11407:31;11432:5;11407:31;:::i;12593:607::-;-1:-1:-1;;;;;12952:15:1;;;12934:34;;12999:2;12984:18;;12977:34;;;;13042:2;13027:18;;13020:34;;;;13085:2;13070:18;;13063:34;;;;13134:15;;;13128:3;13113:19;;13106:44;12914:3;13166:19;;13159:35;;;;12883:3;12868:19;;12593:607::o;13205:306::-;13293:6;13301;13309;13362:2;13350:9;13341:7;13337:23;13333:32;13330:52;;;13378:1;13375;13368:12;13330:52;13407:9;13401:16;13391:26;;13457:2;13446:9;13442:18;13436:25;13426:35;;13501:2;13490:9;13486:18;13480:25;13470:35;;13205:306;;;;;:::o;16637:401::-;16839:2;16821:21;;;16878:2;16858:18;;;16851:30;16917:34;16912:2;16897:18;;16890:62;-1:-1:-1;;;16983:2:1;16968:18;;16961:35;17028:3;17013:19;;16637:401::o;17043:399::-;17245:2;17227:21;;;17284:2;17264:18;;;17257:30;17323:34;17318:2;17303:18;;17296:62;-1:-1:-1;;;17389:2:1;17374:18;;17367:33;17432:3;17417:19;;17043:399::o;18635:128::-;18702:9;;;18723:11;;;18720:37;;;18737:18;;:::i;20358:168::-;20431:9;;;20462;;20479:15;;;20473:22;;20459:37;20449:71;;20500:18;;:::i;20531:217::-;20571:1;20597;20587:132;;20641:10;20636:3;20632:20;20629:1;20622:31;20676:4;20673:1;20666:15;20704:4;20701:1;20694:15;20587:132;-1:-1:-1;20733:9:1;;20531:217::o;21581:127::-;21642:10;21637:3;21633:20;21630:1;21623:31;21673:4;21670:1;21663:15;21697:4;21694:1;21687:15;21713:582;22012:6;22001:9;21994:25;22055:6;22050:2;22039:9;22035:18;22028:34;22098:3;22093:2;22082:9;22078:18;22071:31;21975:4;22119:57;22171:3;22160:9;22156:19;22148:6;22119:57;:::i;:::-;-1:-1:-1;;;;;22212:32:1;;;;22207:2;22192:18;;22185:60;-1:-1:-1;22276:3:1;22261:19;22254:35;22111:65;21713:582;-1:-1:-1;;;21713:582:1:o

Swarm Source

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