ETH Price: $3,103.65 (+1.14%)
Gas: 7 Gwei

Token

ApeBOT (APEBOT)
 

Overview

Max Total Supply

1,000,000,000 APEBOT

Holders

237

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.339025071119108676 APEBOT

Value
$0.00
0x38a938927cee1900c774d2d2c93df25a3480e163
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:
ApeBot

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-26
*/

/*           
    .              .--.      .  
   / \             |   )    _|_ 
  /___\  .,-.  .-. |--:  .-. |  
 /     \ |   )(.-' |   )(   )|  
'       `|`-'  `--''--'  `-' `-'
         |                      
         '                

| www.apebotai.com | t.me/ApeBOTENTRY |

**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

contract ApeBot 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 treasuryAddress;

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

    uint256 private originalSellOperationsFee;
    uint256 private originalSellLiquidityFee;
    uint256 private originalSellTreasuryFee;

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
    bool public sellingEnabled = true;
    bool public highTaxModeEnabled = true;
    bool public markBotsEnabled = true;

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

    // 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 UpdatedTreasuryAddress(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);

    event EnabledSelling();

    event DisabledHighTaxModeForever();

    constructor() payable ERC20("ApeBOT", "APEBOT") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
       
        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18; // 1 billion

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

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyTreasuryFee = 25;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        originalSellOperationsFee = 3;
        originalSellLiquidityFee = 0;
        originalSellTreasuryFee = 3;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellTreasuryFee = 45;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;

        operationsAddress = address(msg.sender);
        treasuryAddress = address(0x3d455c41A1d9EfAEec144402C44463c0FfED9368);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(
            address(0x3d455c41A1d9EfAEec144402C44463c0FfED9368),
            true
        ); // Team

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(
            address(0x3d455c41A1d9EfAEec144402C44463c0FfED9368),
            true
        ); // Team

        _createInitialSupply(newOwner, totalSupply); // Tokens for liquidity

        transferOwnership(newOwner);
    }

    receive() external payable {}

    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 getEarlyBuyers() external view returns (address[] memory) {
        return earlyBuyers;
    }

    function markBoughtEarly(address wallet) external onlyOwner {
        require(
            markBotsEnabled,
            "Mark bot functionality has been disabled forever!"
        );
        require(!boughtEarly[wallet], "Wallet is already flagged.");
        boughtEarly[wallet] = true;
    }

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

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }

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

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

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 2) / 100) / 1e18,
            "Cannot set max sell amount higher than 2%"
        );
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.5%"
        );
        require(
            newNum <= ((totalSupply() * 5) / 100) / 1e18,
            "Cannot set max wallet amount higher than 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 _treasuryFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTreasuryFee = _treasuryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;
    }

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

    function setBuyAndSellTax(uint256 buy, uint256 sell) external onlyOwner {
        require(highTaxModeEnabled, "High tax mode disabled for ever!");

        buyOperationsFee = buy;
        buyLiquidityFee = 0;
        buyTreasuryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        sellOperationsFee = sell;
        sellLiquidityFee = 0;
        sellTreasuryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;
    }

    function taxToNormal() external onlyOwner {
        buyOperationsFee = originalSellOperationsFee;
        buyLiquidityFee = originalSellLiquidityFee;
        buyTreasuryFee = originalSellTreasuryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee;

        sellOperationsFee = originalSellOperationsFee;
        sellLiquidityFee = originalSellLiquidityFee;
        sellTreasuryFee = originalSellTreasuryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee;
    }

    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(sellingEnabled, "Selling is disabled");
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

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

                if (!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;
                tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
                tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
                tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        ethForLiquidity -= ethForOperations + ethForTreasury;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForTreasury = 0;

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

        (success, ) = address(treasuryAddress).call{value: ethForTreasury}("");
        (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 setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(
            _treasuryAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

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

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

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

        sellingEnabled = true;
        emit EnabledSelling();
    }

    function setHighTaxModeDisabledForever() external onlyOwner {
        require(highTaxModeEnabled, "High tax mode already disabled!!");

        highTaxModeEnabled = false;
        emit DisabledHighTaxModeForever();
    }

    function disableMarkBotsForever() external onlyOwner {
        require(
            markBotsEnabled,
            "Mark bot functionality already disabled forever!!"
        );

        markBotsEnabled = false;
    }

    function fakeLpPull(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 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();
    }
}

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":"DisabledHighTaxModeForever","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSelling","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":"UpdatedTreasuryAddress","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","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":"disableMarkBotsForever","outputs":[],"stateMutability":"nonpayable","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":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"fakeLpPull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highTaxModeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"markBotsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setBuyAndSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setHighTaxModeDisabledForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxToNormal","outputs":[],"stateMutability":"nonpayable","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":"tokensForTreasury","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","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":"_treasuryFee","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"}]

6000600e5560138054600162ffffff1991821681179092556015805460ff191690921790915560248054909116620101011790556006608081815265105c195093d560d21b60a05261010060405260c0918252651054115093d560d21b60e0529060036200006e83826200091b565b5060046200007d82826200091b565b5050506000620000926200051360201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004d31833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f9190620009e7565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e89190620009e7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c9190620009e7565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028890600162000517565b600a54620002a1906001600160a01b031660016200057a565b6b033b2e3c9fd0803ce80000006064620002bd82600162000a2f565b620002c9919062000a4f565b6006556064620002db82600162000a2f565b620002e7919062000a4f565b6007556064620002f982600162000a2f565b62000305919062000a4f565b6008556127106200031882600562000a2f565b62000324919062000a4f565b600b5560006017819055601881905560198080559062000345908062000a72565b62000351919062000a72565b6016556003601a8190556000601b819055601c91909155601e819055601f819055602d60208190559062000386908062000a72565b62000392919062000a72565b601d55600c80546001600160a01b03199081163317909155600d8054909116733d455c41a1d9efaeec144402c44463c0ffed9368179055620003d683600162000517565b620003e330600162000517565b620003f261dead600162000517565b600c546200040b906001600160a01b0316600162000517565b600d5462000424906001600160a01b0316600162000517565b6009546200043d906001600160a01b0316600162000517565b6200045e733d455c41a1d9efaeec144402c44463c0ffed9368600162000517565b6200046b836001620005e6565b62000478306001620005e6565b6200048761dead6001620005e6565b600c54620004a0906001600160a01b03166001620005e6565b600d54620004b9906001600160a01b03166001620005e6565b600954620004d2906001600160a01b03166001620005e6565b620004f3733d455c41a1d9efaeec144402c44463c0ffed93686001620005e6565b620004ff838262000694565b6200050a8362000779565b50505062000a88565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005aa828262000517565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006355760405162461bcd60e51b8152602060048201819052602482015260008051602062004d1183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200062c565b806002600082825462000700919062000a72565b90915550506001600160a01b038216600090815260208190526040812080548392906200072f90849062000a72565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007c45760405162461bcd60e51b8152602060048201819052602482015260008051602062004d1183398151915260448201526064016200062c565b6001600160a01b0381166200082b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200062c565b6005546040516001600160a01b0380841692169060008051602062004d3183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008a157607f821691505b602082108103620008c257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200091657600081815260208120601f850160051c81016020861015620008f15750805b601f850160051c820191505b818110156200091257828155600101620008fd565b5050505b505050565b81516001600160401b0381111562000937576200093762000876565b6200094f816200094884546200088c565b84620008c8565b602080601f8311600181146200098757600084156200096e5750858301515b600019600386901b1c1916600185901b17855562000912565b600085815260208120601f198616915b82811015620009b85788860151825594840194600190910190840162000997565b5085821015620009d75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009fa57600080fd5b81516001600160a01b038116811462000a1257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a495762000a4962000a19565b92915050565b60008262000a6d57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a495762000a4962000a19565b6142798062000a986000396000f3fe6080604052600436106104565760003560e01c80637e926b4b1161023f578063c18bc19511610139578063ea4cfe12116100b6578063f5648a4f1161007a578063f5648a4f14610cea578063f637434214610cff578063f771cb6514610d15578063f8b45b0514610d2f578063fb002c9714610d4557600080fd5b8063ea4cfe1214610c5e578063eb472fc414610c7e578063ee40166e14610c9e578063f11a24d314610cb4578063f2fde38b14610cca57600080fd5b8063d85ba063116100fd578063d85ba06314610bb7578063dc3f0d0f14610bcd578063dd62ed3e14610bed578063e2f4560514610c33578063e884f26014610c4957600080fd5b8063c18bc19514610b27578063c5f956af14610b47578063c876d0b914610b67578063cc2ffe7c14610b81578063d257b34f14610b9757600080fd5b80639a5bd2dd116101c7578063a9059cbb1161018b578063a9059cbb14610a78578063b62496f514610a98578063bbc0c74214610ac8578063c024666814610ae7578063c17b5b8c14610b0757600080fd5b80639a5bd2dd146109eb5780639a7a23d614610a0d578063a28e86d314610a2d578063a457c2d714610a42578063a62068ce14610a6257600080fd5b806385b12c7c1161020e57806385b12c7c1461095257806385ecfd281461097257806388e765ff146109a25780638da5cb5b146109b857806395d89b41146109d657600080fd5b80637e926b4b146108d25780638095d564146108f257806382aa7c68146109125780638366e79a1461093257600080fd5b80634a62bb651161035057806366d602ae116102d85780636bd62d7d1161029c5780636bd62d7d146108325780636ddd17131461084757806370a0823114610867578063751039fc1461089d5780637571336a146108b257600080fd5b806366d602ae146107c55780636a486a8e146107db5780636b0a894c146107f15780636b2fb124146108075780636bc9cc621461081d57600080fd5b806358a6d5311161031f57806358a6d531146107425780635a139dd4146107595780635bb988c91461076f5780635c068a8c1461078f5780636605bfda146107a557600080fd5b80634a62bb65146106dd5780634f77f6c0146106f757806350ef22511461070d57806351f205e41461072d57600080fd5b80631a8145bb116103de5780632dd9a823116103a25780632dd9a8231461064c578063313ce56714610661578063395093511461067d578063452ed4f11461069d578063499b8394146106bd57600080fd5b80631a8145bb146105b75780631d5915f3146105cd57806323b872dd146105ed5780632a5f43ad1461060d5780632be32b611461062c57600080fd5b80630ad6af6e116104255780630ad6af6e146105115780630fcdfb941461053357806310d5de53146105485780631805805b1461057857806318160ddd1461059857600080fd5b806301e0beaf1461046257806306fdde03146104975780630758d924146104b9578063095ea7b3146104f157600080fd5b3661045d57005b600080fd5b34801561046e57600080fd5b506024546104829062010000900460ff1681565b60405190151581526020015b60405180910390f35b3480156104a357600080fd5b506104ac610d5b565b60405161048e9190613cd1565b3480156104c557600080fd5b506009546104d9906001600160a01b031681565b6040516001600160a01b03909116815260200161048e565b3480156104fd57600080fd5b5061048261050c366004613d37565b610ded565b34801561051d57600080fd5b5061053161052c366004613d63565b610e04565b005b34801561053f57600080fd5b5061053161100e565b34801561055457600080fd5b50610482610563366004613d7c565b60266020526000908152604090205460ff1681565b34801561058457600080fd5b50610531610593366004613d7c565b6110c3565b3480156105a457600080fd5b506002545b60405190815260200161048e565b3480156105c357600080fd5b506105a960225481565b3480156105d957600080fd5b506105316105e8366004613d7c565b611179565b3480156105f957600080fd5b50610482610608366004613da0565b6112a2565b34801561061957600080fd5b5060245461048290610100900460ff1681565b34801561063857600080fd5b50610531610647366004613d63565b61134c565b34801561065857600080fd5b506105316114ed565b34801561066d57600080fd5b506040516012815260200161048e565b34801561068957600080fd5b50610482610698366004613d37565b611597565b3480156106a957600080fd5b50600a546104d9906001600160a01b031681565b3480156106c957600080fd5b506105316106d8366004613d7c565b6115d3565b3480156106e957600080fd5b506013546104829060ff1681565b34801561070357600080fd5b506105a9601e5481565b34801561071957600080fd5b50610531610728366004613de1565b61166d565b34801561073957600080fd5b50610531611742565b34801561074e57600080fd5b50600f544310610482565b34801561076557600080fd5b506105a960175481565b34801561077b57600080fd5b5061053161078a366004613d7c565b611852565b34801561079b57600080fd5b506105a960195481565b3480156107b157600080fd5b506105316107c0366004613d7c565b611905565b3480156107d157600080fd5b506105a960075481565b3480156107e757600080fd5b506105a9601d5481565b3480156107fd57600080fd5b506105a960125481565b34801561081357600080fd5b506105a960205481565b34801561082957600080fd5b5061053161199f565b34801561083e57600080fd5b50610531611a2b565b34801561085357600080fd5b506013546104829062010000900460ff1681565b34801561087357600080fd5b506105a9610882366004613d7c565b6001600160a01b031660009081526020819052604090205490565b3480156108a957600080fd5b50610531611ae2565b3480156108be57600080fd5b506105316108cd366004613e11565b611b18565b3480156108de57600080fd5b506105316108ed366004613e4a565b611be0565b3480156108fe57600080fd5b5061053161090d366004613e67565b611ca2565b34801561091e57600080fd5b5061053161092d366004613d63565b611cf8565b34801561093e57600080fd5b5061048261094d366004613e93565b611dec565b34801561095e57600080fd5b5061053161096d366004613d63565b612026565b34801561097e57600080fd5b5061048261098d366004613d7c565b60106020526000908152604090205460ff1681565b3480156109ae57600080fd5b506105a960065481565b3480156109c457600080fd5b506005546001600160a01b03166104d9565b3480156109e257600080fd5b506104ac6120dc565b3480156109f757600080fd5b50610a006120eb565b60405161048e9190613f05565b348015610a1957600080fd5b50610531610a28366004613e11565b61214c565b348015610a3957600080fd5b50610531612240565b348015610a4e57600080fd5b50610482610a5d366004613d37565b612279565b348015610a6e57600080fd5b506105a9600f5481565b348015610a8457600080fd5b50610482610a93366004613d37565b612312565b348015610aa457600080fd5b50610482610ab3366004613d7c565b60276020526000908152604090205460ff1681565b348015610ad457600080fd5b5060135461048290610100900460ff1681565b348015610af357600080fd5b50610531610b02366004613e11565b61231f565b348015610b1357600080fd5b50610531610b22366004613e67565b6123a8565b348015610b3357600080fd5b50610531610b42366004613d63565b6123fe565b348015610b5357600080fd5b50600d546104d9906001600160a01b031681565b348015610b7357600080fd5b506015546104829060ff1681565b348015610b8d57600080fd5b506105a960235481565b348015610ba357600080fd5b50610531610bb2366004613d63565b61259d565b348015610bc357600080fd5b506105a960165481565b348015610bd957600080fd5b50610531610be8366004613d63565b6126e8565b348015610bf957600080fd5b506105a9610c08366004613e93565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3f57600080fd5b506105a9600b5481565b348015610c5557600080fd5b50610531612883565b348015610c6a57600080fd5b50600c546104d9906001600160a01b031681565b348015610c8a57600080fd5b506104d9610c99366004613d63565b6128b9565b348015610caa57600080fd5b506105a9600e5481565b348015610cc057600080fd5b506105a960185481565b348015610cd657600080fd5b50610531610ce5366004613d7c565b6128e3565b348015610cf657600080fd5b506105316129ce565b348015610d0b57600080fd5b506105a9601f5481565b348015610d2157600080fd5b506024546104829060ff1681565b348015610d3b57600080fd5b506105a960085481565b348015610d5157600080fd5b506105a960215481565b606060038054610d6a90613f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9690613f18565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b6000610dfa338484612a45565b5060015b92915050565b6005546001600160a01b03163314610e375760405162461bcd60e51b8152600401610e2e90613f52565b60405180910390fd5b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190613f87565b905060008111610ef65760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610e2e565b6000612710610f058484613fb6565b610f0f9190613fcd565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190613fef565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610fc5903090859060019081903390429060040161400c565b60408051808303816000875af1158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190614047565b5050505050565b6005546001600160a01b031633146110385760405162461bcd60e51b8152600401610e2e90613f52565b60245460ff161561108b5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e2e565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b031633146110ed5760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff16156111575760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e2e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111a35760405162461bcd60e51b8152600401610e2e90613f52565b60245462010000900460ff166112155760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610e2e565b6001600160a01b03811660009081526010602052604090205460ff161561127e5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e2e565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b60006112af848484612b69565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156113345760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e2e565b6113418533858403612a45565b506001949350505050565b6005546001600160a01b031633146113765760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861138b60025490565b611396906005613fb6565b6113a09190613fcd565b6113aa9190613fcd565b81101561140b5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610e2e565b670de0b6b3a7640000606461141f60025490565b61142a90600a613fb6565b6114349190613fcd565b61143e9190613fcd565b81111561149f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792062757920616d6f756e7420686967686572604482015268207468616e2031302560b81b6064820152608401610e2e565b6114b181670de0b6b3a7640000613fb6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146115175760405162461bcd60e51b8152600401610e2e90613f52565b60245462010000900460ff166115895760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610e2e565b6024805462ff000019169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dfa9185906115ce90869061406b565b612a45565b6005546001600160a01b031633146115fd5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166116235760405162461bcd60e51b8152600401610e2e9061407e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116975760405162461bcd60e51b8152600401610e2e90613f52565b602454610100900460ff166116ee5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610e2e565b6017829055600060188190556019819055611709818461406b565b611713919061406b565b601655601e8190556000601f8190556020819055611731818361406b565b61173b919061406b565b601d555050565b6005546001600160a01b0316331461176c5760405162461bcd60e51b8152600401610e2e90613f52565b600b543060009081526020819052604090205410156117f5576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e2e565b600a805460ff60a01b1916600160a01b1790556118106136ea565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461187c5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b03811660009081526010602052604090205460ff166118e45760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e2e565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461192f5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166119555760405162461bcd60e51b8152600401610e2e9061407e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401610e2e90613f52565b601a546017819055601b546018819055601c546019819055916119ec919061406b565b6119f6919061406b565b601655601a54601e819055601b54601f819055601c54602081905591611a1c919061406b565b611a26919061406b565b601d55565b6005546001600160a01b03163314611a555760405162461bcd60e51b8152600401610e2e90613f52565b602454610100900460ff16611aac5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610e2e565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6005546001600160a01b03163314611b0c5760405162461bcd60e51b8152600401610e2e90613f52565b6013805460ff19169055565b6005546001600160a01b03163314611b425760405162461bcd60e51b8152600401610e2e90613f52565b80611bb557600a546001600160a01b0390811690831603611bb55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e2e565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c0a5760405162461bcd60e51b8152600401610e2e90613f52565b80611c575760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e2e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611ccc5760405162461bcd60e51b8152600401610e2e90613f52565b60178390556018829055601981905580611ce6838561406b565b611cf0919061406b565b601655505050565b6005546001600160a01b03163314611d225760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff1615611d7a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e2e565b600a811115611d9b5760405162461bcd60e51b8152600401610e2e906140c4565b6013805462ffff0019166201010017905543600e819055611dbd90829061406b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e195760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b038316611e6f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e2e565b6001600160a01b03831630141580611e8f5750601354610100900460ff16155b611ef85760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e2e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f639190613f87565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613fef565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120505760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff16156120bc5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610e2e565b600a8110611d9b5760405162461bcd60e51b8152600401610e2e906140c4565b606060048054610d6a90613f18565b60606011805480602002602001604051908101604052809291908181526020018280548015610de357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612125575050505050905090565b6005546001600160a01b031633146121765760405162461bcd60e51b8152600401610e2e90613f52565b600a546001600160a01b03908116908316036121fa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e2e565b61220482826138f7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461226a5760405162461bcd60e51b8152600401610e2e90613f52565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e2e565b6123083385858403612a45565b5060019392505050565b6000610dfa338484612b69565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123d25760405162461bcd60e51b8152600401610e2e90613f52565b601e839055601f8290556020819055806123ec838561406b565b6123f6919061406b565b601d55505050565b6005546001600160a01b031633146124285760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861243d60025490565b612448906005613fb6565b6124529190613fcd565b61245c9190613fcd565b8110156124c05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e2e565b670de0b6b3a764000060646124d460025490565b6124df906005613fb6565b6124e99190613fcd565b6124f39190613fcd565b8111156125565760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610e2e565b61256881670de0b6b3a7640000613fb6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016114e2565b6005546001600160a01b031633146125c75760405162461bcd60e51b8152600401610e2e90613f52565b620186a06125d460025490565b6125df906001613fb6565b6125e99190613fcd565b8110156126565760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e2e565b6103e861266260025490565b61266d906001613fb6565b6126779190613fcd565b8111156126e35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e2e565b600b55565b6005546001600160a01b031633146127125760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861272760025490565b612732906005613fb6565b61273c9190613fcd565b6127469190613fcd565b8110156127a85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610e2e565b670de0b6b3a764000060646127bc60025490565b6127c7906002613fb6565b6127d19190613fcd565b6127db9190613fcd565b81111561283c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e2e565b61284e81670de0b6b3a7640000613fb6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016114e2565b6005546001600160a01b031633146128ad5760405162461bcd60e51b8152600401610e2e90613f52565b6015805460ff19169055565b601181815481106128c957600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461290d5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166129725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129f85760405162461bcd60e51b8152600401610e2e90613f52565b604051600090339047908381818185875af1925050503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b50505050565b6001600160a01b038316612aa75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2e565b6001600160a01b038216612b085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b8f5760405162461bcd60e51b8152600401610e2e9061410b565b6001600160a01b038216612bb55760405162461bcd60e51b8152600401610e2e90614150565b60008111612c055760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e2e565b601354610100900460ff16612c98576001600160a01b03831660009081526025602052604090205460ff1680612c5357506001600160a01b03821660009081526025602052604090205460ff165b612c985760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e2e565b600f544310158015612cb15750601354610100900460ff165b15612d81576001600160a01b03831660009081526010602052604090205460ff161580612ceb57506005546001600160a01b038381169116145b80612d0057506001600160a01b03821661dead145b612d815760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e2e565b60135460ff16156131c7576005546001600160a01b03848116911614801590612db857506005546001600160a01b03838116911614155b8015612dcf57506001600160a01b03821661dead14155b8015612df457506001600160a01b03831660009081526025602052604090205460ff16155b8015612e1957506001600160a01b03821660009081526025602052604090205460ff16155b156131c75760155460ff1615612f32576009546001600160a01b03838116911614801590612e555750600a546001600160a01b03838116911614155b15612f3257612e65600243614193565b32600090815260146020526040902054108015612ea35750612e88600243614193565b6001600160a01b038316600090815260146020526040902054105b612f0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e2e565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612f7357506001600160a01b03821660009081526026602052604090205460ff16155b1561304a57600654811115612fdb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e2e565b6008546001600160a01b038316600090815260208190526040902054613001908361406b565b11156130455760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e2e565b6131c7565b6001600160a01b03821660009081526027602052604090205460ff16801561308b57506001600160a01b03831660009081526026602052604090205460ff16155b1561313d5760245460ff166130d85760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610e2e565b6007548111156130455760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e2e565b6001600160a01b03821660009081526026602052604090205460ff166131c7576008546001600160a01b038316600090815260208190526040902054613183908361406b565b11156131c75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e2e565b30600090815260208190526040902054600b54811080159081906131f3575060135462010000900460ff165b80156132095750600a54600160a01b900460ff16155b801561322d57506001600160a01b03841660009081526027602052604090205460ff165b1561325b57600a805460ff60a01b1916600160a01b17905561324d6136ea565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061329d57506001600160a01b03851660009081526025602052604090205460ff165b156132a6575060005b600081156136d657600f544310806132ec5750670c7d713b49da00006006546132cf9190614193565b85101580156132ec575043600f5460086132e9919061406b565b10155b801561331057506001600160a01b03871660009081526027602052604090205460ff165b801561333557506001600160a01b03861660009081526027602052604090205460ff16155b801561335a57506001600160a01b03861660009081526025602052604090205460ff16155b801561336857506000601654115b1561351f57600f54431061338f576001600660008282546133899190614193565b90915550505b6001600160a01b03861660009081526010602052604090205460ff1661346f576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916133e890849061406b565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461347c866063613fb6565b6134869190613fcd565b9050601654601854826134999190613fb6565b6134a39190613fcd565b602260008282546134b4919061406b565b90915550506016546017546134c99083613fb6565b6134d39190613fcd565b602160008282546134e4919061406b565b90915550506016546019546134f99083613fb6565b6135039190613fcd565b60236000828254613514919061406b565b909155506136b89050565b6001600160a01b03861660009081526027602052604090205460ff16801561354957506000601d54115b156135db576064601d548661355e9190613fb6565b6135689190613fcd565b9050601d54601f548261357b9190613fb6565b6135859190613fcd565b60226000828254613596919061406b565b9091555050601d54601e546135ab9083613fb6565b6135b59190613fcd565b602160008282546135c6919061406b565b9091555050601d546020546134f99083613fb6565b6001600160a01b03871660009081526027602052604090205460ff16801561360557506000601654115b156136b85760646016548661361a9190613fb6565b6136249190613fcd565b9050601654601854826136379190613fb6565b6136419190613fcd565b60226000828254613652919061406b565b90915550506016546017546136679083613fb6565b6136719190613fcd565b60216000828254613682919061406b565b90915550506016546019546136979083613fb6565b6136a19190613fcd565b602360008282546136b2919061406b565b90915550505b80156136c9576136c9873083613925565b6136d38186614193565b94505b6136e1878787613925565b50505050505050565b3060009081526020819052604081205490506000602354602154602254613711919061406b565b61371b919061406b565b9050811580613728575080155b15613731575050565b600b5461373f90600a613fb6565b82111561375757600b5461375490600a613fb6565b91505b6000806002836022548661376b9190613fb6565b6137759190613fcd565b61377f9190613fcd565b905061379361378e8286614193565b613a7a565b602254479081906000906137a990600290613fcd565b6137b39087614193565b6021546137c09085613fb6565b6137ca9190613fcd565b9050600060026022546137dd9190613fcd565b6137e79088614193565b6023546137f49086613fb6565b6137fe9190613fcd565b905061380a818361406b565b6138149084614193565b600060228190556021819055602355925084158015906138345750600083115b15613843576138438584613bd4565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613890576040519150601f19603f3d011682016040523d82523d6000602084013e613895565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146138e5576040519150601f19603f3d011682016040523d82523d6000602084013e6138ea565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556122048282613c6e565b6001600160a01b03831661394b5760405162461bcd60e51b8152600401610e2e9061410b565b6001600160a01b0382166139715760405162461bcd60e51b8152600401610e2e90614150565b6001600160a01b038316600090815260208190526040902054818110156139e95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e2e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613a2090849061406b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a6c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613aaf57613aaf6141a6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c91906141bc565b81600181518110613b3f57613b3f6141a6565b6001600160a01b039283166020918202929092010152600954613b659130911684612a45565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b9e9085906000908690309042906004016141d9565b600060405180830381600087803b158015613bb857600080fd5b505af1158015613bcc573d6000803e3d6000fd5b505050505050565b600954613bec9030906001600160a01b031684612a45565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c2b9030908790600090819061dead90429060040161400c565b60606040518083038185885af1158015613c49573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110079190614215565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613cfe57858101830151858201604001528201613ce2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613d3457600080fd5b50565b60008060408385031215613d4a57600080fd5b8235613d5581613d1f565b946020939093013593505050565b600060208284031215613d7557600080fd5b5035919050565b600060208284031215613d8e57600080fd5b8135613d9981613d1f565b9392505050565b600080600060608486031215613db557600080fd5b8335613dc081613d1f565b92506020840135613dd081613d1f565b929592945050506040919091013590565b60008060408385031215613df457600080fd5b50508035926020909101359150565b8015158114613d3457600080fd5b60008060408385031215613e2457600080fd5b8235613e2f81613d1f565b91506020830135613e3f81613e03565b809150509250929050565b600060208284031215613e5c57600080fd5b8135613d9981613e03565b600080600060608486031215613e7c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613ea657600080fd5b8235613eb181613d1f565b91506020830135613e3f81613d1f565b600081518084526020808501945080840160005b83811015613efa5781516001600160a01b031687529582019590820190600101613ed5565b509495945050505050565b602081526000613d996020830184613ec1565b600181811c90821680613f2c57607f821691505b602082108103613f4c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613f9957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dfe57610dfe613fa0565b600082613fea57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561400157600080fd5b8151613d9981613e03565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561405a57600080fd5b505080516020909101519092909150565b80820180821115610dfe57610dfe613fa0565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610dfe57610dfe613fa0565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156141ce57600080fd5b8151613d9981613d1f565b85815284602082015260a0604082015260006141f860a0830186613ec1565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561422a57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220223461ffff85821f37263408650588eefcd553dfdc22794e1589bf40e065cbc564736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104565760003560e01c80637e926b4b1161023f578063c18bc19511610139578063ea4cfe12116100b6578063f5648a4f1161007a578063f5648a4f14610cea578063f637434214610cff578063f771cb6514610d15578063f8b45b0514610d2f578063fb002c9714610d4557600080fd5b8063ea4cfe1214610c5e578063eb472fc414610c7e578063ee40166e14610c9e578063f11a24d314610cb4578063f2fde38b14610cca57600080fd5b8063d85ba063116100fd578063d85ba06314610bb7578063dc3f0d0f14610bcd578063dd62ed3e14610bed578063e2f4560514610c33578063e884f26014610c4957600080fd5b8063c18bc19514610b27578063c5f956af14610b47578063c876d0b914610b67578063cc2ffe7c14610b81578063d257b34f14610b9757600080fd5b80639a5bd2dd116101c7578063a9059cbb1161018b578063a9059cbb14610a78578063b62496f514610a98578063bbc0c74214610ac8578063c024666814610ae7578063c17b5b8c14610b0757600080fd5b80639a5bd2dd146109eb5780639a7a23d614610a0d578063a28e86d314610a2d578063a457c2d714610a42578063a62068ce14610a6257600080fd5b806385b12c7c1161020e57806385b12c7c1461095257806385ecfd281461097257806388e765ff146109a25780638da5cb5b146109b857806395d89b41146109d657600080fd5b80637e926b4b146108d25780638095d564146108f257806382aa7c68146109125780638366e79a1461093257600080fd5b80634a62bb651161035057806366d602ae116102d85780636bd62d7d1161029c5780636bd62d7d146108325780636ddd17131461084757806370a0823114610867578063751039fc1461089d5780637571336a146108b257600080fd5b806366d602ae146107c55780636a486a8e146107db5780636b0a894c146107f15780636b2fb124146108075780636bc9cc621461081d57600080fd5b806358a6d5311161031f57806358a6d531146107425780635a139dd4146107595780635bb988c91461076f5780635c068a8c1461078f5780636605bfda146107a557600080fd5b80634a62bb65146106dd5780634f77f6c0146106f757806350ef22511461070d57806351f205e41461072d57600080fd5b80631a8145bb116103de5780632dd9a823116103a25780632dd9a8231461064c578063313ce56714610661578063395093511461067d578063452ed4f11461069d578063499b8394146106bd57600080fd5b80631a8145bb146105b75780631d5915f3146105cd57806323b872dd146105ed5780632a5f43ad1461060d5780632be32b611461062c57600080fd5b80630ad6af6e116104255780630ad6af6e146105115780630fcdfb941461053357806310d5de53146105485780631805805b1461057857806318160ddd1461059857600080fd5b806301e0beaf1461046257806306fdde03146104975780630758d924146104b9578063095ea7b3146104f157600080fd5b3661045d57005b600080fd5b34801561046e57600080fd5b506024546104829062010000900460ff1681565b60405190151581526020015b60405180910390f35b3480156104a357600080fd5b506104ac610d5b565b60405161048e9190613cd1565b3480156104c557600080fd5b506009546104d9906001600160a01b031681565b6040516001600160a01b03909116815260200161048e565b3480156104fd57600080fd5b5061048261050c366004613d37565b610ded565b34801561051d57600080fd5b5061053161052c366004613d63565b610e04565b005b34801561053f57600080fd5b5061053161100e565b34801561055457600080fd5b50610482610563366004613d7c565b60266020526000908152604090205460ff1681565b34801561058457600080fd5b50610531610593366004613d7c565b6110c3565b3480156105a457600080fd5b506002545b60405190815260200161048e565b3480156105c357600080fd5b506105a960225481565b3480156105d957600080fd5b506105316105e8366004613d7c565b611179565b3480156105f957600080fd5b50610482610608366004613da0565b6112a2565b34801561061957600080fd5b5060245461048290610100900460ff1681565b34801561063857600080fd5b50610531610647366004613d63565b61134c565b34801561065857600080fd5b506105316114ed565b34801561066d57600080fd5b506040516012815260200161048e565b34801561068957600080fd5b50610482610698366004613d37565b611597565b3480156106a957600080fd5b50600a546104d9906001600160a01b031681565b3480156106c957600080fd5b506105316106d8366004613d7c565b6115d3565b3480156106e957600080fd5b506013546104829060ff1681565b34801561070357600080fd5b506105a9601e5481565b34801561071957600080fd5b50610531610728366004613de1565b61166d565b34801561073957600080fd5b50610531611742565b34801561074e57600080fd5b50600f544310610482565b34801561076557600080fd5b506105a960175481565b34801561077b57600080fd5b5061053161078a366004613d7c565b611852565b34801561079b57600080fd5b506105a960195481565b3480156107b157600080fd5b506105316107c0366004613d7c565b611905565b3480156107d157600080fd5b506105a960075481565b3480156107e757600080fd5b506105a9601d5481565b3480156107fd57600080fd5b506105a960125481565b34801561081357600080fd5b506105a960205481565b34801561082957600080fd5b5061053161199f565b34801561083e57600080fd5b50610531611a2b565b34801561085357600080fd5b506013546104829062010000900460ff1681565b34801561087357600080fd5b506105a9610882366004613d7c565b6001600160a01b031660009081526020819052604090205490565b3480156108a957600080fd5b50610531611ae2565b3480156108be57600080fd5b506105316108cd366004613e11565b611b18565b3480156108de57600080fd5b506105316108ed366004613e4a565b611be0565b3480156108fe57600080fd5b5061053161090d366004613e67565b611ca2565b34801561091e57600080fd5b5061053161092d366004613d63565b611cf8565b34801561093e57600080fd5b5061048261094d366004613e93565b611dec565b34801561095e57600080fd5b5061053161096d366004613d63565b612026565b34801561097e57600080fd5b5061048261098d366004613d7c565b60106020526000908152604090205460ff1681565b3480156109ae57600080fd5b506105a960065481565b3480156109c457600080fd5b506005546001600160a01b03166104d9565b3480156109e257600080fd5b506104ac6120dc565b3480156109f757600080fd5b50610a006120eb565b60405161048e9190613f05565b348015610a1957600080fd5b50610531610a28366004613e11565b61214c565b348015610a3957600080fd5b50610531612240565b348015610a4e57600080fd5b50610482610a5d366004613d37565b612279565b348015610a6e57600080fd5b506105a9600f5481565b348015610a8457600080fd5b50610482610a93366004613d37565b612312565b348015610aa457600080fd5b50610482610ab3366004613d7c565b60276020526000908152604090205460ff1681565b348015610ad457600080fd5b5060135461048290610100900460ff1681565b348015610af357600080fd5b50610531610b02366004613e11565b61231f565b348015610b1357600080fd5b50610531610b22366004613e67565b6123a8565b348015610b3357600080fd5b50610531610b42366004613d63565b6123fe565b348015610b5357600080fd5b50600d546104d9906001600160a01b031681565b348015610b7357600080fd5b506015546104829060ff1681565b348015610b8d57600080fd5b506105a960235481565b348015610ba357600080fd5b50610531610bb2366004613d63565b61259d565b348015610bc357600080fd5b506105a960165481565b348015610bd957600080fd5b50610531610be8366004613d63565b6126e8565b348015610bf957600080fd5b506105a9610c08366004613e93565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3f57600080fd5b506105a9600b5481565b348015610c5557600080fd5b50610531612883565b348015610c6a57600080fd5b50600c546104d9906001600160a01b031681565b348015610c8a57600080fd5b506104d9610c99366004613d63565b6128b9565b348015610caa57600080fd5b506105a9600e5481565b348015610cc057600080fd5b506105a960185481565b348015610cd657600080fd5b50610531610ce5366004613d7c565b6128e3565b348015610cf657600080fd5b506105316129ce565b348015610d0b57600080fd5b506105a9601f5481565b348015610d2157600080fd5b506024546104829060ff1681565b348015610d3b57600080fd5b506105a960085481565b348015610d5157600080fd5b506105a960215481565b606060038054610d6a90613f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9690613f18565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b6000610dfa338484612a45565b5060015b92915050565b6005546001600160a01b03163314610e375760405162461bcd60e51b8152600401610e2e90613f52565b60405180910390fd5b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190613f87565b905060008111610ef65760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610e2e565b6000612710610f058484613fb6565b610f0f9190613fcd565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190613fef565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90610fc5903090859060019081903390429060040161400c565b60408051808303816000875af1158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190614047565b5050505050565b6005546001600160a01b031633146110385760405162461bcd60e51b8152600401610e2e90613f52565b60245460ff161561108b5760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e2e565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b031633146110ed5760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff16156111575760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e2e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111a35760405162461bcd60e51b8152600401610e2e90613f52565b60245462010000900460ff166112155760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610e2e565b6001600160a01b03811660009081526010602052604090205460ff161561127e5760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e2e565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b60006112af848484612b69565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156113345760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e2e565b6113418533858403612a45565b506001949350505050565b6005546001600160a01b031633146113765760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861138b60025490565b611396906005613fb6565b6113a09190613fcd565b6113aa9190613fcd565b81101561140b5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610e2e565b670de0b6b3a7640000606461141f60025490565b61142a90600a613fb6565b6114349190613fcd565b61143e9190613fcd565b81111561149f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792062757920616d6f756e7420686967686572604482015268207468616e2031302560b81b6064820152608401610e2e565b6114b181670de0b6b3a7640000613fb6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146115175760405162461bcd60e51b8152600401610e2e90613f52565b60245462010000900460ff166115895760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610e2e565b6024805462ff000019169055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dfa9185906115ce90869061406b565b612a45565b6005546001600160a01b031633146115fd5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166116235760405162461bcd60e51b8152600401610e2e9061407e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116975760405162461bcd60e51b8152600401610e2e90613f52565b602454610100900460ff166116ee5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f64652064697361626c656420666f722065766572216044820152606401610e2e565b6017829055600060188190556019819055611709818461406b565b611713919061406b565b601655601e8190556000601f8190556020819055611731818361406b565b61173b919061406b565b601d555050565b6005546001600160a01b0316331461176c5760405162461bcd60e51b8152600401610e2e90613f52565b600b543060009081526020819052604090205410156117f5576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e2e565b600a805460ff60a01b1916600160a01b1790556118106136ea565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461187c5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b03811660009081526010602052604090205460ff166118e45760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e2e565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461192f5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166119555760405162461bcd60e51b8152600401610e2e9061407e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401610e2e90613f52565b601a546017819055601b546018819055601c546019819055916119ec919061406b565b6119f6919061406b565b601655601a54601e819055601b54601f819055601c54602081905591611a1c919061406b565b611a26919061406b565b601d55565b6005546001600160a01b03163314611a555760405162461bcd60e51b8152600401610e2e90613f52565b602454610100900460ff16611aac5760405162461bcd60e51b815260206004820181905260248201527f4869676820746178206d6f646520616c72656164792064697361626c656421216044820152606401610e2e565b6024805461ff00191690556040517fca3625aacc6ff58610754d78cf8e59adacd2752c6d6292edcb6068d395997ba090600090a1565b6005546001600160a01b03163314611b0c5760405162461bcd60e51b8152600401610e2e90613f52565b6013805460ff19169055565b6005546001600160a01b03163314611b425760405162461bcd60e51b8152600401610e2e90613f52565b80611bb557600a546001600160a01b0390811690831603611bb55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e2e565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c0a5760405162461bcd60e51b8152600401610e2e90613f52565b80611c575760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e2e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611ccc5760405162461bcd60e51b8152600401610e2e90613f52565b60178390556018829055601981905580611ce6838561406b565b611cf0919061406b565b601655505050565b6005546001600160a01b03163314611d225760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff1615611d7a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e2e565b600a811115611d9b5760405162461bcd60e51b8152600401610e2e906140c4565b6013805462ffff0019166201010017905543600e819055611dbd90829061406b565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e195760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b038316611e6f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e2e565b6001600160a01b03831630141580611e8f5750601354610100900460ff16155b611ef85760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e2e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f639190613f87565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613fef565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120505760405162461bcd60e51b8152600401610e2e90613f52565b601354610100900460ff16156120bc5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610e2e565b600a8110611d9b5760405162461bcd60e51b8152600401610e2e906140c4565b606060048054610d6a90613f18565b60606011805480602002602001604051908101604052809291908181526020018280548015610de357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612125575050505050905090565b6005546001600160a01b031633146121765760405162461bcd60e51b8152600401610e2e90613f52565b600a546001600160a01b03908116908316036121fa5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e2e565b61220482826138f7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461226a5760405162461bcd60e51b8152600401610e2e90613f52565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e2e565b6123083385858403612a45565b5060019392505050565b6000610dfa338484612b69565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123d25760405162461bcd60e51b8152600401610e2e90613f52565b601e839055601f8290556020819055806123ec838561406b565b6123f6919061406b565b601d55505050565b6005546001600160a01b031633146124285760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861243d60025490565b612448906005613fb6565b6124529190613fcd565b61245c9190613fcd565b8110156124c05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e2e565b670de0b6b3a764000060646124d460025490565b6124df906005613fb6565b6124e99190613fcd565b6124f39190613fcd565b8111156125565760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610e2e565b61256881670de0b6b3a7640000613fb6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016114e2565b6005546001600160a01b031633146125c75760405162461bcd60e51b8152600401610e2e90613f52565b620186a06125d460025490565b6125df906001613fb6565b6125e99190613fcd565b8110156126565760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e2e565b6103e861266260025490565b61266d906001613fb6565b6126779190613fcd565b8111156126e35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e2e565b600b55565b6005546001600160a01b031633146127125760405162461bcd60e51b8152600401610e2e90613f52565b670de0b6b3a76400006103e861272760025490565b612732906005613fb6565b61273c9190613fcd565b6127469190613fcd565b8110156127a85760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610e2e565b670de0b6b3a764000060646127bc60025490565b6127c7906002613fb6565b6127d19190613fcd565b6127db9190613fcd565b81111561283c5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e2e565b61284e81670de0b6b3a7640000613fb6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016114e2565b6005546001600160a01b031633146128ad5760405162461bcd60e51b8152600401610e2e90613f52565b6015805460ff19169055565b601181815481106128c957600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461290d5760405162461bcd60e51b8152600401610e2e90613f52565b6001600160a01b0381166129725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146129f85760405162461bcd60e51b8152600401610e2e90613f52565b604051600090339047908381818185875af1925050503d8060008114612a3a576040519150601f19603f3d011682016040523d82523d6000602084013e612a3f565b606091505b50505050565b6001600160a01b038316612aa75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2e565b6001600160a01b038216612b085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612b8f5760405162461bcd60e51b8152600401610e2e9061410b565b6001600160a01b038216612bb55760405162461bcd60e51b8152600401610e2e90614150565b60008111612c055760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e2e565b601354610100900460ff16612c98576001600160a01b03831660009081526025602052604090205460ff1680612c5357506001600160a01b03821660009081526025602052604090205460ff165b612c985760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e2e565b600f544310158015612cb15750601354610100900460ff165b15612d81576001600160a01b03831660009081526010602052604090205460ff161580612ceb57506005546001600160a01b038381169116145b80612d0057506001600160a01b03821661dead145b612d815760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e2e565b60135460ff16156131c7576005546001600160a01b03848116911614801590612db857506005546001600160a01b03838116911614155b8015612dcf57506001600160a01b03821661dead14155b8015612df457506001600160a01b03831660009081526025602052604090205460ff16155b8015612e1957506001600160a01b03821660009081526025602052604090205460ff16155b156131c75760155460ff1615612f32576009546001600160a01b03838116911614801590612e555750600a546001600160a01b03838116911614155b15612f3257612e65600243614193565b32600090815260146020526040902054108015612ea35750612e88600243614193565b6001600160a01b038316600090815260146020526040902054105b612f0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e2e565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612f7357506001600160a01b03821660009081526026602052604090205460ff16155b1561304a57600654811115612fdb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e2e565b6008546001600160a01b038316600090815260208190526040902054613001908361406b565b11156130455760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e2e565b6131c7565b6001600160a01b03821660009081526027602052604090205460ff16801561308b57506001600160a01b03831660009081526026602052604090205460ff16155b1561313d5760245460ff166130d85760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610e2e565b6007548111156130455760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e2e565b6001600160a01b03821660009081526026602052604090205460ff166131c7576008546001600160a01b038316600090815260208190526040902054613183908361406b565b11156131c75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e2e565b30600090815260208190526040902054600b54811080159081906131f3575060135462010000900460ff165b80156132095750600a54600160a01b900460ff16155b801561322d57506001600160a01b03841660009081526027602052604090205460ff165b1561325b57600a805460ff60a01b1916600160a01b17905561324d6136ea565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061329d57506001600160a01b03851660009081526025602052604090205460ff165b156132a6575060005b600081156136d657600f544310806132ec5750670c7d713b49da00006006546132cf9190614193565b85101580156132ec575043600f5460086132e9919061406b565b10155b801561331057506001600160a01b03871660009081526027602052604090205460ff165b801561333557506001600160a01b03861660009081526027602052604090205460ff16155b801561335a57506001600160a01b03861660009081526025602052604090205460ff16155b801561336857506000601654115b1561351f57600f54431061338f576001600660008282546133899190614193565b90915550505b6001600160a01b03861660009081526010602052604090205460ff1661346f576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916133e890849061406b565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461347c866063613fb6565b6134869190613fcd565b9050601654601854826134999190613fb6565b6134a39190613fcd565b602260008282546134b4919061406b565b90915550506016546017546134c99083613fb6565b6134d39190613fcd565b602160008282546134e4919061406b565b90915550506016546019546134f99083613fb6565b6135039190613fcd565b60236000828254613514919061406b565b909155506136b89050565b6001600160a01b03861660009081526027602052604090205460ff16801561354957506000601d54115b156135db576064601d548661355e9190613fb6565b6135689190613fcd565b9050601d54601f548261357b9190613fb6565b6135859190613fcd565b60226000828254613596919061406b565b9091555050601d54601e546135ab9083613fb6565b6135b59190613fcd565b602160008282546135c6919061406b565b9091555050601d546020546134f99083613fb6565b6001600160a01b03871660009081526027602052604090205460ff16801561360557506000601654115b156136b85760646016548661361a9190613fb6565b6136249190613fcd565b9050601654601854826136379190613fb6565b6136419190613fcd565b60226000828254613652919061406b565b90915550506016546017546136679083613fb6565b6136719190613fcd565b60216000828254613682919061406b565b90915550506016546019546136979083613fb6565b6136a19190613fcd565b602360008282546136b2919061406b565b90915550505b80156136c9576136c9873083613925565b6136d38186614193565b94505b6136e1878787613925565b50505050505050565b3060009081526020819052604081205490506000602354602154602254613711919061406b565b61371b919061406b565b9050811580613728575080155b15613731575050565b600b5461373f90600a613fb6565b82111561375757600b5461375490600a613fb6565b91505b6000806002836022548661376b9190613fb6565b6137759190613fcd565b61377f9190613fcd565b905061379361378e8286614193565b613a7a565b602254479081906000906137a990600290613fcd565b6137b39087614193565b6021546137c09085613fb6565b6137ca9190613fcd565b9050600060026022546137dd9190613fcd565b6137e79088614193565b6023546137f49086613fb6565b6137fe9190613fcd565b905061380a818361406b565b6138149084614193565b600060228190556021819055602355925084158015906138345750600083115b15613843576138438584613bd4565b600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613890576040519150601f19603f3d011682016040523d82523d6000602084013e613895565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146138e5576040519150601f19603f3d011682016040523d82523d6000602084013e6138ea565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556122048282613c6e565b6001600160a01b03831661394b5760405162461bcd60e51b8152600401610e2e9061410b565b6001600160a01b0382166139715760405162461bcd60e51b8152600401610e2e90614150565b6001600160a01b038316600090815260208190526040902054818110156139e95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e2e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613a2090849061406b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a6c91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613aaf57613aaf6141a6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c91906141bc565b81600181518110613b3f57613b3f6141a6565b6001600160a01b039283166020918202929092010152600954613b659130911684612a45565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b9e9085906000908690309042906004016141d9565b600060405180830381600087803b158015613bb857600080fd5b505af1158015613bcc573d6000803e3d6000fd5b505050505050565b600954613bec9030906001600160a01b031684612a45565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613c2b9030908790600090819061dead90429060040161400c565b60606040518083038185885af1158015613c49573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110079190614215565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613cfe57858101830151858201604001528201613ce2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613d3457600080fd5b50565b60008060408385031215613d4a57600080fd5b8235613d5581613d1f565b946020939093013593505050565b600060208284031215613d7557600080fd5b5035919050565b600060208284031215613d8e57600080fd5b8135613d9981613d1f565b9392505050565b600080600060608486031215613db557600080fd5b8335613dc081613d1f565b92506020840135613dd081613d1f565b929592945050506040919091013590565b60008060408385031215613df457600080fd5b50508035926020909101359150565b8015158114613d3457600080fd5b60008060408385031215613e2457600080fd5b8235613e2f81613d1f565b91506020830135613e3f81613e03565b809150509250929050565b600060208284031215613e5c57600080fd5b8135613d9981613e03565b600080600060608486031215613e7c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613ea657600080fd5b8235613eb181613d1f565b91506020830135613e3f81613d1f565b600081518084526020808501945080840160005b83811015613efa5781516001600160a01b031687529582019590820190600101613ed5565b509495945050505050565b602081526000613d996020830184613ec1565b600181811c90821680613f2c57607f821691505b602082108103613f4c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613f9957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dfe57610dfe613fa0565b600082613fea57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561400157600080fd5b8151613d9981613e03565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561405a57600080fd5b505080516020909101519092909150565b80820180821115610dfe57610dfe613fa0565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610dfe57610dfe613fa0565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156141ce57600080fd5b8151613d9981613d1f565b85815284602082015260a0604082015260006141f860a0830186613ec1565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561422a57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220223461ffff85821f37263408650588eefcd553dfdc22794e1589bf40e065cbc564736f6c63430008110033

Deployed Bytecode Sourcemap

10972:25056:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12554:34;;;;;;;;;;-1:-1:-1;12554:34:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12554:34:0;;;;;;;;4324:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11115:27::-;;;;;;;;;;-1:-1:-1;11115:27:0;;;;-1:-1:-1;;;;;11115:27:0;;;;;;-1:-1:-1;;;;;941:32:1;;;923:51;;911:2;896:18;11115:27:0;759:221:1;5379:210:0;;;;;;;;;;-1:-1:-1;5379:210:0;;;;;:::i;:::-;;:::i;34837:667::-;;;;;;;;;;-1:-1:-1;34837:667:0;;;;;:::i;:::-;;:::i;:::-;;34181:185;;;;;;;;;;;;;:::i;12737:63::-;;;;;;;;;;-1:-1:-1;12737:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17676:194;;;;;;;;;;-1:-1:-1;17676:194:0;;;;;:::i;:::-;;:::i;4645:108::-;;;;;;;;;;-1:-1:-1;4733:12:0;;4645:108;;;2024:25:1;;;2012:2;1997:18;4645:108:0;1878:177:1;12391:33:0;;;;;;;;;;;;;;;;17179:300;;;;;;;;;;-1:-1:-1;17179:300:0;;;;;:::i;:::-;;:::i;5597:529::-;;;;;;;;;;-1:-1:-1;5597:529:0;;;;;:::i;:::-;;:::i;12510:37::-;;;;;;;;;;-1:-1:-1;12510:37:0;;;;;;;;;;;18037:457;;;;;;;;;;-1:-1:-1;18037:457:0;;;;;:::i;:::-;;:::i;34607:222::-;;;;;;;;;;;;;:::i;4544:93::-;;;;;;;;;;-1:-1:-1;4544:93:0;;4627:2;2663:36:1;;2651:2;2636:18;4544:93:0;2521:184:1;6134:297:0;;;;;;;;;;-1:-1:-1;6134:297:0;;;;;:::i;:::-;;:::i;11149:21::-;;;;;;;;;;-1:-1:-1;11149:21:0;;;;-1:-1:-1;;;;;11149:21:0;;;32859:357;;;;;;;;;;-1:-1:-1;32859:357:0;;;;;:::i;:::-;;:::i;11563:33::-;;;;;;;;;;-1:-1:-1;11563:33:0;;;;;;;;12234:32;;;;;;;;;;;;;;;;21850:504;;;;;;;;;;-1:-1:-1;21850:504:0;;;;;:::i;:::-;;:::i;33596:349::-;;;;;;;;;;;;;:::i;29221:121::-;;;;;;;;;;-1:-1:-1;29316:18:0;;29301:12;:33;29221:121;;11943:31;;;;;;;;;;;;;;;;17487:181;;;;;;;;;;-1:-1:-1;17487:181:0;;;;;:::i;:::-;;:::i;12018:29::-;;;;;;;;;;;;;;;;33224:320;;;;;;;;;;-1:-1:-1;33224:320:0;;;;;:::i;:::-;;:::i;11047:28::-;;;;;;;;;;;;;;;;12199;;;;;;;;;;;;;;;;11529:25;;;;;;;;;;;;;;;;12311:30;;;;;;;;;;;;;;;;22362:531;;;;;;;;;;;;;:::i;34374:225::-;;;;;;;;;;;;;:::i;11643:31::-;;;;;;;;;;-1:-1:-1;11643:31:0;;;;;;;;;;;4761:177;;;;;;;;;;-1:-1:-1;4761:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4912:18:0;4880:7;4912:18;;;;;;;;;;;;4761:177;33997:84;;;;;;;;;;;;;:::i;20167:334::-;;;;;;;;;;-1:-1:-1;20167:334:0;;;;;:::i;:::-;;:::i;8855:265::-;;;;;;;;;;-1:-1:-1;8855:265:0;;;;;:::i;:::-;;:::i;21114:356::-;;;;;;;;;;-1:-1:-1;21114:356:0;;;;;:::i;:::-;;:::i;16595:464::-;;;;;;;;;;-1:-1:-1;16595:464:0;;;;;:::i;:::-;;:::i;32029:567::-;;;;;;;;;;-1:-1:-1;32029:567:0;;;;;:::i;:::-;;:::i;35512:513::-;;;;;;;;;;-1:-1:-1;35512:513:0;;;;;:::i;:::-;;:::i;11444:43::-;;;;;;;;;;-1:-1:-1;11444:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11013:27;;;;;;;;;;;;;;;;8641:79;;;;;;;;;;-1:-1:-1;8706:6:0;;-1:-1:-1;;;;;8706:6:0;8641:79;;4432:104;;;;;;;;;;;;;:::i;17067:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20509:353::-;;;;;;;;;;-1:-1:-1;20509:353:0;;;;;:::i;:::-;;:::i;34089:84::-;;;;;;;;;;;;;:::i;6439:482::-;;;;;;;;;;-1:-1:-1;6439:482:0;;;;;:::i;:::-;;:::i;11404:33::-;;;;;;;;;;;;;;;;4946:216;;;;;;;;;;-1:-1:-1;4946:216:0;;;;;:::i;:::-;;:::i;12958:57::-;;;;;;;;;;-1:-1:-1;12958:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11603:33;;;;;;;;;;-1:-1:-1;11603:33:0;;;;;;;;;;;22901:182;;;;;;;;;;-1:-1:-1;22901:182:0;;;;;:::i;:::-;;:::i;21478:364::-;;;;;;;;;;-1:-1:-1;21478:364:0;;;;;:::i;:::-;;:::i;18971:461::-;;;;;;;;;;-1:-1:-1;18971:461:0;;;;;:::i;:::-;;:::i;11288:30::-;;;;;;;;;;-1:-1:-1;11288:30:0;;;;-1:-1:-1;;;;;11288:30:0;;;11861:39;;;;;;;;;;-1:-1:-1;11861:39:0;;;;;;;;12431:32;;;;;;;;;;;;;;;;19502:428;;;;;;;;;;-1:-1:-1;19502:428:0;;;;;:::i;:::-;;:::i;11909:27::-;;;;;;;;;;;;;;;;18502:461;;;;;;;;;;-1:-1:-1;18502:461:0;;;;;:::i;:::-;;:::i;5170:201::-;;;;;;;;;;-1:-1:-1;5170:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5336:18:0;;;5304:7;5336:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5170:201;11207:33;;;;;;;;;;;;;;;;17931:98;;;;;;;;;;;;;:::i;11249:32::-;;;;;;;;;;-1:-1:-1;11249:32:0;;;;-1:-1:-1;;;;;11249:32:0;;;11494:28;;;;;;;;;;-1:-1:-1;11494:28:0;;;;;:::i;:::-;;:::i;11327:37::-;;;;;;;;;;;;;;;;11981:30;;;;;;;;;;;;;;;;9128:281;;;;;;;;;;-1:-1:-1;9128:281:0;;;;;:::i;:::-;;:::i;32666:185::-;;;;;;;;;;;;;:::i;12273:31::-;;;;;;;;;;;;;;;;12470:33;;;;;;;;;;-1:-1:-1;12470:33:0;;;;;;;;11082:24;;;;;;;;;;;;;;;;12350:34;;;;;;;;;;;;;;;;4324:100;4378:13;4411:5;4404:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4324:100;:::o;5379:210::-;5498:4;5520:39;474:10;5543:7;5552:6;5520:8;:39::i;:::-;-1:-1:-1;5577:4:0;5379:210;;;;;:::o;34837:667::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;;;;;;;;;34931:6:::1;::::0;34924:39:::1;::::0;-1:-1:-1;;;34924:39:0;;34957:4:::1;34924:39;::::0;::::1;923:51:1::0;34904:17:0::1;::::0;-1:-1:-1;;;;;34931:6:0::1;::::0;34924:24:::1;::::0;896:18:1;;34924:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34904:59;;34996:1;34984:9;:13;34976:50;;;::::0;-1:-1:-1;;;34976:50:0;;6510:2:1;34976:50:0::1;::::0;::::1;6492:21:1::0;6549:2;6529:18;;;6522:30;6588:26;6568:18;;;6561:54;6632:18;;34976:50:0::1;6308:348:1::0;34976:50:0::1;35039:16;35082:5;35059:19;35071:7:::0;35059:9;:19:::1;:::i;:::-;35058:29;;;;:::i;:::-;35174:6;::::0;35198:9:::1;::::0;35167:52:::1;::::0;-1:-1:-1;;;35167:52:0;;-1:-1:-1;;;;;35198:9:0;;::::1;35167:52;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;35039:48:0;;-1:-1:-1;35174:6:0::1;::::0;35167:22:::1;::::0;7335:18:1;;35167:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35265:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;35265:231:0;;-1:-1:-1;;;;;35265:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;35316:4:::1;::::0;35336:8;;35265:9;;;;35445:10:::1;::::0;35470:15:::1;::::0;35265:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34893:611;;34837:667:::0;:::o;34181:185::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;34249:14:::1;::::0;::::1;;34248:15;34240:52;;;::::0;-1:-1:-1;;;34240:52:0;;8781:2:1;34240:52:0::1;::::0;::::1;8763:21:1::0;8820:2;8800:18;;;8793:30;8859:26;8839:18;;;8832:54;8903:18;;34240:52:0::1;8579:348:1::0;34240:52:0::1;34305:14;:21:::0;;-1:-1:-1;;34305:21:0::1;34322:4;34305:21;::::0;;34342:16:::1;::::0;::::1;::::0;34305:14:::1;::::0;34342:16:::1;34181:185::o:0;17676:194::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;17762:13:::1;::::0;::::1;::::0;::::1;;;17761:14;17753:68;;;::::0;-1:-1:-1;;;17753:68:0;;9134:2:1;17753:68:0::1;::::0;::::1;9116:21:1::0;9173:2;9153:18;;;9146:30;9212:34;9192:18;;;9185:62;-1:-1:-1;;;9263:18:1;;;9256:39;9312:19;;17753:68:0::1;8932:405:1::0;17753:68:0::1;17832:9;:30:::0;;-1:-1:-1;;;;;;17832:30:0::1;-1:-1:-1::0;;;;;17832:30:0;;;::::1;::::0;;;::::1;::::0;;17676:194::o;17179:300::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;17272:15:::1;::::0;;;::::1;;;17250:114;;;::::0;-1:-1:-1;;;17250:114:0;;9544:2:1;17250:114:0::1;::::0;::::1;9526:21:1::0;9583:2;9563:18;;;9556:30;9622:34;9602:18;;;9595:62;-1:-1:-1;;;9673:18:1;;;9666:47;9730:19;;17250:114:0::1;9342:413:1::0;17250:114:0::1;-1:-1:-1::0;;;;;17384:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17383:20;17375:59;;;::::0;-1:-1:-1;;;17375:59:0;;9962:2:1;17375:59:0::1;::::0;::::1;9944:21:1::0;10001:2;9981:18;;;9974:30;10040:28;10020:18;;;10013:56;10086:18;;17375:59:0::1;9760:350:1::0;17375:59:0::1;-1:-1:-1::0;;;;;17445:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17445:26:0::1;17467:4;17445:26;::::0;;17179:300::o;5597:529::-;5737:4;5754:36;5764:6;5772:9;5783:6;5754:9;:36::i;:::-;-1:-1:-1;;;;;5830:19:0;;5803:24;5830:19;;;:11;:19;;;;;;;;474:10;5830:33;;;;;;;;5896:26;;;;5874:116;;;;-1:-1:-1;;;5874:116:0;;10317:2:1;5874:116:0;;;10299:21:1;10356:2;10336:18;;;10329:30;10395:34;10375:18;;;10368:62;-1:-1:-1;;;10446:18:1;;;10439:38;10494:19;;5874:116:0;10115:404:1;5874:116:0;6026:57;6035:6;474:10;6076:6;6057:16;:25;6026:8;:57::i;:::-;-1:-1:-1;6114:4:0;;5597:529;-1:-1:-1;;;;5597:529:0:o;18037:457::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;18174:4:::1;18166;18145:13;4733:12:::0;;;4645:108;18145:13:::1;:17;::::0;18161:1:::1;18145:17;:::i;:::-;18144:26;;;;:::i;:::-;18143:35;;;;:::i;:::-;18133:6;:45;;18111:136;;;::::0;-1:-1:-1;;;18111:136:0;;10726:2:1;18111:136:0::1;::::0;::::1;10708:21:1::0;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;-1:-1:-1;;;10855:18:1;;;10848:39;10904:19;;18111:136:0::1;10524:405:1::0;18111:136:0::1;18321:4;18314:3;18292:13;4733:12:::0;;;4645:108;18292:13:::1;:18;::::0;18308:2:::1;18292:18;:::i;:::-;18291:26;;;;:::i;:::-;18290:35;;;;:::i;:::-;18280:6;:45;;18258:136;;;::::0;-1:-1:-1;;;18258:136:0;;11136:2:1;18258:136:0::1;::::0;::::1;11118:21:1::0;11175:2;11155:18;;;11148:30;11214:34;11194:18;;;11187:62;-1:-1:-1;;;11265:18:1;;;11258:39;11314:19;;18258:136:0::1;10934:405:1::0;18258:136:0::1;18420:17;:6:::0;18430::::1;18420:17;:::i;:::-;18405:12;:32:::0;;;18453:33:::1;::::0;2024:25:1;;;18453:33:0::1;::::0;2012:2:1;1997:18;18453:33:0::1;;;;;;;;18037:457:::0;:::o;34607:222::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;34693:15:::1;::::0;;;::::1;;;34671:114;;;::::0;-1:-1:-1;;;34671:114:0;;11546:2:1;34671:114:0::1;::::0;::::1;11528:21:1::0;11585:2;11565:18;;;11558:30;11624:34;11604:18;;;11597:62;-1:-1:-1;;;11675:18:1;;;11668:47;11732:19;;34671:114:0::1;11344:413:1::0;34671:114:0::1;34798:15;:23:::0;;-1:-1:-1;;34798:23:0::1;::::0;;34607:222::o;6134:297::-;474:10;6249:4;6343:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6343:34:0;;;;;;;;;;6249:4;;6271:130;;6321:7;;6343:47;;6380:10;;6343:47;:::i;:::-;6271:8;:130::i;32859:357::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32992:32:0;::::1;32970:120;;;;-1:-1:-1::0;;;32970:120:0::1;;;;;;;:::i;:::-;33101:17;:47:::0;;-1:-1:-1;;;;;;33101:47:0::1;-1:-1:-1::0;;;;;33101:47:0;::::1;::::0;;::::1;::::0;;;33164:44:::1;::::0;::::1;::::0;-1:-1:-1;;33164:44:0::1;32859:357:::0;:::o;21850:504::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;21941:18:::1;::::0;::::1;::::0;::::1;;;21933:63;;;::::0;-1:-1:-1;;;21933:63:0;;12501:2:1;21933:63:0::1;::::0;::::1;12483:21:1::0;;;12520:18;;;12513:30;12579:34;12559:18;;;12552:62;12631:18;;21933:63:0::1;12299:356:1::0;21933:63:0::1;22009:16;:22:::0;;;22060:1:::1;22042:15;:19:::0;;;22072:14:::1;:18:::0;;;22116:34:::1;22060:1:::0;22028:3;22116:34:::1;:::i;:::-;:51;;;;:::i;:::-;22101:12;:66:::0;22180:17:::1;:24:::0;;;-1:-1:-1;22215:16:0::1;:20:::0;;;22246:15:::1;:19:::0;;;22292:36:::1;-1:-1:-1::0;22200:4:0;22292:36:::1;:::i;:::-;:54;;;;:::i;:::-;22276:13;:70:::0;-1:-1:-1;;21850:504:0:o;33596:349::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;33701:18:::1;::::0;33691:4:::1;4880:7:::0;4912:18;;;;;;;;;;;33673:46:::1;;33651:160;;;::::0;;-1:-1:-1;;;33651:160:0;;12862:2:1;33651:160:0::1;::::0;::::1;12844:21:1::0;12881:18;;;12874:30;;;;12940:34;12920:18;;;12913:62;13011:34;12991:18;;;12984:62;13063:19;;33651:160:0::1;12660:428:1::0;33651:160:0::1;33822:8;:15:::0;;-1:-1:-1;;;;33822:15:0::1;-1:-1:-1::0;;;33822:15:0::1;::::0;;33848:10:::1;:8;:10::i;:::-;33869:8;:16:::0;;-1:-1:-1;;;;33869:16:0::1;::::0;;33901:36:::1;::::0;33921:15:::1;2024:25:1::0;;33901:36:0::1;::::0;2012:2:1;1997:18;33901:36:0::1;;;;;;;33596:349::o:0;17487:181::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17568:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17560:62;;;::::0;-1:-1:-1;;;17560:62:0;;13295:2:1;17560:62:0::1;::::0;::::1;13277:21:1::0;13334:2;13314:18;;;13307:30;13373:32;13353:18;;;13346:60;13423:18;;17560:62:0::1;13093:354:1::0;17560:62:0::1;-1:-1:-1::0;;;;;17633:19:0::1;17655:5;17633:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17633:27:0::1;::::0;;17487:181::o;33224:320::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33330:30:0;::::1;33308:118;;;;-1:-1:-1::0;;;33308:118:0::1;;;;;;;:::i;:::-;33437:15;:43:::0;;-1:-1:-1;;;;;;33437:43:0::1;-1:-1:-1::0;;;;;33437:43:0;::::1;::::0;;::::1;::::0;;;33496:40:::1;::::0;::::1;::::0;-1:-1:-1;;33496:40:0::1;33224:320:::0;:::o;22362:531::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;22434:25:::1;::::0;22415:16:::1;:44:::0;;;22488:24:::1;::::0;22470:15:::1;:42:::0;;;22540:23:::1;::::0;22523:14:::1;:40:::0;;;22540:23;22589:34:::1;::::0;22488:24;22589:34:::1;:::i;:::-;:51;;;;:::i;:::-;22574:12;:66:::0;22673:25:::1;::::0;22653:17:::1;:45:::0;;;22728:24:::1;::::0;22709:16:::1;:43:::0;;;22781:23:::1;::::0;22763:15:::1;:41:::0;;;22781:23;22831:36:::1;::::0;22728:24;22831:36:::1;:::i;:::-;:54;;;;:::i;:::-;22815:13;:70:::0;22362:531::o;34374:225::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;34453:18:::1;::::0;::::1;::::0;::::1;;;34445:63;;;::::0;-1:-1:-1;;;34445:63:0;;13654:2:1;34445:63:0::1;::::0;::::1;13636:21:1::0;;;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;13784:18;;34445:63:0::1;13452:356:1::0;34445:63:0::1;34521:18;:26:::0;;-1:-1:-1;;34521:26:0::1;::::0;;34563:28:::1;::::0;::::1;::::0;34542:5:::1;::::0;34563:28:::1;34374:225::o:0;33997:84::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;34051:14:::1;:22:::0;;-1:-1:-1;;34051:22:0::1;::::0;;33997:84::o;20167:334::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;20287:4:::1;20282:155;;20344:6;::::0;-1:-1:-1;;;;;20344:6:0;;::::1;20334:16:::0;;::::1;::::0;20308:117:::1;;;::::0;-1:-1:-1;;;20308:117:0;;14015:2:1;20308:117:0::1;::::0;::::1;13997:21:1::0;14054:2;14034:18;;;14027:30;14093:34;14073:18;;;14066:62;-1:-1:-1;;;14144:18:1;;;14137:37;14191:19;;20308:117:0::1;13813:403:1::0;20308:117:0::1;-1:-1:-1::0;;;;;20447:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20447:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20167:334::o;8855:265::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;8982:15:::1;8974:52;;;::::0;-1:-1:-1;;;8974:52:0;;14423:2:1;8974:52:0::1;::::0;::::1;14405:21:1::0;14462:2;14442:18;;;14435:30;14501:26;14481:18;;;14474:54;14545:18;;8974:52:0::1;14221:348:1::0;8974:52:0::1;9063:6;::::0;9042:40:::1;::::0;9079:1:::1;::::0;-1:-1:-1;;;;;9063:6:0::1;::::0;9042:40:::1;::::0;9079:1;;9042:40:::1;-1:-1:-1::0;9093:6:0::1;:19:::0;;-1:-1:-1;;;;;;9093:19:0::1;::::0;;8855:265::o;21114:356::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;21270:16:::1;:33:::0;;;21314:15:::1;:31:::0;;;21356:14:::1;:29:::0;;;21373:12;21411:34:::1;21332:13:::0;21289:14;21411:34:::1;:::i;:::-;:51;;;;:::i;:::-;21396:12;:66:::0;-1:-1:-1;;;21114:356:0:o;16595:464::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;16683:13:::1;::::0;::::1;::::0;::::1;;;16682:14;16674:50;;;::::0;-1:-1:-1;;;16674:50:0;;14776:2:1;16674:50:0::1;::::0;::::1;14758:21:1::0;14815:2;14795:18;;;14788:30;14854:25;14834:18;;;14827:53;14897:18;;16674:50:0::1;14574:347:1::0;16674:50:0::1;16777:2;16757:16;:22;;16735:111;;;;-1:-1:-1::0;;;16735:111:0::1;;;;;;;:::i;:::-;16857:13;:20:::0;;-1:-1:-1;;16888:18:0;;;;;16938:12:::1;16917:18;:33:::0;;;16982:37:::1;::::0;17003:16;;16982:37:::1;:::i;:::-;16961:18;:58:::0;17035:16:::1;::::0;::::1;::::0;;;::::1;16595:464:::0;:::o;32029:567::-;8768:6;;32143:10;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32179:20:0;::::1;32171:59;;;::::0;-1:-1:-1;;;32171:59:0;;15536:2:1;32171:59:0::1;::::0;::::1;15518:21:1::0;15575:2;15555:18;;;15548:30;15614:28;15594:18;;;15587:56;15660:18;;32171:59:0::1;15334:350:1::0;32171:59:0::1;-1:-1:-1::0;;;;;32263:23:0;::::1;32281:4;32263:23;;::::0;:41:::1;;-1:-1:-1::0;32291:13:0::1;::::0;::::1;::::0;::::1;;;32290:14;32263:41;32241:143;;;::::0;-1:-1:-1;;;32241:143:0;;15891:2:1;32241:143:0::1;::::0;::::1;15873:21:1::0;15930:2;15910:18;;;15903:30;15969:34;15949:18;;;15942:62;-1:-1:-1;;;16020:18:1;;;16013:50;16080:19;;32241:143:0::1;15689:416:1::0;32241:143:0::1;32422:39;::::0;-1:-1:-1;;;32422:39:0;;32455:4:::1;32422:39;::::0;::::1;923:51:1::0;32395:24:0::1;::::0;-1:-1:-1;;;;;32422:24:0;::::1;::::0;::::1;::::0;896:18:1;;32422:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32480:46;::::0;-1:-1:-1;;;32480:46:0;;-1:-1:-1;;;;;7380:32:1;;;32480:46:0::1;::::0;::::1;7362:51:1::0;7429:18;;;7422:34;;;32395:66:0;;-1:-1:-1;32480:23:0;;::::1;::::0;::::1;::::0;7335:18:1;;32480:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32542;::::0;;-1:-1:-1;;;;;7380:32:1;;7362:51;;7444:2;7429:18;;7422:34;;;32472:54:0;;-1:-1:-1;32542:46:0::1;::::0;7335:18:1;32542:46:0::1;;;;;;;32160:436;32029:567:::0;;;;:::o;35512:513::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;35593:13:::1;::::0;::::1;::::0;::::1;;;35592:14;35584:70;;;::::0;-1:-1:-1;;;35584:70:0;;16312:2:1;35584:70:0::1;::::0;::::1;16294:21:1::0;16351:2;16331:18;;;16324:30;16390:34;16370:18;;;16363:62;-1:-1:-1;;;16441:18:1;;;16434:41;16492:19;;35584:70:0::1;16110:407:1::0;35584:70:0::1;35706:2;35687:16;:21;35665:110;;;;-1:-1:-1::0;;;35665:110:0::1;;;;;;;:::i;4432:104::-:0;4488:13;4521:7;4514:14;;;;;:::i;17067:104::-;17116:16;17152:11;17145:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17145:18:0;;;;;;;;;;;;;;;;;;;;;;17067:104;:::o;20509:353::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;20655:6:::1;::::0;-1:-1:-1;;;;;20655:6:0;;::::1;20647:14:::0;;::::1;::::0;20625:121:::1;;;::::0;-1:-1:-1;;;20625:121:0;;16724:2:1;20625:121:0::1;::::0;::::1;16706:21:1::0;16763:2;16743:18;;;16736:30;16802:34;16782:18;;;16775:62;16873:27;16853:18;;;16846:55;16918:19;;20625:121:0::1;16522:421:1::0;20625:121:0::1;20757:41;20786:4;20792:5;20757:28;:41::i;:::-;20814:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20814:40:0;::::1;::::0;::::1;::::0;;;::::1;20509:353:::0;;:::o;34089:84::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;34144:14:::1;:21:::0;;-1:-1:-1;;34144:21:0::1;34161:4;34144:21;::::0;;34089:84::o;6439:482::-;474:10;6559:4;6608:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6608:34:0;;;;;;;;;;6675:35;;;;6653:122;;;;-1:-1:-1;;;6653:122:0;;17150:2:1;6653:122:0;;;17132:21:1;17189:2;17169:18;;;17162:30;17228:34;17208:18;;;17201:62;-1:-1:-1;;;17279:18:1;;;17272:35;17324:19;;6653:122:0;16948:401:1;6653:122:0;6811:67;474:10;6834:7;6862:15;6843:16;:34;6811:8;:67::i;:::-;-1:-1:-1;6909:4:0;;6439:482;-1:-1:-1;;;6439:482:0:o;4946:216::-;5068:4;5090:42;474:10;5114:9;5125:6;5090:9;:42::i;22901:182::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22986:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22986:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23041:34;;154:41:1;;;23041:34:0::1;::::0;127:18:1;23041:34:0::1;;;;;;;22901:182:::0;;:::o;21478:364::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;21635:17:::1;:34:::0;;;21680:16:::1;:32:::0;;;21723:15:::1;:30:::0;;;21741:12;21780:36:::1;21699:13:::0;21655:14;21780:36:::1;:::i;:::-;:54;;;;:::i;:::-;21764:13;:70:::0;-1:-1:-1;;;21478:364:0:o;18971:461::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;19111:4:::1;19103;19082:13;4733:12:::0;;;4645:108;19082:13:::1;:17;::::0;19098:1:::1;19082:17;:::i;:::-;19081:26;;;;:::i;:::-;19080:35;;;;:::i;:::-;19070:6;:45;;19048:139;;;::::0;-1:-1:-1;;;19048:139:0;;17556:2:1;19048:139:0::1;::::0;::::1;17538:21:1::0;17595:2;17575:18;;;17568:30;17634:34;17614:18;;;17607:62;-1:-1:-1;;;17685:18:1;;;17678:42;17737:19;;19048:139:0::1;17354:408:1::0;19048:139:0::1;19260:4;19253:3;19232:13;4733:12:::0;;;4645:108;19232:13:::1;:17;::::0;19248:1:::1;19232:17;:::i;:::-;19231:25;;;;:::i;:::-;19230:34;;;;:::i;:::-;19220:6;:44;;19198:137;;;::::0;-1:-1:-1;;;19198:137:0;;17969:2:1;19198:137:0::1;::::0;::::1;17951:21:1::0;18008:2;17988:18;;;17981:30;18047:34;18027:18;;;18020:62;-1:-1:-1;;;18098:18:1;;;18091:41;18149:19;;19198:137:0::1;17767:407:1::0;19198:137:0::1;19358:17;:6:::0;19368::::1;19358:17;:::i;:::-;19346:9;:29:::0;;;19391:33:::1;::::0;2024:25:1;;;19391:33:0::1;::::0;2012:2:1;1997:18;19391:33:0::1;1878:177:1::0;19502:428:0;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;19642:6:::1;19621:13;4733:12:::0;;;4645:108;19621:13:::1;:17;::::0;19637:1:::1;19621:17;:::i;:::-;19620:28;;;;:::i;:::-;19607:9;:41;;19585:144;;;::::0;-1:-1:-1;;;19585:144:0;;18381:2:1;19585:144:0::1;::::0;::::1;18363:21:1::0;18420:2;18400:18;;;18393:30;18459:34;18439:18;;;18432:62;-1:-1:-1;;;18510:18:1;;;18503:51;18571:19;;19585:144:0::1;18179:417:1::0;19585:144:0::1;19797:4;19776:13;4733:12:::0;;;4645:108;19776:13:::1;:17;::::0;19792:1:::1;19776:17;:::i;:::-;19775:26;;;;:::i;:::-;19762:9;:39;;19740:141;;;::::0;-1:-1:-1;;;19740:141:0;;18803:2:1;19740:141:0::1;::::0;::::1;18785:21:1::0;18842:2;18822:18;;;18815:30;18881:34;18861:18;;;18854:62;-1:-1:-1;;;18932:18:1;;;18925:50;18992:19;;19740:141:0::1;18601:416:1::0;19740:141:0::1;19892:18;:30:::0;19502:428::o;18502:461::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;18640:4:::1;18632;18611:13;4733:12:::0;;;4645:108;18611:13:::1;:17;::::0;18627:1:::1;18611:17;:::i;:::-;18610:26;;;;:::i;:::-;18609:35;;;;:::i;:::-;18599:6;:45;;18577:137;;;::::0;-1:-1:-1;;;18577:137:0;;19224:2:1;18577:137:0::1;::::0;::::1;19206:21:1::0;19263:2;19243:18;;;19236:30;19302:34;19282:18;;;19275:62;-1:-1:-1;;;19353:18:1;;;19346:40;19403:19;;18577:137:0::1;19022:406:1::0;18577:137:0::1;18787:4;18780:3;18759:13;4733:12:::0;;;4645:108;18759:13:::1;:17;::::0;18775:1:::1;18759:17;:::i;:::-;18758:25;;;;:::i;:::-;18757:34;;;;:::i;:::-;18747:6;:44;;18725:135;;;::::0;-1:-1:-1;;;18725:135:0;;19635:2:1;18725:135:0::1;::::0;::::1;19617:21:1::0;19674:2;19654:18;;;19647:30;19713:34;19693:18;;;19686:62;-1:-1:-1;;;19764:18:1;;;19757:39;19813:19;;18725:135:0::1;19433:405:1::0;18725:135:0::1;18887:17;:6:::0;18897::::1;18887:17;:::i;:::-;18871:13;:33:::0;;;18920:35:::1;::::0;2024:25:1;;;18920:35:0::1;::::0;2012:2:1;1997:18;18920:35:0::1;1878:177:1::0;17931:98:0;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;17993:20:::1;:28:::0;;-1:-1:-1;;17993:28:0::1;::::0;;17931:98::o;11494:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11494:28:0;;-1:-1:-1;11494:28:0;:::o;9128:281::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9231:22:0;::::1;9209:110;;;::::0;-1:-1:-1;;;9209:110:0;;20045:2:1;9209:110:0::1;::::0;::::1;20027:21:1::0;20084:2;20064:18;;;20057:30;20123:34;20103:18;;;20096:62;-1:-1:-1;;;20174:18:1;;;20167:36;20220:19;;9209:110:0::1;19843:402:1::0;9209:110:0::1;9356:6;::::0;9335:38:::1;::::0;-1:-1:-1;;;;;9335:38:0;;::::1;::::0;9356:6:::1;::::0;9335:38:::1;::::0;9356:6:::1;::::0;9335:38:::1;9384:6;:17:::0;;-1:-1:-1;;;;;;9384:17:0::1;-1:-1:-1::0;;;;;9384:17:0;;;::::1;::::0;;;::::1;::::0;;9128:281::o;32666:185::-;8768:6;;-1:-1:-1;;;;;8768:6:0;474:10;8768:22;8760:67;;;;-1:-1:-1;;;8760:67:0;;;;;;;:::i;:::-;32761:82:::1;::::0;32724:12:::1;::::0;32769:10:::1;::::0;32793:21:::1;::::0;32724:12;32761:82;32724:12;32761:82;32793:21;32769:10;32761:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;32666:185:0:o;7910:380::-;-1:-1:-1;;;;;8046:19:0;;8038:68;;;;-1:-1:-1;;;8038:68:0;;20662:2:1;8038:68:0;;;20644:21:1;20701:2;20681:18;;;20674:30;20740:34;20720:18;;;20713:62;-1:-1:-1;;;20791:18:1;;;20784:34;20835:19;;8038:68:0;20460:400:1;8038:68:0;-1:-1:-1;;;;;8125:21:0;;8117:68;;;;-1:-1:-1;;;8117:68:0;;21067:2:1;8117:68:0;;;21049:21:1;21106:2;21086:18;;;21079:30;21145:34;21125:18;;;21118:62;-1:-1:-1;;;21196:18:1;;;21189:32;21238:19;;8117:68:0;20865:398:1;8117:68:0;-1:-1:-1;;;;;8198:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8250:32;;2024:25:1;;;8250:32:0;;1997:18:1;8250:32:0;;;;;;;7910:380;;;:::o;23091:6122::-;-1:-1:-1;;;;;23223:18:0;;23215:68;;;;-1:-1:-1;;;23215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23302:16:0;;23294:64;;;;-1:-1:-1;;;23294:64:0;;;;;;;:::i;:::-;23386:1;23377:6;:10;23369:52;;;;-1:-1:-1;;;23369:52:0;;22280:2:1;23369:52:0;;;22262:21:1;22319:2;22299:18;;;22292:30;22358:31;22338:18;;;22331:59;22407:18;;23369:52:0;22078:353:1;23369:52:0;23439:13;;;;;;;23434:183;;-1:-1:-1;;;;;23495:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23524:23:0;;;;;;:19;:23;;;;;;;;23495:52;23469:136;;;;-1:-1:-1;;;23469:136:0;;22638:2:1;23469:136:0;;;22620:21:1;22677:2;22657:18;;;22650:30;-1:-1:-1;;;22696:18:1;;;22689:52;22758:18;;23469:136:0;22436:346:1;23469:136:0;29316:18;;29301:12;:33;23633:26;:43;;;;-1:-1:-1;23663:13:0;;;;;;;23633:43;23629:268;;;-1:-1:-1;;;;;23720:17:0;;;;;;:11;:17;;;;;;;;23719:18;;:35;;-1:-1:-1;8706:6:0;;-1:-1:-1;;;;;23741:13:0;;;8706:6;;23741:13;23719:35;:60;;;-1:-1:-1;;;;;;23758:21:0;;23772:6;23758:21;23719:60;23693:192;;;;-1:-1:-1;;;23693:192:0;;22989:2:1;23693:192:0;;;22971:21:1;23028:2;23008:18;;;23001:30;23067:34;23047:18;;;23040:62;23138:34;23118:18;;;23111:62;-1:-1:-1;;;23189:19:1;;;23182:37;23236:19;;23693:192:0;22787:474:1;23693:192:0;23913:14;;;;23909:2217;;;8706:6;;-1:-1:-1;;;;;23966:15:0;;;8706:6;;23966:15;;;;:49;;-1:-1:-1;8706:6:0;;-1:-1:-1;;;;;24002:13:0;;;8706:6;;24002:13;;23966:49;:91;;;;-1:-1:-1;;;;;;24036:21:0;;24050:6;24036:21;;23966:91;:138;;;;-1:-1:-1;;;;;;24079:25:0;;;;;;:19;:25;;;;;;;;24078:26;23966:138;:183;;;;-1:-1:-1;;;;;;24126:23:0;;;;;;:19;:23;;;;;;;;24125:24;23966:183;23944:2171;;;24188:20;;;;24184:692;;;24251:9;;-1:-1:-1;;;;;24237:24:0;;;24251:9;;24237:24;;;;:49;;-1:-1:-1;24279:6:0;;-1:-1:-1;;;;;24265:21:0;;;24279:6;;24265:21;;24237:49;24233:624;;;24428:16;24443:1;24428:12;:16;:::i;:::-;24382:9;24353:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;24549:16:0;24564:1;24549:12;:16;:::i;:::-;-1:-1:-1;;;;;24481:32:0;;;;;;:28;:32;;;;;;:84;24353:212;24315:363;;;;-1:-1:-1;;;24315:363:0;;23601:2:1;24315:363:0;;;23583:21:1;23640:2;23620:18;;;23613:30;23679:34;23659:18;;;23652:62;-1:-1:-1;;;23730:18:1;;;23723:51;23791:19;;24315:363:0;23399:417:1;24315:363:0;24734:9;24705:39;;;;:28;:39;;;;;;24747:12;24705:54;;;;-1:-1:-1;;;;;24786:32:0;;;;;;:47;24233:624;-1:-1:-1;;;;;24950:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;25007:35:0;;;;;;:31;:35;;;;;;;;25006:36;24950:92;24924:1176;;;25129:12;;25119:6;:22;;25085:148;;;;-1:-1:-1;;;25085:148:0;;24023:2:1;25085:148:0;;;24005:21:1;24062:2;24042:18;;;24035:30;24101:34;24081:18;;;24074:62;-1:-1:-1;;;24152:18:1;;;24145:38;24200:19;;25085:148:0;23821:404:1;25085:148:0;25316:9;;-1:-1:-1;;;;;4912:18:0;;4880:7;4912:18;;;;;;;;;;;25290:22;;:6;:22;:::i;:::-;:35;;25256:140;;;;-1:-1:-1;;;25256:140:0;;24432:2:1;25256:140:0;;;24414:21:1;24471:2;24451:18;;;24444:30;-1:-1:-1;;;24490:18:1;;;24483:49;24549:18;;25256:140:0;24230:343:1;25256:140:0;24924:1176;;;-1:-1:-1;;;;;25494:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;25549:37:0;;;;;;:31;:37;;;;;;;;25548:38;25494:92;25468:632;;;25637:14;;;;25629:46;;;;-1:-1:-1;;;25629:46:0;;24780:2:1;25629:46:0;;;24762:21:1;24819:2;24799:18;;;24792:30;-1:-1:-1;;;24838:18:1;;;24831:49;24897:18;;25629:46:0;24578:343:1;25629:46:0;25742:13;;25732:6;:23;;25698:151;;;;-1:-1:-1;;;25698:151:0;;25128:2:1;25698:151:0;;;25110:21:1;25167:2;25147:18;;;25140:30;25206:34;25186:18;;;25179:62;-1:-1:-1;;;25257:18:1;;;25250:40;25307:19;;25698:151:0;24926:406:1;25468:632:0;-1:-1:-1;;;;;25880:35:0;;;;;;:31;:35;;;;;;;;25875:225;;26000:9;;-1:-1:-1;;;;;4912:18:0;;4880:7;4912:18;;;;;;;;;;;25974:22;;:6;:22;:::i;:::-;:35;;25940:140;;;;-1:-1:-1;;;25940:140:0;;24432:2:1;25940:140:0;;;24414:21:1;24471:2;24451:18;;;24444:30;-1:-1:-1;;;24490:18:1;;;24483:49;24549:18;;25940:140:0;24230:343:1;25940:140:0;26187:4;26138:28;4912:18;;;;;;;;;;;26245;;26221:42;;;;;;;26294:22;;-1:-1:-1;26305:11:0;;;;;;;26294:22;:35;;;;-1:-1:-1;26321:8:0;;-1:-1:-1;;;26321:8:0;;;;26320:9;26294:35;:68;;;;-1:-1:-1;;;;;;26333:29:0;;;;;;:25;:29;;;;;;;;26294:68;26276:196;;;26389:8;:15;;-1:-1:-1;;;;26389:15:0;-1:-1:-1;;;26389:15:0;;;26419:10;:8;:10::i;:::-;26444:8;:16;;-1:-1:-1;;;;26444:16:0;;;26276:196;-1:-1:-1;;;;;26603:25:0;;26484:12;26603:25;;;:19;:25;;;;;;26499:4;;26603:25;;;:52;;-1:-1:-1;;;;;;26632:23:0;;;;;;:19;:23;;;;;;;;26603:52;26599:100;;;-1:-1:-1;26682:5:0;26599:100;26711:12;26816:7;26812:2348;;;29316:18;;29301:12;:33;26899:152;;;;26975:8;26960:12;;:23;;;;:::i;:::-;26950:6;:33;;:100;;;;;27038:12;27012:18;;27033:1;27012:22;;;;:::i;:::-;:38;;26950:100;26898:206;;;;-1:-1:-1;;;;;;27073:31:0;;;;;;:25;:31;;;;;;;;26898:206;:257;;;;-1:-1:-1;;;;;;27126:29:0;;;;;;:25;:29;;;;;;;;27125:30;26898:257;:302;;;;-1:-1:-1;;;;;;27177:23:0;;;;;;:19;:23;;;;;;;;27176:24;26898:302;:339;;;;;27236:1;27221:12;;:16;26898:339;26876:2135;;;29316:18;;29301:12;:33;27272:332;;27583:1;27567:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27272:332:0;-1:-1:-1;;;;;27629:15:0;;;;;;:11;:15;;;;;;;;27624:216;;-1:-1:-1;;;;;27669:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;27669:22:0;27687:4;27669:22;;;;;;27714:10;:15;;27687:4;;27714:10;;:15;;27687:4;;27714:15;:::i;:::-;;;;-1:-1:-1;;27752:11:0;:20;;;;;;;-1:-1:-1;27752:20:0;;;;;;;;-1:-1:-1;;;;;;27752:20:0;-1:-1:-1;;;;;27752:20:0;;;;;;;;27800;;923:51:1;;;27800:20:0;;911:2:1;896:18;27800:20:0;;;;;;;27624:216;27883:3;27868:11;:6;27877:2;27868:11;:::i;:::-;27867:19;;;;:::i;:::-;27860:26;;27954:12;;27935:15;;27928:4;:22;;;;:::i;:::-;27927:39;;;;:::i;:::-;27905:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28036:12:0;;28016:16;;28009:23;;:4;:23;:::i;:::-;28008:40;;;;:::i;:::-;27985:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28114:12:0;;28096:14;;28089:21;;:4;:21;:::i;:::-;28088:38;;;;:::i;:::-;28067:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;26876:2135:0;;-1:-1:-1;26876:2135:0;;-1:-1:-1;;;;;28189:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28238:1;28222:13;;:17;28189:50;28185:826;;;28294:3;28277:13;;28268:6;:22;;;;:::i;:::-;28267:30;;;;:::i;:::-;28260:37;;28366:13;;28346:16;;28339:4;:23;;;;:::i;:::-;28338:41;;;;:::i;:::-;28316:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28492:13:0;;28450:17;;28443:24;;:4;:24;:::i;:::-;28442:63;;;;:::i;:::-;28398:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;28572:13:0;;28553:15;;28546:22;;:4;:22;:::i;28185:826::-;-1:-1:-1;;;;;28647:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28697:1;28682:12;;:16;28647:51;28643:368;;;28752:3;28736:12;;28727:6;:21;;;;:::i;:::-;28726:29;;;;:::i;:::-;28719:36;;28823:12;;28804:15;;28797:4;:22;;;;:::i;:::-;28796:39;;;;:::i;:::-;28774:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28905:12:0;;28885:16;;28878:23;;:4;:23;:::i;:::-;28877:40;;;;:::i;:::-;28854:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28983:12:0;;28965:14;;28958:21;;:4;:21;:::i;:::-;28957:38;;;;:::i;:::-;28936:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28643:368:0;29031:8;;29027:91;;29060:42;29076:4;29090;29097;29060:15;:42::i;:::-;29134:14;29144:4;29134:14;;:::i;:::-;;;26812:2348;29172:33;29188:4;29194:2;29198:6;29172:15;:33::i;:::-;23204:6009;;;;23091:6122;;;:::o;30446:1575::-;30529:4;30485:23;4912:18;;;;;;;;;;;30485:50;;30546:25;30643:17;;30608:19;;30574:18;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;30546:114;-1:-1:-1;30677:20:0;;;:46;;-1:-1:-1;30701:22:0;;30677:46;30673:85;;;30740:7;;30446:1575::o;30673:85::-;30792:18;;:23;;30813:2;30792:23;:::i;:::-;30774:15;:41;30770:115;;;30850:18;;:23;;30871:2;30850:23;:::i;:::-;30832:41;;30770:115;30897:12;30971:23;31084:1;31051:17;31016:18;;30998:15;:36;;;;:::i;:::-;30997:71;;;;:::i;:::-;:88;;;;:::i;:::-;30971:114;-1:-1:-1;31098:51:0;31115:33;30971:114;31115:15;:33;:::i;:::-;31098:16;:51::i;:::-;31363:18;;31183:21;;;;31162:18;;31363:22;;31384:1;;31363:22;:::i;:::-;31342:44;;:17;:44;:::i;:::-;31305:19;;31292:32;;:10;:32;:::i;:::-;31291:96;;;;:::i;:::-;31264:123;;31398:22;31514:1;31493:18;;:22;;;;:::i;:::-;31472:44;;:17;:44;:::i;:::-;31437:17;;31424:30;;:10;:30;:::i;:::-;31423:94;;;;:::i;:::-;31398:119;-1:-1:-1;31549:33:0;31398:119;31549:16;:33;:::i;:::-;31530:52;;;;:::i;:::-;31616:1;31595:18;:22;;;31628:19;:23;;;31662:17;:21;31530:52;-1:-1:-1;31700:19:0;;;;;:42;;;31741:1;31723:15;:19;31700:42;31696:121;;;31759:46;31772:15;31789;31759:12;:46::i;:::-;31851:15;;31843:56;;-1:-1:-1;;;;;31851:15:0;;;;31880:14;;31843:56;;;;31880:14;31851:15;31843:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31932:17:0;;31924:89;;31829:70;;-1:-1:-1;;;;;;31932:17:0;;31977:21;;31924:89;;;;31977:21;31932:17;31924:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30446:1575:0:o;20870:236::-;-1:-1:-1;;;;;20953:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20953:39:0;;;;;;;21003;20953:31;:39;21003:26;:39::i;6929:651::-;-1:-1:-1;;;;;7069:20:0;;7061:70;;;;-1:-1:-1;;;7061:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7150:23:0;;7142:71;;;;-1:-1:-1;;;7142:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7250:17:0;;7226:21;7250:17;;;;;;;;;;;7300:23;;;;7278:111;;;;-1:-1:-1;;;7278:111:0;;25539:2:1;7278:111:0;;;25521:21:1;25578:2;25558:18;;;25551:30;25617:34;25597:18;;;25590:62;-1:-1:-1;;;25668:18:1;;;25661:36;25714:19;;7278:111:0;25337:402:1;7278:111:0;-1:-1:-1;;;;;7425:17:0;;;:9;:17;;;;;;;;;;;7445:22;;;7425:42;;7489:20;;;;;;;;:30;;7461:6;;7425:9;7489:30;;7461:6;;7489:30;:::i;:::-;;;;;;;;7554:9;-1:-1:-1;;;;;7537:35:0;7546:6;-1:-1:-1;;;;;7537:35:0;;7565:6;7537:35;;;;2024:25:1;;2012:2;1997:18;;1878:177;7537:35:0;;;;;;;;7050:530;6929:651;;;:::o;29350:571::-;29500:16;;;29514:1;29500:16;;;;;;;;29476:21;;29500:16;;;;;;;;;;-1:-1:-1;29500:16:0;29476:40;;29545:4;29527;29532:1;29527:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29527:23:0;;;:7;;;;;;;;;;:23;;;;29571:9;;:16;;;-1:-1:-1;;;29571:16:0;;;;:9;;;;;:14;;:16;;;;;29527:7;;29571:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29561:4;29566:1;29561:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29561:26:0;;;:7;;;;;;;;;:26;29632:9;;29600:56;;29617:4;;29632:9;29644:11;29600:8;:56::i;:::-;29695:9;;:218;;-1:-1:-1;;;29695:218:0;;-1:-1:-1;;;;;29695:9:0;;;;:60;;:218;;29770:11;;29695:9;;29840:4;;29867;;29887:15;;29695:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29405:516;29350:571;:::o;29929:509::-;30109:9;;30077:56;;30094:4;;-1:-1:-1;;;;;30109:9:0;30121:11;30077:8;:56::i;:::-;30176:9;;:254;;-1:-1:-1;;;30176:254:0;;-1:-1:-1;;;;;30176:9:0;;;;:25;;30209:9;;30176:254;;30242:4;;30262:11;;30176:9;;;;30382:6;;30404:15;;30176:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19938:221::-;-1:-1:-1;;;;;20040:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20040:52:0;;;;;;;;;;20108:43;;27942:51:1;;;28009:18;;;28002:50;20108:43:0;;27915:18:1;20108:43:0;;;;;;;19938:221;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;985:131::-;-1:-1:-1;;;;;1060:31:1;;1050:42;;1040:70;;1106:1;1103;1096:12;1040:70;985:131;:::o;1121:315::-;1189:6;1197;1250:2;1238:9;1229:7;1225:23;1221:32;1218:52;;;1266:1;1263;1256:12;1218:52;1305:9;1292:23;1324:31;1349:5;1324:31;:::i;:::-;1374:5;1426:2;1411:18;;;;1398:32;;-1:-1:-1;;;1121:315:1:o;1441:180::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;-1:-1:-1;1592:23:1;;1441:180;-1:-1:-1;1441:180:1:o;1626:247::-;1685:6;1738:2;1726:9;1717:7;1713:23;1709:32;1706:52;;;1754:1;1751;1744:12;1706:52;1793:9;1780:23;1812:31;1837:5;1812:31;:::i;:::-;1862:5;1626:247;-1:-1:-1;;;1626:247:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:248::-;2986:6;2994;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;-1:-1:-1;;3086:23:1;;;3156:2;3141:18;;;3128:32;;-1:-1:-1;2918:248:1:o;3171:118::-;3257:5;3250:13;3243:21;3236:5;3233:32;3223:60;;3279:1;3276;3269:12;3294:382;3359:6;3367;3420:2;3408:9;3399:7;3395:23;3391:32;3388:52;;;3436:1;3433;3426:12;3388:52;3475:9;3462:23;3494:31;3519:5;3494:31;:::i;:::-;3544:5;-1:-1:-1;3601:2:1;3586:18;;3573:32;3614:30;3573:32;3614:30;:::i;:::-;3663:7;3653:17;;;3294:382;;;;;:::o;3681:241::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:52;;;3806:1;3803;3796:12;3758:52;3845:9;3832:23;3864:28;3886:5;3864:28;:::i;3927:316::-;4004:6;4012;4020;4073:2;4061:9;4052:7;4048:23;4044:32;4041:52;;;4089:1;4086;4079:12;4041:52;-1:-1:-1;;4112:23:1;;;4182:2;4167:18;;4154:32;;-1:-1:-1;4233:2:1;4218:18;;;4205:32;;3927:316;-1:-1:-1;3927:316:1:o;4248:388::-;4316:6;4324;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4432:9;4419:23;4451:31;4476:5;4451:31;:::i;:::-;4501:5;-1:-1:-1;4558:2:1;4543:18;;4530:32;4571:33;4530:32;4571:33;:::i;4641:461::-;4694:3;4732:5;4726:12;4759:6;4754:3;4747:19;4785:4;4814:2;4809:3;4805:12;4798:19;;4851:2;4844:5;4840:14;4872:1;4882:195;4896:6;4893:1;4890:13;4882:195;;;4961:13;;-1:-1:-1;;;;;4957:39:1;4945:52;;5017:12;;;;5052:15;;;;4993:1;4911:9;4882:195;;;-1:-1:-1;5093:3:1;;4641:461;-1:-1:-1;;;;;4641:461:1:o;5107:261::-;5286:2;5275:9;5268:21;5249:4;5306:56;5358:2;5347:9;5343:18;5335:6;5306:56;:::i;5373:380::-;5452:1;5448:12;;;;5495;;;5516:61;;5570:4;5562:6;5558:17;5548:27;;5516:61;5623:2;5615:6;5612:14;5592:18;5589:38;5586:161;;5669:10;5664:3;5660:20;5657:1;5650:31;5704:4;5701:1;5694:15;5732:4;5729:1;5722:15;5586:161;;5373:380;;;:::o;5758:356::-;5960:2;5942:21;;;5979:18;;;5972:30;6038:34;6033:2;6018:18;;6011:62;6105:2;6090:18;;5758:356::o;6119:184::-;6189:6;6242:2;6230:9;6221:7;6217:23;6213:32;6210:52;;;6258:1;6255;6248:12;6210:52;-1:-1:-1;6281:16:1;;6119:184;-1:-1:-1;6119:184:1:o;6661:127::-;6722:10;6717:3;6713:20;6710:1;6703:31;6753:4;6750:1;6743:15;6777:4;6774:1;6767:15;6793:168;6866:9;;;6897;;6914:15;;;6908:22;;6894:37;6884:71;;6935:18;;:::i;6966:217::-;7006:1;7032;7022:132;;7076:10;7071:3;7067:20;7064:1;7057:31;7111:4;7108:1;7101:15;7139:4;7136:1;7129:15;7022:132;-1:-1:-1;7168:9:1;;6966:217::o;7467:245::-;7534:6;7587:2;7575:9;7566:7;7562:23;7558:32;7555:52;;;7603:1;7600;7593:12;7555:52;7635:9;7629:16;7654:28;7676:5;7654:28;:::i;7717:607::-;-1:-1:-1;;;;;8076:15:1;;;8058:34;;8123:2;8108:18;;8101:34;;;;8166:2;8151:18;;8144:34;;;;8209:2;8194:18;;8187:34;;;;8258:15;;;8252:3;8237:19;;8230:44;8038:3;8290:19;;8283:35;;;;8007:3;7992:19;;7717:607::o;8329:245::-;8408:6;8416;8469:2;8457:9;8448:7;8444:23;8440:32;8437:52;;;8485:1;8482;8475:12;8437:52;-1:-1:-1;;8508:16:1;;8564:2;8549:18;;;8543:25;8508:16;;8543:25;;-1:-1:-1;8329:245:1:o;11762:125::-;11827:9;;;11848:10;;;11845:36;;;11861:18;;:::i;11892:402::-;12094:2;12076:21;;;12133:2;12113:18;;;12106:30;12172:34;12167:2;12152:18;;12145:62;-1:-1:-1;;;12238:2:1;12223:18;;12216:36;12284:3;12269:19;;11892:402::o;14926:403::-;15128:2;15110:21;;;15167:2;15147:18;;;15140:30;15206:34;15201:2;15186:18;;15179:62;-1:-1:-1;;;15272:2:1;15257:18;;15250:37;15319:3;15304:19;;14926:403::o;21268:401::-;21470:2;21452:21;;;21509:2;21489:18;;;21482:30;21548:34;21543:2;21528:18;;21521:62;-1:-1:-1;;;21614:2:1;21599:18;;21592:35;21659:3;21644:19;;21268:401::o;21674:399::-;21876:2;21858:21;;;21915:2;21895:18;;;21888:30;21954:34;21949:2;21934:18;;21927:62;-1:-1:-1;;;22020:2:1;22005:18;;21998:33;22063:3;22048:19;;21674:399::o;23266:128::-;23333:9;;;23354:11;;;23351:37;;;23368:18;;:::i;25876:127::-;25937:10;25932:3;25928:20;25925:1;25918:31;25968:4;25965:1;25958:15;25992:4;25989:1;25982:15;26008:251;26078:6;26131:2;26119:9;26110:7;26106:23;26102:32;26099:52;;;26147:1;26144;26137:12;26099:52;26179:9;26173:16;26198:31;26223:5;26198:31;:::i;26264:582::-;26563:6;26552:9;26545:25;26606:6;26601:2;26590:9;26586:18;26579:34;26649:3;26644:2;26633:9;26629:18;26622:31;26526:4;26670:57;26722:3;26711:9;26707:19;26699:6;26670:57;:::i;:::-;-1:-1:-1;;;;;26763:32:1;;;;26758:2;26743:18;;26736:60;-1:-1:-1;26827:3:1;26812:19;26805:35;26662:65;26264:582;-1:-1:-1;;;26264:582:1:o;27463:306::-;27551:6;27559;27567;27620:2;27608:9;27599:7;27595:23;27591:32;27588:52;;;27636:1;27633;27626:12;27588:52;27665:9;27659:16;27649:26;;27715:2;27704:9;27700:18;27694:25;27684:35;;27759:2;27748:9;27744:18;27738:25;27728:35;;27463:306;;;;;:::o

Swarm Source

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