ETH Price: $3,396.53 (-0.63%)
Gas: 22 Gwei

Token

Uchu-Kara (UCHU)
 

Overview

Max Total Supply

10,000,000 UCHU

Holders

208

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,530.532416124304883525 UCHU

Value
$0.00
0x54c9531681f27c01c81d58e05856f4a5b94f8db7
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:
UchuKara

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-11
*/

// SPDX-License-Identifier: MIT

/*
 * https://uchukara.com/
 *
 * Twitter: https://twitter.com/uchu_kara
 */
pragma solidity 0.8.13;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface 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 UchuKara 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;
    address public stakingAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

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

    uint256 private originalOperationsFee;
    uint256 private originalLiquidityFee;
    uint256 private originalStakingFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForStaking;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedStakingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    constructor() payable ERC20("Uchu-Kara", "UCHU") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

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

        uint256 totalSupply = 10 * 1e6 * 1e18;

        maxBuyAmount = (totalSupply * 15) / 1000; // 1.5%
        maxSellAmount = (totalSupply * 15) / 1000; // 1.5%
        maxWallet = (totalSupply * 15) / 1000; // 1.5%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 6;
        buyLiquidityFee = 4;
        buyStakingFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyStakingFee;

        originalOperationsFee = 4;
        originalLiquidityFee = 1;
        originalStakingFee = 0;

        sellOperationsFee = 6;
        sellLiquidityFee = 4;
        sellStakingFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellStakingFee;

        operationsAddress = address(0x94eF3aC7101f7B507eB6a1cE627473a880311d6f);
        stakingAddress = address(0x94eF3aC7101f7B507eB6a1cE627473a880311d6f);

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

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

        _createInitialSupply(address(this), totalSupply);

        transferOwnership(newOwner);
    }

    receive() external payable {}

    function getEarlyBuyers() external view returns (address[] memory) {
        return earlyBuyers;
    }

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

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

        if (!earlyBuyPenaltyInEffect() && tradingActive) {
            require(
                !boughtEarly[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 (
                (earlyBuyPenaltyInEffect() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        uint256 lpAmount = (lpBalance * percent) / 10000;

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

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

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

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

        ethForLiquidity -= ethForOperations + ethForStaking;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForStaking = 0;

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

        (success, ) = address(stakingAddress).call{value: ethForStaking}("");
        (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);
    }

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

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

    function setStakingAddress(address _stakingAddress) external onlyOwner {
        require(
            _stakingAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        stakingAddress = payable(_stakingAddress);
        emit UpdatedStakingAddress(_stakingAddress);
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

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

    function resetTaxes() external onlyOwner {
        buyOperationsFee = originalOperationsFee;
        buyLiquidityFee = originalLiquidityFee;
        buyStakingFee = originalStakingFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyStakingFee;

        sellOperationsFee = originalOperationsFee;
        sellLiquidityFee = originalLiquidityFee;
        sellStakingFee = originalStakingFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellStakingFee;
    }

    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 prepare() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedStakingAddress","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":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"markBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"prepare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStakingFee","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":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"tokensForStaking","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":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e556013805462ffffff191660019081179091556015805460ff191690911790556009608081815268556368752d4b61726160b81b60a0908152610100604052600460c0908152635543485560e01b60e052919262000064916003916200092e565b5080516200007a9060049060208401906200092e565b50505060006200008f620005cf60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004803833981519152908290a35033600046600103620000f45750737a250d5630b4cf539739df2c5dacb4c659f2488d620001d6565b46600403620001195750737a250d5630b4cf539739df2c5dacb4c659f2488d620001d6565b466038036200013e57507310ed43c718714eb63d5aa57b78b54704e256024e620001d6565b4660610362000163575073d99d1c33f9fc3444f8101754abc46c52416550d1620001d6565b4661a4b103620001895750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001d6565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620009d4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df9190620009d4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003539190620009d4565b600a80546001600160a01b0319166001600160a01b039290921691821790556200037f906001620005d3565b600a5462000398906001600160a01b0316600162000636565b6a084595161401484a0000006103e8620003b482600f62000a1c565b620003c0919062000a3e565b6006556103e8620003d382600f62000a1c565b620003df919062000a3e565b6007556103e8620003f282600f62000a1c565b620003fe919062000a3e565b6008556127106200041182600562000a1c565b6200041d919062000a3e565b600b556006601781905560046018819055600060198190559162000442919062000a61565b6200044e919062000a61565b6016556004601a8190556001601b556000601c8190556006601e819055601f83905560208290559091620004829162000a61565b6200048e919062000a61565b601d55600c80547394ef3ac7101f7b507eb6a1ce627473a880311d6f6001600160a01b03199182168117909255600d80549091169091179055620004d4836001620005d3565b620004e1306001620005d3565b620004f061dead6001620005d3565b600c5462000509906001600160a01b03166001620005d3565b600d5462000522906001600160a01b03166001620005d3565b6009546200053b906001600160a01b03166001620005d3565b62000548836001620006a2565b62000555306001620006a2565b6200056461dead6001620006a2565b600c546200057d906001600160a01b03166001620006a2565b600d5462000596906001600160a01b03166001620006a2565b600954620005af906001600160a01b03166001620006a2565b620005bb30826200074c565b620005c68362000831565b50505062000ab8565b3390565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055620006668282620005d3565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006ed5760405162461bcd60e51b81526020600482018190526024820152600080516020620047e38339815191526044820152606401620001cd565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001cd565b8060026000828254620007b8919062000a61565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e790849062000a61565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200087c5760405162461bcd60e51b81526020600482018190526024820152600080516020620047e38339815191526044820152606401620001cd565b6001600160a01b038116620008e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001cd565b6005546040516001600160a01b038084169216906000805160206200480383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200093c9062000a7c565b90600052602060002090601f016020900481019282620009605760008555620009ab565b82601f106200097b57805160ff1916838001178555620009ab565b82800160010185558215620009ab579182015b82811115620009ab5782518255916020019190600101906200098e565b50620009b9929150620009bd565b5090565b5b80821115620009b95760008155600101620009be565b600060208284031215620009e757600080fd5b81516001600160a01b0381168114620009ff57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a395762000a3962000a06565b500290565b60008262000a5c57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a775762000a7762000a06565b500190565b600181811c9082168062000a9157607f821691505b60208210810362000ab257634e487b7160e01b600052602260045260246000fd5b50919050565b613d1b8062000ac86000396000f3fe6080604052600436106103fe5760003560e01c80638da5cb5b11610213578063d7b4be2411610123578063ee40166e116100ab578063f4e0d9ac1161007a578063f4e0d9ac14610b97578063f5648a4f14610bb7578063f637434214610bcc578063f8b45b0514610be2578063fb002c9714610bf857600080fd5b8063ee40166e14610b2b578063efda116514610b41578063f11a24d314610b61578063f2fde38b14610b7757600080fd5b8063e2f45605116100f2578063e2f4560514610aab578063e7b71ce214610ac1578063e884f26014610ad6578063ea4cfe1214610aeb578063eb472fc414610b0b57600080fd5b8063d7b4be2414610a0f578063d85ba06314610a2f578063dc3f0d0f14610a45578063dd62ed3e14610a6557600080fd5b8063b62496f5116101a6578063c18bc19511610175578063c18bc1951461098a578063c876d0b9146109aa578063d257b34f146109c4578063d25e5ea1146109e4578063d28cebb8146109fa57600080fd5b8063b62496f5146108fb578063bbc0c7421461092b578063c02466681461094a578063c17b5b8c1461096a57600080fd5b8063a28e86d3116101e2578063a28e86d314610890578063a457c2d7146108a5578063a62068ce146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b1461081b57806395d89b41146108395780639a5bd2dd1461084e5780639a7a23d61461087057600080fd5b80635a139dd41161030e578063742bd2a5116102a157806382aa7c681161027057806382aa7c68146107755780638366e79a1461079557806385b12c7c146107b557806385ecfd28146107d557806388e765ff1461080557600080fd5b8063742bd2a51461070a578063751039fc146107205780637571336a146107355780638095d5641461075557600080fd5b80636b0a894c116102dd5780636b0a894c1461069f5780636ddd1713146106b557806370a08231146106d5578063715018a6146106f557600080fd5b80635a139dd41461063d5780635bb988c91461065357806366d602ae146106735780636a486a8e1461068957600080fd5b80632be32b6111610391578063452ed4f111610360578063452ed4f1146105b6578063499b8394146105d65780634a62bb65146105f65780634f77f6c01461061057806358a6d5311461062657600080fd5b80632be32b6114610544578063313ce567146105645780633950935114610580578063439be351146105a057600080fd5b806318160ddd116103cd57806318160ddd146104cd5780631a8145bb146104ec5780631d5915f31461050257806323b872dd1461052457600080fd5b806306fdde031461040a5780630758d92414610435578063095ea7b31461046d57806310d5de531461049d57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c0e565b60405161042c91906136c6565b60405180910390f35b34801561044157600080fd5b50600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561047957600080fd5b5061048d610488366004613733565b610ca0565b604051901515815260200161042c565b3480156104a957600080fd5b5061048d6104b836600461375f565b60256020526000908152604090205460ff1681565b3480156104d957600080fd5b506002545b60405190815260200161042c565b3480156104f857600080fd5b506104de60225481565b34801561050e57600080fd5b5061052261051d36600461375f565b610cb6565b005b34801561053057600080fd5b5061048d61053f366004613783565b610d76565b34801561055057600080fd5b5061052261055f3660046137c4565b610e20565b34801561057057600080fd5b506040516012815260200161042c565b34801561058c57600080fd5b5061048d61059b366004613733565b610f2e565b3480156105ac57600080fd5b506104de60195481565b3480156105c257600080fd5b50600a54610455906001600160a01b031681565b3480156105e257600080fd5b506105226105f136600461375f565b610f6a565b34801561060257600080fd5b5060135461048d9060ff1681565b34801561061c57600080fd5b506104de601e5481565b34801561063257600080fd5b50600f54431061048d565b34801561064957600080fd5b506104de60175481565b34801561065f57600080fd5b5061052261066e36600461375f565b611004565b34801561067f57600080fd5b506104de60075481565b34801561069557600080fd5b506104de601d5481565b3480156106ab57600080fd5b506104de60125481565b3480156106c157600080fd5b5060135461048d9062010000900460ff1681565b3480156106e157600080fd5b506104de6106f036600461375f565b6110b7565b34801561070157600080fd5b506105226110d2565b34801561071657600080fd5b506104de60205481565b34801561072c57600080fd5b50610522611146565b34801561074157600080fd5b506105226107503660046137eb565b61117c565b34801561076157600080fd5b50610522610770366004613824565b611244565b34801561078157600080fd5b506105226107903660046137c4565b6112ec565b3480156107a157600080fd5b5061048d6107b0366004613850565b6113e0565b3480156107c157600080fd5b506105226107d03660046137c4565b61161a565b3480156107e157600080fd5b5061048d6107f036600461375f565b60106020526000908152604090205460ff1681565b34801561081157600080fd5b506104de60065481565b34801561082757600080fd5b506005546001600160a01b0316610455565b34801561084557600080fd5b5061041f6117c8565b34801561085a57600080fd5b506108636117d7565b60405161042c91906138c2565b34801561087c57600080fd5b5061052261088b3660046137eb565b611838565b34801561089c57600080fd5b5061052261192c565b3480156108b157600080fd5b5061048d6108c0366004613733565b611965565b3480156108d157600080fd5b506104de600f5481565b3480156108e757600080fd5b5061048d6108f6366004613733565b6119fe565b34801561090757600080fd5b5061048d61091636600461375f565b60266020526000908152604090205460ff1681565b34801561093757600080fd5b5060135461048d90610100900460ff1681565b34801561095657600080fd5b506105226109653660046137eb565b611a0b565b34801561097657600080fd5b50610522610985366004613824565b611a94565b34801561099657600080fd5b506105226109a53660046137c4565b611b37565b3480156109b657600080fd5b5060155461048d9060ff1681565b3480156109d057600080fd5b506105226109df3660046137c4565b611c3e565b3480156109f057600080fd5b506104de60235481565b348015610a0657600080fd5b50610522611d89565b348015610a1b57600080fd5b50600d54610455906001600160a01b031681565b348015610a3b57600080fd5b506104de60165481565b348015610a5157600080fd5b50610522610a603660046137c4565b611ec3565b348015610a7157600080fd5b506104de610a80366004613850565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab757600080fd5b506104de600b5481565b348015610acd57600080fd5b50610522611fcb565b348015610ae257600080fd5b50610522612057565b348015610af757600080fd5b50600c54610455906001600160a01b031681565b348015610b1757600080fd5b50610455610b263660046137c4565b61208d565b348015610b3757600080fd5b506104de600e5481565b348015610b4d57600080fd5b50610522610b5c3660046137c4565b6120b7565b348015610b6d57600080fd5b506104de60185481565b348015610b8357600080fd5b50610522610b9236600461375f565b6122b8565b348015610ba357600080fd5b50610522610bb236600461375f565b6123a3565b348015610bc357600080fd5b5061052261243d565b348015610bd857600080fd5b506104de601f5481565b348015610bee57600080fd5b506104de60085481565b348015610c0457600080fd5b506104de60215481565b606060038054610c1d906138d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c49906138d5565b8015610c965780601f10610c6b57610100808354040283529160200191610c96565b820191906000526020600020905b815481529060010190602001808311610c7957829003601f168201915b5050505050905090565b6000610cad3384846124a9565b50600192915050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610ce09061390f565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff1615610d525760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce0565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6000610d838484846125cd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e085760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ce0565b610e1585338584036124a9565b506001949350505050565b6005546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a7640000612710610e5f60025490565b610e6a90600161395a565b610e749190613979565b610e7e9190613979565b811015610ee05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610ce0565b610ef281670de0b6b3a764000061395a565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cad918590610f6590869061399b565b6124a9565b6005546001600160a01b03163314610f945760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b038116610fba5760405162461bcd60e51b8152600401610ce0906139b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b03811660009081526010602052604090205460ff166110965760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ce0565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610ce09061390f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610ce09061390f565b6013805460ff19169055565b6005546001600160a01b031633146111a65760405162461bcd60e51b8152600401610ce09061390f565b8061121957600a546001600160a01b03908116908316036112195760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce0565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610ce09061390f565b60178390556018829055601981905580611288838561399b565b611292919061399b565b6016819055600510156112e75760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ce0565b505050565b6005546001600160a01b031633146113165760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff161561136e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce0565b600a81111561138f5760405162461bcd60e51b8152600401610ce0906139f9565b6013805462ffff0019166201010017905543600e8190556113b190829061399b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461140d5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0383166114635760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce0565b6001600160a01b038316301415806114835750601354610100900460ff16155b6114ec5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115579190613a40565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190613a59565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116445760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff161561166c5760405162461bcd60e51b8152600401610ce090613a76565b600a811061168c5760405162461bcd60e51b8152600401610ce0906139f9565b6013805462ffff0019166201010017905543600e8190556116ae90829061399b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116116fa5760405162461bcd60e51b8152600401610ce090613ac1565b6000611705306110b7565b116117225760405162461bcd60e51b8152600401610ce090613b04565b60095461173d9030906001600160a01b0316610f65826110b7565b6009546001600160a01b031663f305d7194730611759816110b7565b60008030426040518863ffffffff1660e01b815260040161177f96959493929190613b4a565b60606040518083038185885af115801561179d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c29190613b85565b50505050565b606060048054610c1d906138d5565b60606011805480602002602001604051908101604052809291908181526020018280548015610c9657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611811575050505050905090565b6005546001600160a01b031633146118625760405162461bcd60e51b8152600401610ce09061390f565b600a546001600160a01b03908116908316036118e65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce0565b6118f082826130e4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146119565760405162461bcd60e51b8152600401610ce09061390f565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce0565b6119f433858584036124a9565b5060019392505050565b6000610cad3384846125cd565b6005546001600160a01b03163314611a355760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611abe5760405162461bcd60e51b8152600401610ce09061390f565b601e839055601f829055602081905580611ad8838561399b565b611ae2919061399b565b601d819055600510156112e75760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ce0565b6005546001600160a01b03163314611b615760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a76400006103e8611b7660025490565b611b8190600561395a565b611b8b9190613979565b611b959190613979565b811015611bf75760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ce0565b611c0981670de0b6b3a764000061395a565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f23565b6005546001600160a01b03163314611c685760405162461bcd60e51b8152600401610ce09061390f565b620186a0611c7560025490565b611c8090600161395a565b611c8a9190613979565b811015611cf75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ce0565b6103e8611d0360025490565b611d0e90600161395a565b611d189190613979565b811115611d845760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ce0565b600b55565b6005546001600160a01b03163314611db35760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff1615611ddb5760405162461bcd60e51b8152600401610ce090613a76565b60004711611dfb5760405162461bcd60e51b8152600401610ce090613ac1565b6000611e06306110b7565b11611e235760405162461bcd60e51b8152600401610ce090613b04565b600954611e3e9030906001600160a01b0316610f65826110b7565b6009546001600160a01b031663f305d7194730611e5a816110b7565b60008030426040518863ffffffff1660e01b8152600401611e8096959493929190613b4a565b60606040518083038185885af1158015611e9e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112e79190613b85565b6005546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a7640000612710611f0260025490565b611f0d90600161395a565b611f179190613979565b611f219190613979565b811015611f845760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610ce0565b611f9681670de0b6b3a764000061395a565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f23565b6005546001600160a01b03163314611ff55760405162461bcd60e51b8152600401610ce09061390f565b601a546017819055601b546018819055601c54601981905591612018919061399b565b612022919061399b565b601655601a54601e819055601b54601f819055601c54602081905591612048919061399b565b612052919061399b565b601d55565b6005546001600160a01b031633146120815760405162461bcd60e51b8152600401610ce09061390f565b6015805460ff19169055565b6011818154811061209d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146120e15760405162461bcd60e51b8152600401610ce09061390f565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561212a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214e9190613a40565b9050600081116121a05760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610ce0565b60006127106121af848461395a565b6121b99190613979565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190613a59565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061226f9030908590600190819033904290600401613b4a565b60408051808303816000875af115801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190613bb3565b5050505050565b6005546001600160a01b031633146122e25760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0381166123475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123cd5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0381166123f35760405162461bcd60e51b8152600401610ce0906139b3565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f7d7c7910a5f61b4d7801d72e10a7303e6a1b0120952ebb97b09ab4ecbfe9791790600090a250565b6005546001600160a01b031633146124675760405162461bcd60e51b8152600401610ce09061390f565b604051600090339047908381818185875af1925050503d80600081146117c2576040519150601f19603f3d011682016040523d82523d6000602084013e6117c2565b6001600160a01b03831661250b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce0565b6001600160a01b03821661256c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125f35760405162461bcd60e51b8152600401610ce090613bd7565b6001600160a01b0382166126195760405162461bcd60e51b8152600401610ce090613c1c565b600081116126695760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce0565b601354610100900460ff166126fc576001600160a01b03831660009081526024602052604090205460ff16806126b757506001600160a01b03821660009081526024602052604090205460ff165b6126fc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce0565b600f5443101580156127155750601354610100900460ff165b156127e5576001600160a01b03831660009081526010602052604090205460ff16158061274f57506005546001600160a01b038381169116145b8061276457506001600160a01b03821661dead145b6127e55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ce0565b60135460ff1615612bc3576005546001600160a01b0384811691161480159061281c57506005546001600160a01b03838116911614155b801561283357506001600160a01b03821661dead14155b801561285857506001600160a01b03831660009081526024602052604090205460ff16155b801561287d57506001600160a01b03821660009081526024602052604090205460ff16155b15612bc35760155460ff1615612996576009546001600160a01b038381169116148015906128b95750600a546001600160a01b03838116911614155b15612996576128c9600243613c5f565b3260009081526014602052604090205410801561290757506128ec600243613c5f565b6001600160a01b038316600090815260146020526040902054105b6129715760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce0565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156129d757506001600160a01b03821660009081526025602052604090205460ff16155b15612a9e57600654811115612a3f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce0565b600854612a4b836110b7565b612a55908361399b565b1115612a995760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce0565b612bc3565b6001600160a01b03821660009081526026602052604090205460ff168015612adf57506001600160a01b03831660009081526025602052604090205460ff16155b15612b4957600754811115612a995760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce0565b6001600160a01b03821660009081526025602052604090205460ff16612bc357600854612b75836110b7565b612b7f908361399b565b1115612bc35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce0565b6000612bce306110b7565b600b5490915081108015908190612bed575060135462010000900460ff165b8015612c035750600a54600160a01b900460ff16155b8015612c2757506001600160a01b03841660009081526026602052604090205460ff165b15612c5557600a805460ff60a01b1916600160a01b179055612c47613112565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff1680612c9757506001600160a01b03851660009081526024602052604090205460ff165b15612ca0575060005b600081156130d057600f54431080612ce65750670c7d713b49da0000600654612cc99190613c5f565b8510158015612ce6575043600f546008612ce3919061399b565b10155b8015612d0a57506001600160a01b03871660009081526026602052604090205460ff165b8015612d2f57506001600160a01b03861660009081526026602052604090205460ff16155b8015612d5457506001600160a01b03861660009081526024602052604090205460ff16155b8015612d6257506000601654115b15612f1957600f544310612d8957600160066000828254612d839190613c5f565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612e69576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612de290849061399b565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612e7686606361395a565b612e809190613979565b905060165460185482612e93919061395a565b612e9d9190613979565b60226000828254612eae919061399b565b9091555050601654601754612ec3908361395a565b612ecd9190613979565b60216000828254612ede919061399b565b9091555050601654601954612ef3908361395a565b612efd9190613979565b60236000828254612f0e919061399b565b909155506130b29050565b6001600160a01b03861660009081526026602052604090205460ff168015612f4357506000601d54115b15612fd5576064601d5486612f58919061395a565b612f629190613979565b9050601d54601f5482612f75919061395a565b612f7f9190613979565b60226000828254612f90919061399b565b9091555050601d54601e54612fa5908361395a565b612faf9190613979565b60216000828254612fc0919061399b565b9091555050601d54602054612ef3908361395a565b6001600160a01b03871660009081526026602052604090205460ff168015612fff57506000601654115b156130b257606460165486613014919061395a565b61301e9190613979565b905060165460185482613031919061395a565b61303b9190613979565b6022600082825461304c919061399b565b9091555050601654601754613061908361395a565b61306b9190613979565b6021600082825461307c919061399b565b9091555050601654601954613091908361395a565b61309b9190613979565b602360008282546130ac919061399b565b90915550505b80156130c3576130c387308361331a565b6130cd8186613c5f565b94505b6130db87878761331a565b50505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556118f0828261346f565b600061311d306110b7565b90506000602354602154602254613134919061399b565b61313e919061399b565b905081158061314b575080155b15613154575050565b600b5461316290600a61395a565b82111561317a57600b5461317790600a61395a565b91505b6000806002836022548661318e919061395a565b6131989190613979565b6131a29190613979565b90506131b66131b18286613c5f565b6134d2565b602254479081906000906131cc90600290613979565b6131d69087613c5f565b6021546131e3908561395a565b6131ed9190613979565b9050600060026022546132009190613979565b61320a9088613c5f565b602354613217908661395a565b6132219190613979565b905061322d818361399b565b6132379084613c5f565b600060228190556021819055602355925084158015906132575750600083115b1561326657613266858461362c565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146132b3576040519150601f19603f3d011682016040523d82523d6000602084013e6132b8565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613308576040519150601f19603f3d011682016040523d82523d6000602084013e61330d565b606091505b5050505050505050505050565b6001600160a01b0383166133405760405162461bcd60e51b8152600401610ce090613bd7565b6001600160a01b0382166133665760405162461bcd60e51b8152600401610ce090613c1c565b6001600160a01b038316600090815260208190526040902054818110156133de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce0565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061341590849061399b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161346191815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350757613507613c76565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135849190613c8c565b8160018151811061359757613597613c76565b6001600160a01b0392831660209182029290920101526009546135bd91309116846124a9565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135f6908590600090869030904290600401613ca9565b600060405180830381600087803b15801561361057600080fd5b505af1158015613624573d6000803e3d6000fd5b505050505050565b6009546136449030906001600160a01b0316846124a9565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136839030908790600090819061dead904290600401613b4a565b60606040518083038185885af11580156136a1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122b19190613b85565b600060208083528351808285015260005b818110156136f3578581018301518582016040015282016136d7565b81811115613705576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461373057600080fd5b50565b6000806040838503121561374657600080fd5b82356137518161371b565b946020939093013593505050565b60006020828403121561377157600080fd5b813561377c8161371b565b9392505050565b60008060006060848603121561379857600080fd5b83356137a38161371b565b925060208401356137b38161371b565b929592945050506040919091013590565b6000602082840312156137d657600080fd5b5035919050565b801515811461373057600080fd5b600080604083850312156137fe57600080fd5b82356138098161371b565b91506020830135613819816137dd565b809150509250929050565b60008060006060848603121561383957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561386357600080fd5b823561386e8161371b565b915060208301356138198161371b565b600081518084526020808501945080840160005b838110156138b75781516001600160a01b031687529582019590820190600101613892565b509495945050505050565b60208152600061377c602083018461387e565b600181811c908216806138e957607f821691505b60208210810361390957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561397457613974613944565b500290565b60008261399657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156139ae576139ae613944565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b600060208284031215613a5257600080fd5b5051919050565b600060208284031215613a6b57600080fd5b815161377c816137dd565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b9a57600080fd5b8351925060208401519150604084015190509250925092565b60008060408385031215613bc657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613c7157613c71613944565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613c9e57600080fd5b815161377c8161371b565b85815284602082015260a060408201526000613cc860a083018661387e565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200dd1fffd21ab77594051f2fb0e83d366bb86b0e7e30b723e561ba3532b9d952264736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c80638da5cb5b11610213578063d7b4be2411610123578063ee40166e116100ab578063f4e0d9ac1161007a578063f4e0d9ac14610b97578063f5648a4f14610bb7578063f637434214610bcc578063f8b45b0514610be2578063fb002c9714610bf857600080fd5b8063ee40166e14610b2b578063efda116514610b41578063f11a24d314610b61578063f2fde38b14610b7757600080fd5b8063e2f45605116100f2578063e2f4560514610aab578063e7b71ce214610ac1578063e884f26014610ad6578063ea4cfe1214610aeb578063eb472fc414610b0b57600080fd5b8063d7b4be2414610a0f578063d85ba06314610a2f578063dc3f0d0f14610a45578063dd62ed3e14610a6557600080fd5b8063b62496f5116101a6578063c18bc19511610175578063c18bc1951461098a578063c876d0b9146109aa578063d257b34f146109c4578063d25e5ea1146109e4578063d28cebb8146109fa57600080fd5b8063b62496f5146108fb578063bbc0c7421461092b578063c02466681461094a578063c17b5b8c1461096a57600080fd5b8063a28e86d3116101e2578063a28e86d314610890578063a457c2d7146108a5578063a62068ce146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b1461081b57806395d89b41146108395780639a5bd2dd1461084e5780639a7a23d61461087057600080fd5b80635a139dd41161030e578063742bd2a5116102a157806382aa7c681161027057806382aa7c68146107755780638366e79a1461079557806385b12c7c146107b557806385ecfd28146107d557806388e765ff1461080557600080fd5b8063742bd2a51461070a578063751039fc146107205780637571336a146107355780638095d5641461075557600080fd5b80636b0a894c116102dd5780636b0a894c1461069f5780636ddd1713146106b557806370a08231146106d5578063715018a6146106f557600080fd5b80635a139dd41461063d5780635bb988c91461065357806366d602ae146106735780636a486a8e1461068957600080fd5b80632be32b6111610391578063452ed4f111610360578063452ed4f1146105b6578063499b8394146105d65780634a62bb65146105f65780634f77f6c01461061057806358a6d5311461062657600080fd5b80632be32b6114610544578063313ce567146105645780633950935114610580578063439be351146105a057600080fd5b806318160ddd116103cd57806318160ddd146104cd5780631a8145bb146104ec5780631d5915f31461050257806323b872dd1461052457600080fd5b806306fdde031461040a5780630758d92414610435578063095ea7b31461046d57806310d5de531461049d57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610c0e565b60405161042c91906136c6565b60405180910390f35b34801561044157600080fd5b50600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561047957600080fd5b5061048d610488366004613733565b610ca0565b604051901515815260200161042c565b3480156104a957600080fd5b5061048d6104b836600461375f565b60256020526000908152604090205460ff1681565b3480156104d957600080fd5b506002545b60405190815260200161042c565b3480156104f857600080fd5b506104de60225481565b34801561050e57600080fd5b5061052261051d36600461375f565b610cb6565b005b34801561053057600080fd5b5061048d61053f366004613783565b610d76565b34801561055057600080fd5b5061052261055f3660046137c4565b610e20565b34801561057057600080fd5b506040516012815260200161042c565b34801561058c57600080fd5b5061048d61059b366004613733565b610f2e565b3480156105ac57600080fd5b506104de60195481565b3480156105c257600080fd5b50600a54610455906001600160a01b031681565b3480156105e257600080fd5b506105226105f136600461375f565b610f6a565b34801561060257600080fd5b5060135461048d9060ff1681565b34801561061c57600080fd5b506104de601e5481565b34801561063257600080fd5b50600f54431061048d565b34801561064957600080fd5b506104de60175481565b34801561065f57600080fd5b5061052261066e36600461375f565b611004565b34801561067f57600080fd5b506104de60075481565b34801561069557600080fd5b506104de601d5481565b3480156106ab57600080fd5b506104de60125481565b3480156106c157600080fd5b5060135461048d9062010000900460ff1681565b3480156106e157600080fd5b506104de6106f036600461375f565b6110b7565b34801561070157600080fd5b506105226110d2565b34801561071657600080fd5b506104de60205481565b34801561072c57600080fd5b50610522611146565b34801561074157600080fd5b506105226107503660046137eb565b61117c565b34801561076157600080fd5b50610522610770366004613824565b611244565b34801561078157600080fd5b506105226107903660046137c4565b6112ec565b3480156107a157600080fd5b5061048d6107b0366004613850565b6113e0565b3480156107c157600080fd5b506105226107d03660046137c4565b61161a565b3480156107e157600080fd5b5061048d6107f036600461375f565b60106020526000908152604090205460ff1681565b34801561081157600080fd5b506104de60065481565b34801561082757600080fd5b506005546001600160a01b0316610455565b34801561084557600080fd5b5061041f6117c8565b34801561085a57600080fd5b506108636117d7565b60405161042c91906138c2565b34801561087c57600080fd5b5061052261088b3660046137eb565b611838565b34801561089c57600080fd5b5061052261192c565b3480156108b157600080fd5b5061048d6108c0366004613733565b611965565b3480156108d157600080fd5b506104de600f5481565b3480156108e757600080fd5b5061048d6108f6366004613733565b6119fe565b34801561090757600080fd5b5061048d61091636600461375f565b60266020526000908152604090205460ff1681565b34801561093757600080fd5b5060135461048d90610100900460ff1681565b34801561095657600080fd5b506105226109653660046137eb565b611a0b565b34801561097657600080fd5b50610522610985366004613824565b611a94565b34801561099657600080fd5b506105226109a53660046137c4565b611b37565b3480156109b657600080fd5b5060155461048d9060ff1681565b3480156109d057600080fd5b506105226109df3660046137c4565b611c3e565b3480156109f057600080fd5b506104de60235481565b348015610a0657600080fd5b50610522611d89565b348015610a1b57600080fd5b50600d54610455906001600160a01b031681565b348015610a3b57600080fd5b506104de60165481565b348015610a5157600080fd5b50610522610a603660046137c4565b611ec3565b348015610a7157600080fd5b506104de610a80366004613850565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab757600080fd5b506104de600b5481565b348015610acd57600080fd5b50610522611fcb565b348015610ae257600080fd5b50610522612057565b348015610af757600080fd5b50600c54610455906001600160a01b031681565b348015610b1757600080fd5b50610455610b263660046137c4565b61208d565b348015610b3757600080fd5b506104de600e5481565b348015610b4d57600080fd5b50610522610b5c3660046137c4565b6120b7565b348015610b6d57600080fd5b506104de60185481565b348015610b8357600080fd5b50610522610b9236600461375f565b6122b8565b348015610ba357600080fd5b50610522610bb236600461375f565b6123a3565b348015610bc357600080fd5b5061052261243d565b348015610bd857600080fd5b506104de601f5481565b348015610bee57600080fd5b506104de60085481565b348015610c0457600080fd5b506104de60215481565b606060038054610c1d906138d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c49906138d5565b8015610c965780601f10610c6b57610100808354040283529160200191610c96565b820191906000526020600020905b815481529060010190602001808311610c7957829003601f168201915b5050505050905090565b6000610cad3384846124a9565b50600192915050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610ce09061390f565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff1615610d525760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce0565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b6000610d838484846125cd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e085760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ce0565b610e1585338584036124a9565b506001949350505050565b6005546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a7640000612710610e5f60025490565b610e6a90600161395a565b610e749190613979565b610e7e9190613979565b811015610ee05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610ce0565b610ef281670de0b6b3a764000061395a565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cad918590610f6590869061399b565b6124a9565b6005546001600160a01b03163314610f945760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b038116610fba5760405162461bcd60e51b8152600401610ce0906139b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b03811660009081526010602052604090205460ff166110965760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ce0565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610ce09061390f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610ce09061390f565b6013805460ff19169055565b6005546001600160a01b031633146111a65760405162461bcd60e51b8152600401610ce09061390f565b8061121957600a546001600160a01b03908116908316036112195760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce0565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461126e5760405162461bcd60e51b8152600401610ce09061390f565b60178390556018829055601981905580611288838561399b565b611292919061399b565b6016819055600510156112e75760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ce0565b505050565b6005546001600160a01b031633146113165760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff161561136e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce0565b600a81111561138f5760405162461bcd60e51b8152600401610ce0906139f9565b6013805462ffff0019166201010017905543600e8190556113b190829061399b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461140d5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0383166114635760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce0565b6001600160a01b038316301415806114835750601354610100900460ff16155b6114ec5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115579190613a40565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190613a59565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116445760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff161561166c5760405162461bcd60e51b8152600401610ce090613a76565b600a811061168c5760405162461bcd60e51b8152600401610ce0906139f9565b6013805462ffff0019166201010017905543600e8190556116ae90829061399b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116116fa5760405162461bcd60e51b8152600401610ce090613ac1565b6000611705306110b7565b116117225760405162461bcd60e51b8152600401610ce090613b04565b60095461173d9030906001600160a01b0316610f65826110b7565b6009546001600160a01b031663f305d7194730611759816110b7565b60008030426040518863ffffffff1660e01b815260040161177f96959493929190613b4a565b60606040518083038185885af115801561179d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c29190613b85565b50505050565b606060048054610c1d906138d5565b60606011805480602002602001604051908101604052809291908181526020018280548015610c9657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611811575050505050905090565b6005546001600160a01b031633146118625760405162461bcd60e51b8152600401610ce09061390f565b600a546001600160a01b03908116908316036118e65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce0565b6118f082826130e4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146119565760405162461bcd60e51b8152600401610ce09061390f565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce0565b6119f433858584036124a9565b5060019392505050565b6000610cad3384846125cd565b6005546001600160a01b03163314611a355760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611abe5760405162461bcd60e51b8152600401610ce09061390f565b601e839055601f829055602081905580611ad8838561399b565b611ae2919061399b565b601d819055600510156112e75760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ce0565b6005546001600160a01b03163314611b615760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a76400006103e8611b7660025490565b611b8190600561395a565b611b8b9190613979565b611b959190613979565b811015611bf75760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ce0565b611c0981670de0b6b3a764000061395a565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f23565b6005546001600160a01b03163314611c685760405162461bcd60e51b8152600401610ce09061390f565b620186a0611c7560025490565b611c8090600161395a565b611c8a9190613979565b811015611cf75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ce0565b6103e8611d0360025490565b611d0e90600161395a565b611d189190613979565b811115611d845760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ce0565b600b55565b6005546001600160a01b03163314611db35760405162461bcd60e51b8152600401610ce09061390f565b601354610100900460ff1615611ddb5760405162461bcd60e51b8152600401610ce090613a76565b60004711611dfb5760405162461bcd60e51b8152600401610ce090613ac1565b6000611e06306110b7565b11611e235760405162461bcd60e51b8152600401610ce090613b04565b600954611e3e9030906001600160a01b0316610f65826110b7565b6009546001600160a01b031663f305d7194730611e5a816110b7565b60008030426040518863ffffffff1660e01b8152600401611e8096959493929190613b4a565b60606040518083038185885af1158015611e9e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112e79190613b85565b6005546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610ce09061390f565b670de0b6b3a7640000612710611f0260025490565b611f0d90600161395a565b611f179190613979565b611f219190613979565b811015611f845760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610ce0565b611f9681670de0b6b3a764000061395a565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f23565b6005546001600160a01b03163314611ff55760405162461bcd60e51b8152600401610ce09061390f565b601a546017819055601b546018819055601c54601981905591612018919061399b565b612022919061399b565b601655601a54601e819055601b54601f819055601c54602081905591612048919061399b565b612052919061399b565b601d55565b6005546001600160a01b031633146120815760405162461bcd60e51b8152600401610ce09061390f565b6015805460ff19169055565b6011818154811061209d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146120e15760405162461bcd60e51b8152600401610ce09061390f565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561212a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214e9190613a40565b9050600081116121a05760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610ce0565b60006127106121af848461395a565b6121b99190613979565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190613a59565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061226f9030908590600190819033904290600401613b4a565b60408051808303816000875af115801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190613bb3565b5050505050565b6005546001600160a01b031633146122e25760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0381166123475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123cd5760405162461bcd60e51b8152600401610ce09061390f565b6001600160a01b0381166123f35760405162461bcd60e51b8152600401610ce0906139b3565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f7d7c7910a5f61b4d7801d72e10a7303e6a1b0120952ebb97b09ab4ecbfe9791790600090a250565b6005546001600160a01b031633146124675760405162461bcd60e51b8152600401610ce09061390f565b604051600090339047908381818185875af1925050503d80600081146117c2576040519150601f19603f3d011682016040523d82523d6000602084013e6117c2565b6001600160a01b03831661250b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce0565b6001600160a01b03821661256c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125f35760405162461bcd60e51b8152600401610ce090613bd7565b6001600160a01b0382166126195760405162461bcd60e51b8152600401610ce090613c1c565b600081116126695760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce0565b601354610100900460ff166126fc576001600160a01b03831660009081526024602052604090205460ff16806126b757506001600160a01b03821660009081526024602052604090205460ff165b6126fc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce0565b600f5443101580156127155750601354610100900460ff165b156127e5576001600160a01b03831660009081526010602052604090205460ff16158061274f57506005546001600160a01b038381169116145b8061276457506001600160a01b03821661dead145b6127e55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ce0565b60135460ff1615612bc3576005546001600160a01b0384811691161480159061281c57506005546001600160a01b03838116911614155b801561283357506001600160a01b03821661dead14155b801561285857506001600160a01b03831660009081526024602052604090205460ff16155b801561287d57506001600160a01b03821660009081526024602052604090205460ff16155b15612bc35760155460ff1615612996576009546001600160a01b038381169116148015906128b95750600a546001600160a01b03838116911614155b15612996576128c9600243613c5f565b3260009081526014602052604090205410801561290757506128ec600243613c5f565b6001600160a01b038316600090815260146020526040902054105b6129715760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce0565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156129d757506001600160a01b03821660009081526025602052604090205460ff16155b15612a9e57600654811115612a3f5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce0565b600854612a4b836110b7565b612a55908361399b565b1115612a995760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce0565b612bc3565b6001600160a01b03821660009081526026602052604090205460ff168015612adf57506001600160a01b03831660009081526025602052604090205460ff16155b15612b4957600754811115612a995760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce0565b6001600160a01b03821660009081526025602052604090205460ff16612bc357600854612b75836110b7565b612b7f908361399b565b1115612bc35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce0565b6000612bce306110b7565b600b5490915081108015908190612bed575060135462010000900460ff165b8015612c035750600a54600160a01b900460ff16155b8015612c2757506001600160a01b03841660009081526026602052604090205460ff165b15612c5557600a805460ff60a01b1916600160a01b179055612c47613112565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff1680612c9757506001600160a01b03851660009081526024602052604090205460ff165b15612ca0575060005b600081156130d057600f54431080612ce65750670c7d713b49da0000600654612cc99190613c5f565b8510158015612ce6575043600f546008612ce3919061399b565b10155b8015612d0a57506001600160a01b03871660009081526026602052604090205460ff165b8015612d2f57506001600160a01b03861660009081526026602052604090205460ff16155b8015612d5457506001600160a01b03861660009081526024602052604090205460ff16155b8015612d6257506000601654115b15612f1957600f544310612d8957600160066000828254612d839190613c5f565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612e69576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612de290849061399b565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612e7686606361395a565b612e809190613979565b905060165460185482612e93919061395a565b612e9d9190613979565b60226000828254612eae919061399b565b9091555050601654601754612ec3908361395a565b612ecd9190613979565b60216000828254612ede919061399b565b9091555050601654601954612ef3908361395a565b612efd9190613979565b60236000828254612f0e919061399b565b909155506130b29050565b6001600160a01b03861660009081526026602052604090205460ff168015612f4357506000601d54115b15612fd5576064601d5486612f58919061395a565b612f629190613979565b9050601d54601f5482612f75919061395a565b612f7f9190613979565b60226000828254612f90919061399b565b9091555050601d54601e54612fa5908361395a565b612faf9190613979565b60216000828254612fc0919061399b565b9091555050601d54602054612ef3908361395a565b6001600160a01b03871660009081526026602052604090205460ff168015612fff57506000601654115b156130b257606460165486613014919061395a565b61301e9190613979565b905060165460185482613031919061395a565b61303b9190613979565b6022600082825461304c919061399b565b9091555050601654601754613061908361395a565b61306b9190613979565b6021600082825461307c919061399b565b9091555050601654601954613091908361395a565b61309b9190613979565b602360008282546130ac919061399b565b90915550505b80156130c3576130c387308361331a565b6130cd8186613c5f565b94505b6130db87878761331a565b50505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556118f0828261346f565b600061311d306110b7565b90506000602354602154602254613134919061399b565b61313e919061399b565b905081158061314b575080155b15613154575050565b600b5461316290600a61395a565b82111561317a57600b5461317790600a61395a565b91505b6000806002836022548661318e919061395a565b6131989190613979565b6131a29190613979565b90506131b66131b18286613c5f565b6134d2565b602254479081906000906131cc90600290613979565b6131d69087613c5f565b6021546131e3908561395a565b6131ed9190613979565b9050600060026022546132009190613979565b61320a9088613c5f565b602354613217908661395a565b6132219190613979565b905061322d818361399b565b6132379084613c5f565b600060228190556021819055602355925084158015906132575750600083115b1561326657613266858461362c565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146132b3576040519150601f19603f3d011682016040523d82523d6000602084013e6132b8565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613308576040519150601f19603f3d011682016040523d82523d6000602084013e61330d565b606091505b5050505050505050505050565b6001600160a01b0383166133405760405162461bcd60e51b8152600401610ce090613bd7565b6001600160a01b0382166133665760405162461bcd60e51b8152600401610ce090613c1c565b6001600160a01b038316600090815260208190526040902054818110156133de5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce0565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061341590849061399b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161346191815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350757613507613c76565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135849190613c8c565b8160018151811061359757613597613c76565b6001600160a01b0392831660209182029290920101526009546135bd91309116846124a9565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135f6908590600090869030904290600401613ca9565b600060405180830381600087803b15801561361057600080fd5b505af1158015613624573d6000803e3d6000fd5b505050505050565b6009546136449030906001600160a01b0316846124a9565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136839030908790600090819061dead904290600401613b4a565b60606040518083038185885af11580156136a1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122b19190613b85565b600060208083528351808285015260005b818110156136f3578581018301518582016040015282016136d7565b81811115613705576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461373057600080fd5b50565b6000806040838503121561374657600080fd5b82356137518161371b565b946020939093013593505050565b60006020828403121561377157600080fd5b813561377c8161371b565b9392505050565b60008060006060848603121561379857600080fd5b83356137a38161371b565b925060208401356137b38161371b565b929592945050506040919091013590565b6000602082840312156137d657600080fd5b5035919050565b801515811461373057600080fd5b600080604083850312156137fe57600080fd5b82356138098161371b565b91506020830135613819816137dd565b809150509250929050565b60008060006060848603121561383957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561386357600080fd5b823561386e8161371b565b915060208301356138198161371b565b600081518084526020808501945080840160005b838110156138b75781516001600160a01b031687529582019590820190600101613892565b509495945050505050565b60208152600061377c602083018461387e565b600181811c908216806138e957607f821691505b60208210810361390957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561397457613974613944565b500290565b60008261399657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156139ae576139ae613944565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b600060208284031215613a5257600080fd5b5051919050565b600060208284031215613a6b57600080fd5b815161377c816137dd565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b9a57600080fd5b8351925060208401519150604084015190509250925092565b60008060408385031215613bc657600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613c7157613c71613944565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613c9e57600080fd5b815161377c8161371b565b85815284602082015260a060408201526000613cc860a083018661387e565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200dd1fffd21ab77594051f2fb0e83d366bb86b0e7e30b723e561ba3532b9d952264736f6c634300080d0033

Deployed Bytecode Sourcemap

10640:24365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10785:27;;;;;;;;;;-1:-1:-1;10785:27:0;;;;-1:-1:-1;;;;;10785:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10785:27:0;616:221:1;5162:210:0;;;;;;;;;;-1:-1:-1;5162:210:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;5162:210:0;1298:187:1;12265:63:0;;;;;;;;;;-1:-1:-1;12265:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4428:108;;;;;;;;;;-1:-1:-1;4516:12:0;;4428:108;;;1888:25:1;;;1876:2;1861:18;4428:108:0;1742:177:1;12045:33:0;;;;;;;;;;;;;;;;16756:175;;;;;;;;;;-1:-1:-1;16756:175:0;;;;;:::i;:::-;;:::i;:::-;;5380:529;;;;;;;;;;-1:-1:-1;5380:529:0;;;;;:::i;:::-;;:::i;17098:312::-;;;;;;;;;;-1:-1:-1;17098:312:0;;;;;:::i;:::-;;:::i;4327:93::-;;;;;;;;;;-1:-1:-1;4327:93:0;;4410:2;2712:36:1;;2700:2;2685:18;4327:93:0;2570:184:1;5917:297:0;;;;;;;;;;-1:-1:-1;5917:297:0;;;;;:::i;:::-;;:::i;11687:28::-;;;;;;;;;;;;;;;;10819:21;;;;;;;;;;-1:-1:-1;10819:21:0;;;;-1:-1:-1;;;;;10819:21:0;;;31152:357;;;;;;;;;;-1:-1:-1;31152:357:0;;;;;:::i;:::-;;:::i;11232:33::-;;;;;;;;;;-1:-1:-1;11232:33:0;;;;;;;;11889:32;;;;;;;;;;;;;;;;26848:121;;;;;;;;;;-1:-1:-1;26943:18:0;;26928:12;:33;26848:121;;11612:31;;;;;;;;;;;;;;;;16567:181;;;;;;;;;;-1:-1:-1;16567:181:0;;;;;:::i;:::-;;:::i;10717:28::-;;;;;;;;;;;;;;;;11854;;;;;;;;;;;;;;;;11198:25;;;;;;;;;;;;;;;;11312:31;;;;;;;;;;-1:-1:-1;11312:31:0;;;;;;;;;;;4544:177;;;;;;;;;;-1:-1:-1;4544:177:0;;;;;:::i;:::-;;:::i;8638:150::-;;;;;;;;;;;;;:::i;11966:29::-;;;;;;;;;;;;;;;;31882:84;;;;;;;;;;;;;:::i;18789:334::-;;;;;;;;;;-1:-1:-1;18789:334:0;;;;;:::i;:::-;;:::i;19736:421::-;;;;;;;;;;-1:-1:-1;19736:421:0;;;;;:::i;:::-;;:::i;32574:464::-;;;;;;;;;;-1:-1:-1;32574:464:0;;;;;:::i;:::-;;:::i;30322:567::-;;;;;;;;;;-1:-1:-1;30322:567:0;;;;;:::i;:::-;;:::i;33833:1165::-;;;;;;;;;;-1:-1:-1;33833:1165:0;;;;;:::i;:::-;;:::i;11113:43::-;;;;;;;;;;-1:-1:-1;11113:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10683:27;;;;;;;;;;;;;;;;8424:79;;;;;;;;;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;8489:6:0;8424:79;;4215:104;;;;;;;;;;;;;:::i;16455:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19131:353::-;;;;;;;;;;-1:-1:-1;19131:353:0;;;;;:::i;:::-;;:::i;31974:84::-;;;;;;;;;;;;;:::i;6222:482::-;;;;;;;;;;-1:-1:-1;6222:482:0;;;;;:::i;:::-;;:::i;11073:33::-;;;;;;;;;;;;;;;;4729:216;;;;;;;;;;-1:-1:-1;4729:216:0;;;;;:::i;:::-;;:::i;12486:57::-;;;;;;;;;;-1:-1:-1;12486:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11272:33;;;;;;;;;;-1:-1:-1;11272:33:0;;;;;;;;;;;20603:182;;;;;;;;;;-1:-1:-1;20603:182:0;;;;;:::i;:::-;;:::i;20165:430::-;;;;;;;;;;-1:-1:-1;20165:430:0;;;;;:::i;:::-;;:::i;17743:311::-;;;;;;;;;;-1:-1:-1;17743:311:0;;;;;:::i;:::-;;:::i;11530:39::-;;;;;;;;;;-1:-1:-1;11530:39:0;;;;;;;;18124:428;;;;;;;;;;-1:-1:-1;18124:428:0;;;;;:::i;:::-;;:::i;12085:31::-;;;;;;;;;;;;;;;;33046:779;;;;;;;;;;;;;:::i;10958:29::-;;;;;;;;;;-1:-1:-1;10958:29:0;;;;-1:-1:-1;;;;;10958:29:0;;;11578:27;;;;;;;;;;;;;;;;17418:317;;;;;;;;;;-1:-1:-1;17418:317:0;;;;;:::i;:::-;;:::i;4953:201::-;;;;;;;;;;-1:-1:-1;4953:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5119:18:0;;;5087:7;5119:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4953:201;10877:33;;;;;;;;;;;;;;;;32066:500;;;;;;;;;;;;;:::i;16992:98::-;;;;;;;;;;;;;:::i;10919:32::-;;;;;;;;;;-1:-1:-1;10919:32:0;;;;-1:-1:-1;;;;;10919:32:0;;;11163:28;;;;;;;;;;-1:-1:-1;11163:28:0;;;;;:::i;:::-;;:::i;10996:37::-;;;;;;;;;;;;;;;;28073:665;;;;;;;;;;-1:-1:-1;28073:665:0;;;;;:::i;:::-;;:::i;11650:30::-;;;;;;;;;;;;;;;;8796:281;;;;;;;;;;-1:-1:-1;8796:281:0;;;;;:::i;:::-;;:::i;31517:313::-;;;;;;;;;;-1:-1:-1;31517:313:0;;;;;:::i;:::-;;:::i;30959:185::-;;;;;;;;;;;;;:::i;11928:31::-;;;;;;;;;;;;;;;;10752:24;;;;;;;;;;;;;;;;12004:34;;;;;;;;;;;;;;;;4107:100;4161:13;4194:5;4187:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:100;:::o;5162:210::-;5281:4;5303:39;257:10;5326:7;5335:6;5303:8;:39::i;:::-;-1:-1:-1;5360:4:0;5162:210;;;;:::o;16756:175::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;16836:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16835:20;16827:59;;;::::0;-1:-1:-1;;;16827:59:0;;5871:2:1;16827:59:0::1;::::0;::::1;5853:21:1::0;5910:2;5890:18;;;5883:30;5949:28;5929:18;;;5922:56;5995:18;;16827:59:0::1;5669:350:1::0;16827:59:0::1;-1:-1:-1::0;;;;;16897:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;16897:26:0::1;16919:4;16897:26;::::0;;16756:175::o;5380:529::-;5520:4;5537:36;5547:6;5555:9;5566:6;5537:9;:36::i;:::-;-1:-1:-1;;;;;5613:19:0;;5586:24;5613:19;;;:11;:19;;;;;;;;257:10;5613:33;;;;;;;;5679:26;;;;5657:116;;;;-1:-1:-1;;;5657:116:0;;6226:2:1;5657:116:0;;;6208:21:1;6265:2;6245:18;;;6238:30;6304:34;6284:18;;;6277:62;-1:-1:-1;;;6355:18:1;;;6348:38;6403:19;;5657:116:0;6024:404:1;5657:116:0;5809:57;5818:6;257:10;5859:6;5840:16;:25;5809:8;:57::i;:::-;-1:-1:-1;5897:4:0;;5380:529;-1:-1:-1;;;;5380:529:0:o;17098:312::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;17236:4:::1;17227:5;17206:13;4516:12:::0;;;4428:108;17206:13:::1;:17;::::0;17222:1:::1;17206:17;:::i;:::-;17205:27;;;;:::i;:::-;17204:36;;;;:::i;:::-;17194:6;:46;;17172:138;;;::::0;-1:-1:-1;;;17172:138:0;;7162:2:1;17172:138:0::1;::::0;::::1;7144:21:1::0;7201:2;7181:18;;;7174:30;7240:34;7220:18;;;7213:62;-1:-1:-1;;;7291:18:1;;;7284:40;7341:19;;17172:138:0::1;6960:406:1::0;17172:138:0::1;17336:17;:6:::0;17346::::1;17336:17;:::i;:::-;17321:12;:32:::0;;;17369:33:::1;::::0;1888:25:1;;;17369:33:0::1;::::0;1876:2:1;1861:18;17369:33:0::1;;;;;;;;17098:312:::0;:::o;5917:297::-;257:10;6032:4;6126:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6126:34:0;;;;;;;;;;6032:4;;6054:130;;6104:7;;6126:47;;6163:10;;6126:47;:::i;:::-;6054:8;:130::i;31152:357::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31285:32:0;::::1;31263:120;;;;-1:-1:-1::0;;;31263:120:0::1;;;;;;;:::i;:::-;31394:17;:47:::0;;-1:-1:-1;;;;;;31394:47:0::1;-1:-1:-1::0;;;;;31394:47:0;::::1;::::0;;::::1;::::0;;;31457:44:::1;::::0;::::1;::::0;-1:-1:-1;;31457:44:0::1;31152:357:::0;:::o;16567:181::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16648:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16640:62;;;::::0;-1:-1:-1;;;16640:62:0;;8113:2:1;16640:62:0::1;::::0;::::1;8095:21:1::0;8152:2;8132:18;;;8125:30;8191:32;8171:18;;;8164:60;8241:18;;16640:62:0::1;7911:354:1::0;16640:62:0::1;-1:-1:-1::0;;;;;16713:19:0::1;16735:5;16713:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16713:27:0::1;::::0;;16567:181::o;4544:177::-;-1:-1:-1;;;;;4695:18:0;4663:7;4695:18;;;;;;;;;;;;4544:177::o;8638:150::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;8731:6:::1;::::0;8710:40:::1;::::0;8747:1:::1;::::0;-1:-1:-1;;;;;8731:6:0::1;::::0;8710:40:::1;::::0;8747:1;;8710:40:::1;8761:6;:19:::0;;-1:-1:-1;;;;;;8761:19:0::1;::::0;;8638:150::o;31882:84::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;31936:14:::1;:22:::0;;-1:-1:-1;;31936:22:0::1;::::0;;31882:84::o;18789:334::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;18909:4:::1;18904:155;;18966:6;::::0;-1:-1:-1;;;;;18966:6:0;;::::1;18956:16:::0;;::::1;::::0;18930:117:::1;;;::::0;-1:-1:-1;;;18930:117:0;;8472:2:1;18930:117:0::1;::::0;::::1;8454:21:1::0;8511:2;8491:18;;;8484:30;8550:34;8530:18;;;8523:62;-1:-1:-1;;;8601:18:1;;;8594:37;8648:19;;18930:117:0::1;8270:403:1::0;18930:117:0::1;-1:-1:-1::0;;;;;19069:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19069:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18789:334::o;19736:421::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;19891:16:::1;:33:::0;;;19935:15:::1;:31:::0;;;19977:13:::1;:27:::0;;;19993:11;20030:34:::1;19953:13:::0;19910:14;20030:34:::1;:::i;:::-;:50;;;;:::i;:::-;20015:12;:65:::0;;;20115:1:::1;-1:-1:-1::0;20099:17:0::1;20091:58;;;::::0;-1:-1:-1;;;20091:58:0;;8880:2:1;20091:58:0::1;::::0;::::1;8862:21:1::0;8919:2;8899:18;;;8892:30;8958;8938:18;;;8931:58;9006:18;;20091:58:0::1;8678:352:1::0;20091:58:0::1;19736:421:::0;;;:::o;32574:464::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;32662:13:::1;::::0;::::1;::::0;::::1;;;32661:14;32653:50;;;::::0;-1:-1:-1;;;32653:50:0;;9237:2:1;32653:50:0::1;::::0;::::1;9219:21:1::0;9276:2;9256:18;;;9249:30;9315:25;9295:18;;;9288:53;9358:18;;32653:50:0::1;9035:347:1::0;32653:50:0::1;32756:2;32736:16;:22;;32714:111;;;;-1:-1:-1::0;;;32714:111:0::1;;;;;;;:::i;:::-;32836:13;:20:::0;;-1:-1:-1;;32867:18:0;;;;;32917:12:::1;32896:18;:33:::0;;;32961:37:::1;::::0;32982:16;;32961:37:::1;:::i;:::-;32940:18;:58:::0;33014:16:::1;::::0;::::1;::::0;;;::::1;32574:464:::0;:::o;30322:567::-;8551:6;;30436:10;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30472:20:0;::::1;30464:59;;;::::0;-1:-1:-1;;;30464:59:0;;9997:2:1;30464:59:0::1;::::0;::::1;9979:21:1::0;10036:2;10016:18;;;10009:30;10075:28;10055:18;;;10048:56;10121:18;;30464:59:0::1;9795:350:1::0;30464:59:0::1;-1:-1:-1::0;;;;;30556:23:0;::::1;30574:4;30556:23;;::::0;:41:::1;;-1:-1:-1::0;30584:13:0::1;::::0;::::1;::::0;::::1;;;30583:14;30556:41;30534:143;;;::::0;-1:-1:-1;;;30534:143:0;;10352:2:1;30534:143:0::1;::::0;::::1;10334:21:1::0;10391:2;10371:18;;;10364:30;10430:34;10410:18;;;10403:62;-1:-1:-1;;;10481:18:1;;;10474:50;10541:19;;30534:143:0::1;10150:416:1::0;30534:143:0::1;30715:39;::::0;-1:-1:-1;;;30715:39:0;;30748:4:::1;30715:39;::::0;::::1;780:51:1::0;30688:24:0::1;::::0;-1:-1:-1;;;;;30715:24:0;::::1;::::0;::::1;::::0;753:18:1;;30715:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30773:46;::::0;-1:-1:-1;;;30773:46:0;;-1:-1:-1;;;;;10952:32:1;;;30773:46:0::1;::::0;::::1;10934:51:1::0;11001:18;;;10994:34;;;30688:66:0;;-1:-1:-1;30773:23:0;;::::1;::::0;::::1;::::0;10907:18:1;;30773:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30835;::::0;;-1:-1:-1;;;;;10952:32:1;;10934:51;;11016:2;11001:18;;10994:34;;;30765:54:0;;-1:-1:-1;30835:46:0::1;::::0;10907:18:1;30835:46:0::1;;;;;;;30453:436;30322:567:::0;;;;:::o;33833:1165::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;33914:13:::1;::::0;::::1;::::0;::::1;;;33913:14;33905:70;;;;-1:-1:-1::0;;;33905:70:0::1;;;;;;;:::i;:::-;34027:2;34008:16;:21;33986:110;;;;-1:-1:-1::0;;;33986:110:0::1;;;;;;;:::i;:::-;34144:13;:20:::0;;-1:-1:-1;;34175:18:0;;;;;34225:12:::1;34204:18;:33:::0;;;34269:37:::1;::::0;34290:16;;34269:37:::1;:::i;:::-;34248:18;:58:::0;34322:16:::1;::::0;::::1;::::0;;;::::1;34427:1;34403:21;:25;34381:110;;;;-1:-1:-1::0;;;34381:110:0::1;;;;;;;:::i;:::-;34551:1;34524:24;34542:4;34524:9;:24::i;:::-;:28;34502:116;;;;-1:-1:-1::0;;;34502:116:0::1;;;;;;;:::i;:::-;34663:9;::::0;34631:69:::1;::::0;34648:4:::1;::::0;-1:-1:-1;;;;;34663:9:0::1;34675:24;34648:4:::0;34675:9:::1;:24::i;34631:69::-;34713:9;::::0;-1:-1:-1;;;;;34713:9:0::1;:25;34746:21;34791:4;34811:24;34791:4:::0;34811:9:::1;:24::i;:::-;34850:1;34893::::0;34944:4:::1;34964:15;34713:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33833:1165:::0;:::o;4215:104::-;4271:13;4304:7;4297:14;;;;;:::i;16455:104::-;16504:16;16540:11;16533:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16533:18:0;;;;;;;;;;;;;;;;;;;;;;16455:104;:::o;19131:353::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;19277:6:::1;::::0;-1:-1:-1;;;;;19277:6:0;;::::1;19269:14:::0;;::::1;::::0;19247:121:::1;;;::::0;-1:-1:-1;;;19247:121:0;;13637:2:1;19247:121:0::1;::::0;::::1;13619:21:1::0;13676:2;13656:18;;;13649:30;13715:34;13695:18;;;13688:62;13786:27;13766:18;;;13759:55;13831:19;;19247:121:0::1;13435:421:1::0;19247:121:0::1;19379:41;19408:4;19414:5;19379:28;:41::i;:::-;19436:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19436:40:0;::::1;::::0;::::1;::::0;;;::::1;19131:353:::0;;:::o;31974:84::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;32029:14:::1;:21:::0;;-1:-1:-1;;32029:21:0::1;32046:4;32029:21;::::0;;31974:84::o;6222:482::-;257:10;6342:4;6391:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6391:34:0;;;;;;;;;;6458:35;;;;6436:122;;;;-1:-1:-1;;;6436:122:0;;14063:2:1;6436:122:0;;;14045:21:1;14102:2;14082:18;;;14075:30;14141:34;14121:18;;;14114:62;-1:-1:-1;;;14192:18:1;;;14185:35;14237:19;;6436:122:0;13861:401:1;6436:122:0;6594:67;257:10;6617:7;6645:15;6626:16;:34;6594:8;:67::i;:::-;-1:-1:-1;6692:4:0;;6222:482;-1:-1:-1;;;6222:482:0:o;4729:216::-;4851:4;4873:42;257:10;4897:9;4908:6;4873:9;:42::i;20603:182::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20688:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20688:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20743:34;;1438:41:1;;;20743:34:0::1;::::0;1411:18:1;20743:34:0::1;;;;;;;20603:182:::0;;:::o;20165:430::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;20321:17:::1;:34:::0;;;20366:16:::1;:32:::0;;;20409:14:::1;:28:::0;;;20426:11;20464:36:::1;20385:13:::0;20341:14;20464:36:::1;:::i;:::-;:53;;;;:::i;:::-;20448:13;:69:::0;;;20553:1:::1;-1:-1:-1::0;20536:18:0::1;20528:59;;;::::0;-1:-1:-1;;;20528:59:0;;8880:2:1;20528:59:0::1;::::0;::::1;8862:21:1::0;8919:2;8899:18;;;8892:30;8958;8938:18;;;8931:58;9006:18;;20528:59:0::1;8678:352:1::0;17743:311:0;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;17883:4:::1;17875;17854:13;4516:12:::0;;;4428:108;17854:13:::1;:17;::::0;17870:1:::1;17854:17;:::i;:::-;17853:26;;;;:::i;:::-;17852:35;;;;:::i;:::-;17842:6;:45;;17820:137;;;::::0;-1:-1:-1;;;17820:137:0;;14469:2:1;17820:137:0::1;::::0;::::1;14451:21:1::0;14508:2;14488:18;;;14481:30;14547:34;14527:18;;;14520:62;-1:-1:-1;;;14598:18:1;;;14591:40;14648:19;;17820:137:0::1;14267:406:1::0;17820:137:0::1;17980:17;:6:::0;17990::::1;17980:17;:::i;:::-;17968:9;:29:::0;;;18013:33:::1;::::0;1888:25:1;;;18013:33:0::1;::::0;1876:2:1;1861:18;18013:33:0::1;1742:177:1::0;18124:428:0;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;18264:6:::1;18243:13;4516:12:::0;;;4428:108;18243:13:::1;:17;::::0;18259:1:::1;18243:17;:::i;:::-;18242:28;;;;:::i;:::-;18229:9;:41;;18207:144;;;::::0;-1:-1:-1;;;18207:144:0;;14880:2:1;18207:144:0::1;::::0;::::1;14862:21:1::0;14919:2;14899:18;;;14892:30;14958:34;14938:18;;;14931:62;-1:-1:-1;;;15009:18:1;;;15002:51;15070:19;;18207:144:0::1;14678:417:1::0;18207:144:0::1;18419:4;18398:13;4516:12:::0;;;4428:108;18398:13:::1;:17;::::0;18414:1:::1;18398:17;:::i;:::-;18397:26;;;;:::i;:::-;18384:9;:39;;18362:141;;;::::0;-1:-1:-1;;;18362:141:0;;15302:2:1;18362:141:0::1;::::0;::::1;15284:21:1::0;15341:2;15321:18;;;15314:30;15380:34;15360:18;;;15353:62;-1:-1:-1;;;15431:18:1;;;15424:50;15491:19;;18362:141:0::1;15100:416:1::0;18362:141:0::1;18514:18;:30:::0;18124:428::o;33046:779::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;33104:13:::1;::::0;::::1;::::0;::::1;;;33103:14;33095:70;;;;-1:-1:-1::0;;;33095:70:0::1;;;;;;;:::i;:::-;33254:1;33230:21;:25;33208:110;;;;-1:-1:-1::0;;;33208:110:0::1;;;;;;;:::i;:::-;33378:1;33351:24;33369:4;33351:9;:24::i;:::-;:28;33329:116;;;;-1:-1:-1::0;;;33329:116:0::1;;;;;;;:::i;:::-;33490:9;::::0;33458:69:::1;::::0;33475:4:::1;::::0;-1:-1:-1;;;;;33490:9:0::1;33502:24;33475:4:::0;33502:9:::1;:24::i;33458:69::-;33540:9;::::0;-1:-1:-1;;;;;33540:9:0::1;:25;33573:21;33618:4;33638:24;33618:4:::0;33638:9:::1;:24::i;:::-;33677:1;33720::::0;33771:4:::1;33791:15;33540:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17418:317::-:0;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;17557:4:::1;17548:5;17527:13;4516:12:::0;;;4428:108;17527:13:::1;:17;::::0;17543:1:::1;17527:17;:::i;:::-;17526:27;;;;:::i;:::-;17525:36;;;;:::i;:::-;17515:6;:46;;17493:139;;;::::0;-1:-1:-1;;;17493:139:0;;15723:2:1;17493:139:0::1;::::0;::::1;15705:21:1::0;15762:2;15742:18;;;15735:30;15801:34;15781:18;;;15774:62;-1:-1:-1;;;15852:18:1;;;15845:41;15903:19;;17493:139:0::1;15521:407:1::0;17493:139:0::1;17659:17;:6:::0;17669::::1;17659:17;:::i;:::-;17643:13;:33:::0;;;17692:35:::1;::::0;1888:25:1;;;17692:35:0::1;::::0;1876:2:1;1861:18;17692:35:0::1;1742:177:1::0;32066:500:0;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;32137:21:::1;::::0;32118:16:::1;:40:::0;;;32187:20:::1;::::0;32169:15:::1;:38:::0;;;32234:18:::1;::::0;32218:13:::1;:34:::0;;;32234:18;32278:34:::1;::::0;32187:20;32278:34:::1;:::i;:::-;:50;;;;:::i;:::-;32263:12;:65:::0;32361:21:::1;::::0;32341:17:::1;:41:::0;;;32412:20:::1;::::0;32393:16:::1;:39:::0;;;32460:18:::1;::::0;32443:14:::1;:35:::0;;;32460:18;32505:36:::1;::::0;32412:20;32505:36:::1;:::i;:::-;:53;;;;:::i;:::-;32489:13;:69:::0;32066:500::o;16992:98::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;17054:20:::1;:28:::0;;-1:-1:-1;;17054:28:0::1;::::0;;16992:98::o;11163:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11163:28:0;;-1:-1:-1;11163:28:0;:::o;28073:665::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;28165:6:::1;::::0;28158:39:::1;::::0;-1:-1:-1;;;28158:39:0;;28191:4:::1;28158:39;::::0;::::1;780:51:1::0;28138:17:0::1;::::0;-1:-1:-1;;;;;28165:6:0::1;::::0;28158:24:::1;::::0;753:18:1;;28158:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28138:59;;28230:1;28218:9;:13;28210:50;;;::::0;-1:-1:-1;;;28210:50:0;;16135:2:1;28210:50:0::1;::::0;::::1;16117:21:1::0;16174:2;16154:18;;;16147:30;16213:26;16193:18;;;16186:54;16257:18;;28210:50:0::1;15933:348:1::0;28210:50:0::1;28273:16;28316:5;28293:19;28305:7:::0;28293:9;:19:::1;:::i;:::-;28292:29;;;;:::i;:::-;28408:6;::::0;28432:9:::1;::::0;28401:52:::1;::::0;-1:-1:-1;;;28401:52:0;;-1:-1:-1;;;;;28432:9:0;;::::1;28401:52;::::0;::::1;10934:51:1::0;11001:18;;;10994:34;;;28273:48:0;;-1:-1:-1;28408:6:0::1;::::0;28401:22:::1;::::0;10907:18:1;;28401:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28499:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;28499:231:0;;-1:-1:-1;;;;;28499:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;28550:4:::1;::::0;28570:8;;28499:9;;;;28679:10:::1;::::0;28704:15:::1;::::0;28499:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28127:611;;28073:665:::0;:::o;8796:281::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8899:22:0;::::1;8877:110;;;::::0;-1:-1:-1;;;8877:110:0;;17350:2:1;8877:110:0::1;::::0;::::1;17332:21:1::0;17389:2;17369:18;;;17362:30;17428:34;17408:18;;;17401:62;-1:-1:-1;;;17479:18:1;;;17472:36;17525:19;;8877:110:0::1;17148:402:1::0;8877:110:0::1;9024:6;::::0;9003:38:::1;::::0;-1:-1:-1;;;;;9003:38:0;;::::1;::::0;9024:6:::1;::::0;9003:38:::1;::::0;9024:6:::1;::::0;9003:38:::1;9052:6;:17:::0;;-1:-1:-1;;;;;;9052:17:0::1;-1:-1:-1::0;;;;;9052:17:0;;;::::1;::::0;;;::::1;::::0;;8796:281::o;31517:313::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31621:29:0;::::1;31599:117;;;;-1:-1:-1::0;;;31599:117:0::1;;;;;;;:::i;:::-;31727:14;:41:::0;;-1:-1:-1;;;;;;31727:41:0::1;-1:-1:-1::0;;;;;31727:41:0;::::1;::::0;;::::1;::::0;;;31784:38:::1;::::0;::::1;::::0;-1:-1:-1;;31784:38:0::1;31517:313:::0;:::o;30959:185::-;8551:6;;-1:-1:-1;;;;;8551:6:0;257:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;;;;;;:::i;:::-;31054:82:::1;::::0;31017:12:::1;::::0;31062:10:::1;::::0;31086:21:::1;::::0;31017:12;31054:82;31017:12;31054:82;31086:21;31062:10;31054:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7693:380:::0;-1:-1:-1;;;;;7829:19:0;;7821:68;;;;-1:-1:-1;;;7821:68:0;;17967:2:1;7821:68:0;;;17949:21:1;18006:2;17986:18;;;17979:30;18045:34;18025:18;;;18018:62;-1:-1:-1;;;18096:18:1;;;18089:34;18140:19;;7821:68:0;17765:400:1;7821:68:0;-1:-1:-1;;;;;7908:21:0;;7900:68;;;;-1:-1:-1;;;7900:68:0;;18372:2:1;7900:68:0;;;18354:21:1;18411:2;18391:18;;;18384:30;18450:34;18430:18;;;18423:62;-1:-1:-1;;;18501:18:1;;;18494:32;18543:19;;7900:68:0;18170:398:1;7900:68:0;-1:-1:-1;;;;;7981:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8033:32;;1888:25:1;;;8033:32:0;;1861:18:1;8033:32:0;;;;;;;7693:380;;;:::o;20793:6047::-;-1:-1:-1;;;;;20925:18:0;;20917:68;;;;-1:-1:-1;;;20917:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21004:16:0;;20996:64;;;;-1:-1:-1;;;20996:64:0;;;;;;;:::i;:::-;21088:1;21079:6;:10;21071:52;;;;-1:-1:-1;;;21071:52:0;;19585:2:1;21071:52:0;;;19567:21:1;19624:2;19604:18;;;19597:30;19663:31;19643:18;;;19636:59;19712:18;;21071:52:0;19383:353:1;21071:52:0;21141:13;;;;;;;21136:183;;-1:-1:-1;;;;;21197:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21226:23:0;;;;;;:19;:23;;;;;;;;21197:52;21171:136;;;;-1:-1:-1;;;21171:136:0;;19943:2:1;21171:136:0;;;19925:21:1;19982:2;19962:18;;;19955:30;-1:-1:-1;;;20001:18:1;;;19994:52;20063:18;;21171:136:0;19741:346:1;21171:136:0;26943:18;;26928:12;:33;21335:26;:43;;;;-1:-1:-1;21365:13:0;;;;;;;21335:43;21331:268;;;-1:-1:-1;;;;;21422:17:0;;;;;;:11;:17;;;;;;;;21421:18;;:35;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;21443:13:0;;;8489:6;;21443:13;21421:35;:60;;;-1:-1:-1;;;;;;21460:21:0;;21474:6;21460:21;21421:60;21395:192;;;;-1:-1:-1;;;21395:192:0;;20294:2:1;21395:192:0;;;20276:21:1;20333:2;20313:18;;;20306:30;20372:34;20352:18;;;20345:62;20443:34;20423:18;;;20416:62;-1:-1:-1;;;20494:19:1;;;20487:37;20541:19;;21395:192:0;20092:474:1;21395:192:0;21615:14;;;;21611:2148;;;8489:6;;-1:-1:-1;;;;;21668:15:0;;;8489:6;;21668:15;;;;:49;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;21704:13:0;;;8489:6;;21704:13;;21668:49;:91;;;;-1:-1:-1;;;;;;21738:21:0;;21752:6;21738:21;;21668:91;:138;;;;-1:-1:-1;;;;;;21781:25:0;;;;;;:19;:25;;;;;;;;21780:26;21668:138;:183;;;;-1:-1:-1;;;;;;21828:23:0;;;;;;:19;:23;;;;;;;;21827:24;21668:183;21646:2102;;;21890:20;;;;21886:692;;;21953:9;;-1:-1:-1;;;;;21939:24:0;;;21953:9;;21939:24;;;;:49;;-1:-1:-1;21981:6:0;;-1:-1:-1;;;;;21967:21:0;;;21981:6;;21967:21;;21939:49;21935:624;;;22130:16;22145:1;22130:12;:16;:::i;:::-;22084:9;22055:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22251:16:0;22266:1;22251:12;:16;:::i;:::-;-1:-1:-1;;;;;22183:32:0;;;;;;:28;:32;;;;;;:84;22055:212;22017:363;;;;-1:-1:-1;;;22017:363:0;;20903:2:1;22017:363:0;;;20885:21:1;20942:2;20922:18;;;20915:30;20981:34;20961:18;;;20954:62;-1:-1:-1;;;21032:18:1;;;21025:51;21093:19;;22017:363:0;20701:417:1;22017:363:0;22436:9;22407:39;;;;:28;:39;;;;;;22449:12;22407:54;;;;-1:-1:-1;;;;;22488:32:0;;;;;;:47;21935:624;-1:-1:-1;;;;;22652:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22709:35:0;;;;;;:31;:35;;;;;;;;22708:36;22652:92;22626:1107;;;22831:12;;22821:6;:22;;22787:148;;;;-1:-1:-1;;;22787:148:0;;21325:2:1;22787:148:0;;;21307:21:1;21364:2;21344:18;;;21337:30;21403:34;21383:18;;;21376:62;-1:-1:-1;;;21454:18:1;;;21447:38;21502:19;;22787:148:0;21123:404:1;22787:148:0;23018:9;;23001:13;23011:2;23001:9;:13::i;:::-;22992:22;;:6;:22;:::i;:::-;:35;;22958:140;;;;-1:-1:-1;;;22958:140:0;;21734:2:1;22958:140:0;;;21716:21:1;21773:2;21753:18;;;21746:30;-1:-1:-1;;;21792:18:1;;;21785:49;21851:18;;22958:140:0;21532:343:1;22958:140:0;22626:1107;;;-1:-1:-1;;;;;23196:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23251:37:0;;;;;;:31;:37;;;;;;;;23250:38;23196:92;23170:563;;;23375:13;;23365:6;:23;;23331:151;;;;-1:-1:-1;;;23331:151:0;;22082:2:1;23331:151:0;;;22064:21:1;22121:2;22101:18;;;22094:30;22160:34;22140:18;;;22133:62;-1:-1:-1;;;22211:18:1;;;22204:40;22261:19;;23331:151:0;21880:406:1;23170:563:0;-1:-1:-1;;;;;23513:35:0;;;;;;:31;:35;;;;;;;;23508:225;;23633:9;;23616:13;23626:2;23616:9;:13::i;:::-;23607:22;;:6;:22;:::i;:::-;:35;;23573:140;;;;-1:-1:-1;;;23573:140:0;;21734:2:1;23573:140:0;;;21716:21:1;21773:2;21753:18;;;21746:30;-1:-1:-1;;;21792:18:1;;;21785:49;21851:18;;23573:140:0;21532:343:1;23573:140:0;23771:28;23802:24;23820:4;23802:9;:24::i;:::-;23878:18;;23771:55;;-1:-1:-1;23854:42:0;;;;;;;23927:22;;-1:-1:-1;23938:11:0;;;;;;;23927:22;:35;;;;-1:-1:-1;23954:8:0;;-1:-1:-1;;;23954:8:0;;;;23953:9;23927:35;:68;;;;-1:-1:-1;;;;;;23966:29:0;;;;;;:25;:29;;;;;;;;23927:68;23909:196;;;24022:8;:15;;-1:-1:-1;;;;24022:15:0;-1:-1:-1;;;24022:15:0;;;24052:10;:8;:10::i;:::-;24077:8;:16;;-1:-1:-1;;;;24077:16:0;;;23909:196;-1:-1:-1;;;;;24236:25:0;;24117:12;24236:25;;;:19;:25;;;;;;24132:4;;24236:25;;;:52;;-1:-1:-1;;;;;;24265:23:0;;;;;;:19;:23;;;;;;;;24236:52;24232:100;;;-1:-1:-1;24315:5:0;24232:100;24344:12;24449:7;24445:2342;;;26943:18;;26928:12;:33;24532:152;;;;24608:8;24593:12;;:23;;;;:::i;:::-;24583:6;:33;;:100;;;;;24671:12;24645:18;;24666:1;24645:22;;;;:::i;:::-;:38;;24583:100;24531:206;;;;-1:-1:-1;;;;;;24706:31:0;;;;;;:25;:31;;;;;;;;24531:206;:257;;;;-1:-1:-1;;;;;;24759:29:0;;;;;;:25;:29;;;;;;;;24758:30;24531:257;:302;;;;-1:-1:-1;;;;;;24810:23:0;;;;;;:19;:23;;;;;;;;24809:24;24531:302;:339;;;;;24869:1;24854:12;;:16;24531:339;24509:2129;;;26943:18;;26928:12;:33;24905:332;;25216:1;25200:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24905:332:0;-1:-1:-1;;;;;25262:15:0;;;;;;:11;:15;;;;;;;;25257:216;;-1:-1:-1;;;;;25302:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25302:22:0;25320:4;25302:22;;;;;;25347:10;:15;;25320:4;;25347:10;;:15;;25320:4;;25347:15;:::i;:::-;;;;-1:-1:-1;;25385:11:0;:20;;;;;;;-1:-1:-1;25385:20:0;;;;;;;;-1:-1:-1;;;;;;25385:20:0;-1:-1:-1;;;;;25385:20:0;;;;;;;;25433;;780:51:1;;;25433:20:0;;768:2:1;753:18;25433:20:0;;;;;;;25257:216;25516:3;25501:11;:6;25510:2;25501:11;:::i;:::-;25500:19;;;;:::i;:::-;25493:26;;25587:12;;25568:15;;25561:4;:22;;;;:::i;:::-;25560:39;;;;:::i;:::-;25538:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25669:12:0;;25649:16;;25642:23;;:4;:23;:::i;:::-;25641:40;;;;:::i;:::-;25618:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25745:12:0;;25728:13;;25721:20;;:4;:20;:::i;:::-;25720:37;;;;:::i;:::-;25700:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;24509:2129:0;;-1:-1:-1;24509:2129:0;;-1:-1:-1;;;;;25820:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25869:1;25853:13;;:17;25820:50;25816:822;;;25925:3;25908:13;;25899:6;:22;;;;:::i;:::-;25898:30;;;;:::i;:::-;25891:37;;25997:13;;25977:16;;25970:4;:23;;;;:::i;:::-;25969:41;;;;:::i;:::-;25947:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26123:13:0;;26081:17;;26074:24;;:4;:24;:::i;:::-;26073:63;;;;:::i;:::-;26029:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;26201:13:0;;26183:14;;26176:21;;:4;:21;:::i;25816:822::-;-1:-1:-1;;;;;26276:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26326:1;26311:12;;:16;26276:51;26272:366;;;26381:3;26365:12;;26356:6;:21;;;;:::i;:::-;26355:29;;;;:::i;:::-;26348:36;;26452:12;;26433:15;;26426:4;:22;;;;:::i;:::-;26425:39;;;;:::i;:::-;26403:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26534:12:0;;26514:16;;26507:23;;:4;:23;:::i;:::-;26506:40;;;;:::i;:::-;26483:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26610:12:0;;26593:13;;26586:20;;:4;:20;:::i;:::-;26585:37;;;;:::i;:::-;26565:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;26272:366:0;26658:8;;26654:91;;26687:42;26703:4;26717;26724;26687:15;:42::i;:::-;26761:14;26771:4;26761:14;;:::i;:::-;;;24445:2342;26799:33;26815:4;26821:2;26825:6;26799:15;:33::i;:::-;20906:5934;;;;20793:6047;;;:::o;19492:236::-;-1:-1:-1;;;;;19575:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19575:39:0;;;;;;;19625;19575:31;:39;19625:26;:39::i;28746:1568::-;28785:23;28811:24;28829:4;28811:9;:24::i;:::-;28785:50;;28846:25;28943:16;;28908:19;;28874:18;;:53;;;;:::i;:::-;:85;;;;:::i;:::-;28846:113;-1:-1:-1;28976:20:0;;;:46;;-1:-1:-1;29000:22:0;;28976:46;28972:85;;;29039:7;;28746:1568::o;28972:85::-;29091:18;;:23;;29112:2;29091:23;:::i;:::-;29073:15;:41;29069:115;;;29149:18;;:23;;29170:2;29149:23;:::i;:::-;29131:41;;29069:115;29196:12;29270:23;29383:1;29350:17;29315:18;;29297:15;:36;;;;:::i;:::-;29296:71;;;;:::i;:::-;:88;;;;:::i;:::-;29270:114;-1:-1:-1;29397:51:0;29414:33;29270:114;29414:15;:33;:::i;:::-;29397:16;:51::i;:::-;29662:18;;29482:21;;;;29461:18;;29662:22;;29683:1;;29662:22;:::i;:::-;29641:44;;:17;:44;:::i;:::-;29604:19;;29591:32;;:10;:32;:::i;:::-;29590:96;;;;:::i;:::-;29563:123;;29697:21;29811:1;29790:18;;:22;;;;:::i;:::-;29769:44;;:17;:44;:::i;:::-;29735:16;;29722:29;;:10;:29;:::i;:::-;29721:93;;;;:::i;:::-;29697:117;-1:-1:-1;29846:32:0;29697:117;29846:16;:32;:::i;:::-;29827:51;;;;:::i;:::-;29912:1;29891:18;:22;;;29924:19;:23;;;29958:16;:20;29827:51;-1:-1:-1;29995:19:0;;;;;:42;;;30036:1;30018:15;:19;29995:42;29991:121;;;30054:46;30067:15;30084;30054:12;:46::i;:::-;30146:14;;30138:54;;-1:-1:-1;;;;;30146:14:0;;;;30174:13;;30138:54;;;;30174:13;30146:14;30138:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30225:17:0;;30217:89;;30124:68;;-1:-1:-1;;;;;;30225:17:0;;30270:21;;30217:89;;;;30270:21;30225:17;30217:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28746:1568:0:o;6712:651::-;-1:-1:-1;;;;;6852:20:0;;6844:70;;;;-1:-1:-1;;;6844:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6933:23:0;;6925:71;;;;-1:-1:-1;;;6925:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7033:17:0;;7009:21;7033:17;;;;;;;;;;;7083:23;;;;7061:111;;;;-1:-1:-1;;;7061:111:0;;22493:2:1;7061:111:0;;;22475:21:1;22532:2;22512:18;;;22505:30;22571:34;22551:18;;;22544:62;-1:-1:-1;;;22622:18:1;;;22615:36;22668:19;;7061:111:0;22291:402:1;7061:111:0;-1:-1:-1;;;;;7208:17:0;;;:9;:17;;;;;;;;;;;7228:22;;;7208:42;;7272:20;;;;;;;;:30;;7244:6;;7208:9;7272:30;;7244:6;;7272:30;:::i;:::-;;;;;;;;7337:9;-1:-1:-1;;;;;7320:35:0;7329:6;-1:-1:-1;;;;;7320:35:0;;7348:6;7320:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;7320:35:0;;;;;;;;6833:530;6712:651;;;:::o;18560:221::-;-1:-1:-1;;;;;18662:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18662:52:0;;;;;;;;;;18730:43;;22866:51:1;;;22933:18;;;22926:50;18730:43:0;;22839:18:1;18730:43:0;;;;;;;18560:221;;:::o;26977:571::-;27127:16;;;27141:1;27127:16;;;;;;;;27103:21;;27127:16;;;;;;;;;;-1:-1:-1;27127:16:0;27103:40;;27172:4;27154;27159:1;27154:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27154:23:0;;;:7;;;;;;;;;;:23;;;;27198:9;;:16;;;-1:-1:-1;;;27198:16:0;;;;:9;;;;;:14;;:16;;;;;27154:7;;27198:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27188:4;27193:1;27188:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27188:26:0;;;:7;;;;;;;;;:26;27259:9;;27227:56;;27244:4;;27259:9;27271:11;27227:8;:56::i;:::-;27322:9;;:218;;-1:-1:-1;;;27322:218:0;;-1:-1:-1;;;;;27322:9:0;;;;:60;;:218;;27397:11;;27322:9;;27467:4;;27494;;27514:15;;27322:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27032:516;26977:571;:::o;27556:509::-;27736:9;;27704:56;;27721:4;;-1:-1:-1;;;;;27736:9:0;27748:11;27704:8;:56::i;:::-;27803:9;;:254;;-1:-1:-1;;;27803:254:0;;-1:-1:-1;;;;;27803:9:0;;;;:25;;27836:9;;27803:254;;27869:4;;27889:11;;27803:9;;;;28009:6;;28031:15;;27803:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:456::-;2001:6;2009;2017;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;:::-;2194:5;-1:-1:-1;2251:2:1;2236:18;;2223:32;2264:33;2223:32;2264:33;:::i;:::-;1924:456;;2316:7;;-1:-1:-1;;;2370:2:1;2355:18;;;;2342:32;;1924:456::o;2385:180::-;2444:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;-1:-1:-1;2536:23:1;;2385:180;-1:-1:-1;2385:180:1:o;2967:118::-;3053:5;3046:13;3039:21;3032:5;3029:32;3019:60;;3075:1;3072;3065:12;3090:382;3155:6;3163;3216:2;3204:9;3195:7;3191:23;3187:32;3184:52;;;3232:1;3229;3222:12;3184:52;3271:9;3258:23;3290:31;3315:5;3290:31;:::i;:::-;3340:5;-1:-1:-1;3397:2:1;3382:18;;3369:32;3410:30;3369:32;3410:30;:::i;:::-;3459:7;3449:17;;;3090:382;;;;;:::o;3477:316::-;3554:6;3562;3570;3623:2;3611:9;3602:7;3598:23;3594:32;3591:52;;;3639:1;3636;3629:12;3591:52;-1:-1:-1;;3662:23:1;;;3732:2;3717:18;;3704:32;;-1:-1:-1;3783:2:1;3768:18;;;3755:32;;3477:316;-1:-1:-1;3477:316:1:o;3798:388::-;3866:6;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3982:9;3969:23;4001:31;4026:5;4001:31;:::i;:::-;4051:5;-1:-1:-1;4108:2:1;4093:18;;4080:32;4121:33;4080:32;4121:33;:::i;4191:461::-;4244:3;4282:5;4276:12;4309:6;4304:3;4297:19;4335:4;4364:2;4359:3;4355:12;4348:19;;4401:2;4394:5;4390:14;4422:1;4432:195;4446:6;4443:1;4440:13;4432:195;;;4511:13;;-1:-1:-1;;;;;4507:39:1;4495:52;;4567:12;;;;4602:15;;;;4543:1;4461:9;4432:195;;;-1:-1:-1;4643:3:1;;4191:461;-1:-1:-1;;;;;4191:461:1:o;4657:261::-;4836:2;4825:9;4818:21;4799:4;4856:56;4908:2;4897:9;4893:18;4885:6;4856:56;:::i;4923:380::-;5002:1;4998:12;;;;5045;;;5066:61;;5120:4;5112:6;5108:17;5098:27;;5066:61;5173:2;5165:6;5162:14;5142:18;5139:38;5136:161;;5219:10;5214:3;5210:20;5207:1;5200:31;5254:4;5251:1;5244:15;5282:4;5279:1;5272:15;5136:161;;4923:380;;;:::o;5308:356::-;5510:2;5492:21;;;5529:18;;;5522:30;5588:34;5583:2;5568:18;;5561:62;5655:2;5640:18;;5308:356::o;6433:127::-;6494:10;6489:3;6485:20;6482:1;6475:31;6525:4;6522:1;6515:15;6549:4;6546:1;6539:15;6565:168;6605:7;6671:1;6667;6663:6;6659:14;6656:1;6653:21;6648:1;6641:9;6634:17;6630:45;6627:71;;;6678:18;;:::i;:::-;-1:-1:-1;6718:9:1;;6565:168::o;6738:217::-;6778:1;6804;6794:132;;6848:10;6843:3;6839:20;6836:1;6829:31;6883:4;6880:1;6873:15;6911:4;6908:1;6901:15;6794:132;-1:-1:-1;6940:9:1;;6738:217::o;7371:128::-;7411:3;7442:1;7438:6;7435:1;7432:13;7429:39;;;7448:18;;:::i;:::-;-1:-1:-1;7484:9:1;;7371:128::o;7504:402::-;7706:2;7688:21;;;7745:2;7725:18;;;7718:30;7784:34;7779:2;7764:18;;7757:62;-1:-1:-1;;;7850:2:1;7835:18;;7828:36;7896:3;7881:19;;7504:402::o;9387:403::-;9589:2;9571:21;;;9628:2;9608:18;;;9601:30;9667:34;9662:2;9647:18;;9640:62;-1:-1:-1;;;9733:2:1;9718:18;;9711:37;9780:3;9765:19;;9387:403::o;10571:184::-;10641:6;10694:2;10682:9;10673:7;10669:23;10665:32;10662:52;;;10710:1;10707;10700:12;10662:52;-1:-1:-1;10733:16:1;;10571:184;-1:-1:-1;10571:184:1:o;11039:245::-;11106:6;11159:2;11147:9;11138:7;11134:23;11130:32;11127:52;;;11175:1;11172;11165:12;11127:52;11207:9;11201:16;11226:28;11248:5;11226:28;:::i;11289:407::-;11491:2;11473:21;;;11530:2;11510:18;;;11503:30;11569:34;11564:2;11549:18;;11542:62;-1:-1:-1;;;11635:2:1;11620:18;;11613:41;11686:3;11671:19;;11289:407::o;11701:399::-;11903:2;11885:21;;;11942:2;11922:18;;;11915:30;11981:34;11976:2;11961:18;;11954:62;-1:-1:-1;;;12047:2:1;12032:18;;12025:33;12090:3;12075:19;;11701:399::o;12105:402::-;12307:2;12289:21;;;12346:2;12326:18;;;12319:30;12385:34;12380:2;12365:18;;12358:62;-1:-1:-1;;;12451:2:1;12436:18;;12429:36;12497:3;12482:19;;12105:402::o;12512:607::-;-1:-1:-1;;;;;12871:15:1;;;12853:34;;12918:2;12903:18;;12896:34;;;;12961:2;12946:18;;12939:34;;;;13004:2;12989:18;;12982:34;;;;13053:15;;;13047:3;13032:19;;13025:44;12833:3;13085:19;;13078:35;;;;12802:3;12787:19;;12512:607::o;13124:306::-;13212:6;13220;13228;13281:2;13269:9;13260:7;13256:23;13252:32;13249:52;;;13297:1;13294;13287:12;13249:52;13326:9;13320:16;13310:26;;13376:2;13365:9;13361:18;13355:25;13345:35;;13420:2;13409:9;13405:18;13399:25;13389:35;;13124:306;;;;;:::o;16898:245::-;16977:6;16985;17038:2;17026:9;17017:7;17013:23;17009:32;17006:52;;;17054:1;17051;17044:12;17006:52;-1:-1:-1;;17077:16:1;;17133:2;17118:18;;;17112:25;17077:16;;17112:25;;-1:-1:-1;16898:245:1:o;18573:401::-;18775:2;18757:21;;;18814:2;18794:18;;;18787:30;18853:34;18848:2;18833:18;;18826:62;-1:-1:-1;;;18919:2:1;18904:18;;18897:35;18964:3;18949:19;;18573:401::o;18979:399::-;19181:2;19163:21;;;19220:2;19200:18;;;19193:30;19259:34;19254:2;19239:18;;19232:62;-1:-1:-1;;;19325:2:1;19310:18;;19303:33;19368:3;19353:19;;18979:399::o;20571:125::-;20611:4;20639:1;20636;20633:8;20630:34;;;20644:18;;:::i;:::-;-1:-1:-1;20681:9:1;;20571:125::o;23119:127::-;23180:10;23175:3;23171:20;23168:1;23161:31;23211:4;23208:1;23201:15;23235:4;23232:1;23225:15;23251:251;23321:6;23374:2;23362:9;23353:7;23349:23;23345:32;23342:52;;;23390:1;23387;23380:12;23342:52;23422:9;23416:16;23441:31;23466:5;23441:31;:::i;23507:582::-;23806:6;23795:9;23788:25;23849:6;23844:2;23833:9;23829:18;23822:34;23892:3;23887:2;23876:9;23872:18;23865:31;23769:4;23913:57;23965:3;23954:9;23950:19;23942:6;23913:57;:::i;:::-;-1:-1:-1;;;;;24006:32:1;;;;24001:2;23986:18;;23979:60;-1:-1:-1;24070:3:1;24055:19;24048:35;23905:65;23507:582;-1:-1:-1;;;23507:582:1:o

Swarm Source

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