ETH Price: $2,636.15 (+1.76%)

Token

StarShip (SSHIP)
 

Overview

Max Total Supply

100,000,000 SSHIP

Holders

370 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$29,221.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000005727663 SSHIP

Value
$0.00 ( ~0 Eth) [0.0000%]
0x5482a56f033b28fc392ef1e8fbfc110db2f8eca6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

$SSHIP Starship is a launched with Elon's SpaceX StarShip hype.

Market

Volume (24H):$83.22
Market Capitalization:$0.00
Circulating Supply:0.00 SSHIP
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StarShip

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-31
*/

// SPDX-License-Identifier: MIT

// website: https://StarShipERC.com 


pragma solidity 0.8.9;
 


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

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

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

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

    
   
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

   
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


interface IUniswapV2Router01 {
    function factory() external pure returns(address);
    function WETH() external pure returns(address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract StarShip is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // 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 marketPair;
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("StarShip", "SSHIP") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e8 * 1e18;

        maxBuyAmount = totalSupply * 100 / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply * 100 / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 100 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 5;
        _fees.buyLiquidityFee = 1;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 5;
        _fees.sellLiquidityFee = 1;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


        marketingWallet = address(0x87670f1DABe62471ADCA5A748E2b9ab3A007Dd65);
        devWallet = address(0x9de5F31Cb17654a40c9BfbF8C37E73E75f0bf701);

        // exclude from paying fees or having max transaction amount

        /*
            _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 swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }


    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

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

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

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

    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

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

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


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


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

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

}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"excludeFromWalletLimit","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":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","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":[{"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":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600881526020017f53746172536869700000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f535348495000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f2b565b5080600490805190602001906200024b92919062000f2b565b50505060006200026062000be060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062001045565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062001045565b6040518363ffffffff1660e01b81526004016200048a92919062001088565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062001045565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000be860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000be860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000be860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1260201b60201c565b5060006a52b7d2dcc80cd2e40000009050606480826200090d9190620010ee565b6200091991906200117e565b600881905550606480826200092f9190620010ee565b6200093b91906200117e565b60098190555060648082620009519190620010ee565b6200095d91906200117e565b600a81905550612710600182620009759190620010ee565b6200098191906200117e565b600b819055506005600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506000600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a299190620011c3565b62000a359190620011c3565b600d60000160006101000a81548160ff021916908360ff1602179055506005600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff1602179055506000600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af49190620011c3565b62000b009190620011c3565b600d60000160046101000a81548160ff021916908360ff1602179055507387670f1dabe62471adca5a748e2b9ab3a007dd65600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739de5f31cb17654a40c9bfbf8c37e73e75f0bf701600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bd9338262000c4060201b60201c565b50620013e6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3662000c2862000be060201b60201c565b848462000ddb60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000caa9062001262565b60405180910390fd5b62000ccf8160025462000ec860201b62001fc21790919060201c565b60028190555062000d2d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ec860201b62001fc21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dcf919062001295565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ebb919062001295565b60405180910390a3505050565b600080828462000ed99190620012b2565b90508381101562000f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f18906200135f565b60405180910390fd5b8091505092915050565b82805462000f3990620013b0565b90600052602060002090601f01602090048101928262000f5d576000855562000fa9565b82601f1062000f7857805160ff191683800117855562000fa9565b8280016001018555821562000fa9579182015b8281111562000fa857825182559160200191906001019062000f8b565b5b50905062000fb8919062000fbc565b5090565b5b8082111562000fd757600081600090555060010162000fbd565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200100d8262000fe0565b9050919050565b6200101f8162001000565b81146200102b57600080fd5b50565b6000815190506200103f8162001014565b92915050565b6000602082840312156200105e576200105d62000fdb565b5b60006200106e848285016200102e565b91505092915050565b620010828162001000565b82525050565b60006040820190506200109f600083018562001077565b620010ae602083018462001077565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010fb82620010b5565b91506200110883620010b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011445762001143620010bf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118b82620010b5565b91506200119883620010b5565b925082620011ab57620011aa6200114f565b5b828204905092915050565b600060ff82169050919050565b6000620011d082620011b6565b9150620011dd83620011b6565b92508260ff03821115620011f657620011f5620010bf565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124a601f8362001201565b9150620012578262001212565b602082019050919050565b600060208201905081810360008301526200127d816200123b565b9050919050565b6200128f81620010b5565b82525050565b6000602082019050620012ac600083018462001284565b92915050565b6000620012bf82620010b5565b9150620012cc83620010b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013045762001303620010bf565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001347601b8362001201565b915062001354826200130f565b602082019050919050565b600060208201905081810360008301526200137a8162001338565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013c957607f821691505b60208210811415620013e057620013df62001381565b5b50919050565b60805160a051614744620014366000396000818161102d0152611866015260008181611fa00152818161329301528181613383015281816133aa01528181613446015261346d01526147446000f3fe60806040526004361061021e5760003560e01c80638da5cb5b11610123578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461080f578063e16830a81461084c578063f2fde38b14610875578063f5b3c3bf1461089e578063f887ea40146108db57610225565b8063c024666814610739578063c16dd4a414610762578063c18bc1951461078b578063d212a69a146107b4578063d3f6a157146107e657610225565b80639fccce32116100f25780639fccce3214610652578063a457c2d71461067d578063a9059cbb146106ba578063b8863115146106f7578063b9e418e71461072257610225565b80638da5cb5b146105945780638ea5220f146105bf57806395d89b41146105ea57806396880b171461061557610225565b80633265e846116101a6578063555467a111610175578063555467a1146104af5780636ddd1713146104ec57806370a0823114610517578063715018a6146105545780637571336a1461056b57610225565b80633265e846146103e1578063395093511461040a57806349bd5a5e146104475780634fbee1931461047257610225565b806318160ddd116101ed57806318160ddd146102f85780631a8145bb146103235780631f3fed8f1461034e57806323b872dd14610379578063313ce567146103b657610225565b806306fdde031461022a578063095ea7b31461025557806310d5de531461029257806311a582c3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610906565b60405161024c9190613625565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906136e0565b610998565b604051610289919061373b565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613756565b6109b6565b6040516102c6919061373b565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613783565b6109d6565b005b34801561030457600080fd5b5061030d610ba7565b60405161031a91906137d2565b60405180910390f35b34801561032f57600080fd5b50610338610bb1565b60405161034591906137d2565b60405180910390f35b34801561035a57600080fd5b50610363610bb7565b60405161037091906137d2565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906137ed565b610bbd565b6040516103ad919061373b565b60405180910390f35b3480156103c257600080fd5b506103cb610c96565b6040516103d8919061385c565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906138a3565b610c9f565b005b34801561041657600080fd5b50610431600480360381019061042c91906136e0565b610f78565b60405161043e919061373b565b60405180910390f35b34801561045357600080fd5b5061045c61102b565b604051610469919061393f565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613756565b61104f565b6040516104a6919061373b565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061395a565b6110a5565b6040516104e3919061373b565b60405180910390f35b3480156104f857600080fd5b5061050161114e565b60405161050e919061373b565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613756565b611161565b60405161054b91906137d2565b60405180910390f35b34801561056057600080fd5b506105696111a9565b005b34801561057757600080fd5b50610592600480360381019061058d91906139b3565b611301565b005b3480156105a057600080fd5b506105a96113f3565b6040516105b6919061393f565b60405180910390f35b3480156105cb57600080fd5b506105d461141d565b6040516105e1919061393f565b60405180910390f35b3480156105f657600080fd5b506105ff611443565b60405161060c9190613625565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613756565b6114d5565b604051610649919061373b565b60405180910390f35b34801561065e57600080fd5b506106676114f5565b60405161067491906137d2565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906136e0565b6114fb565b6040516106b1919061373b565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc91906136e0565b6115c8565b6040516106ee919061373b565b60405180910390f35b34801561070357600080fd5b5061070c6115e6565b604051610719919061373b565b60405180910390f35b34801561072e57600080fd5b506107376115f9565b005b34801561074557600080fd5b50610760600480360381019061075b91906139b3565b6116db565b005b34801561076e57600080fd5b50610789600480360381019061078491906139b3565b6117cd565b005b34801561079757600080fd5b506107b260048036038101906107ad919061395a565b61194e565b005b3480156107c057600080fd5b506107c9611a83565b6040516107dd9897969594939291906139f3565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190613a71565b611b21565b005b34801561081b57600080fd5b5061083660048036038101906108319190613a71565b611c3e565b60405161084391906137d2565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e91906139b3565b611cc5565b005b34801561088157600080fd5b5061089c60048036038101906108979190613756565b611db7565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613756565b611f7e565b6040516108d2919061373b565b60405180910390f35b3480156108e757600080fd5b506108f0611f9e565b6040516108fd9190613b10565b60405180910390f35b60606003805461091590613b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461094190613b5a565b801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050905090565b60006109ac6109a5612020565b8484612028565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6109de612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6490613bd8565b60405180910390fd5b6064610a77610ba7565b610a819190613c56565b6103e883610a8d610ba7565b610a979190613c87565b610aa19190613c56565b1015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990613d53565b60405180910390fd5b6064610aec610ba7565b610af69190613c56565b6103e882610b02610ba7565b610b0c9190613c87565b610b169190613c56565b1015610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613de5565b60405180910390fd5b6103e882610b63610ba7565b610b6d9190613c87565b610b779190613c56565b6008819055506103e881610b89610ba7565b610b939190613c87565b610b9d9190613c56565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610bca848484612113565b610c8b84610bd6612020565b610c86856040518060600160405280602881526020016146e760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3c612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b612028565b600190509392505050565b60006012905090565b610ca7612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613bd8565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610dd39190613e05565b610ddd9190613e05565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610e979190613e05565b610ea19190613e05565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90613e88565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6790613e88565b60405180910390fd5b505050505050565b6000611021610f85612020565b8461101c8560016000610f96612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc290919063ffffffff16565b612028565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006110af612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613bd8565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111b1612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611309612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90613bd8565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461145290613b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461147e90613b5a565b80156114cb5780601f106114a0576101008083540402835291602001916114cb565b820191906000526020600020905b8154815290600101906020018083116114ae57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b60006115be611508612020565b846115b98560405180606001604052806025815260200161469c6025913960016000611532612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b612028565b6001905092915050565b60006115dc6115d5612020565b8484612113565b6001905092915050565b600c60029054906101000a900460ff1681565b611601612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613bd8565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436116d39190613ea8565b601181905550565b6116e3612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613bd8565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117d5612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90613bd8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613f4a565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611956612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90613bd8565b60405180910390fd5b60646119ef610ba7565b6119f99190613c56565b6103e882611a05610ba7565b611a0f9190613c87565b611a199190613c56565b1015611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190613fdc565b60405180910390fd5b6103e881611a66610ba7565b611a709190613c87565b611a7a9190613c56565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611b29612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613bd8565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ccd612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613bd8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611dbf612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb59061406e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611fd19190613ea8565b905083811015612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906140da565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161210691906137d2565b60405180910390a3505050565b600081141561212d5761212883836000612c4d565b612be4565b6121356113f3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121a357506121736113f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121bc5750600c60029054906101000a900460ff16155b1561254257600c60009054906101000a900460ff166122b657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122765750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614146565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123595750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123a8576008548111156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906141b2565b60405180910390fd5b612497565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561244b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561249657600954811115612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061421e565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661254157600a546124f483611161565b826124ff9190613ea8565b1115612540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125379061428a565b60405180910390fd5b5b5b600061254d30611161565b90506000600b5482101590508080156125725750600c60019054906101000a900460ff165b801561258b5750600c60029054906101000a900460ff16155b80156125e05750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126365750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561268c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126d0576001600c60026101000a81548160ff0219169083151502179055506126b4612df7565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127865750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561279057600090505b8015612bd5576000601154431015612832576127c960646127bb6063886130e590919063ffffffff16565b61316090919063ffffffff16565b90506063605e826127da9190613c87565b6127e49190613c56565b600e60008282546127f59190613ea8565b92505081905550606360058261280b9190613c87565b6128159190613c56565b601060008282546128269190613ea8565b92505081905550612bb0565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128a057506000600d60000160049054906101000a900460ff1660ff16115b156129f2576128e060646128d2600d60000160049054906101000a900460ff1660ff16886130e590919063ffffffff16565b61316090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff16826129199190613c87565b6129239190613c56565b600f60008282546129349190613ea8565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826129729190613c87565b61297c9190613c56565b600e600082825461298d9190613ea8565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff16826129cb9190613c87565b6129d59190613c56565b601060008282546129e69190613ea8565b92505081905550612baf565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6057506000600d60000160009054906101000a900460ff1660ff16115b15612bae57612aa06064612a92600d60000160009054906101000a900460ff1660ff16886130e590919063ffffffff16565b61316090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612ad99190613c87565b612ae39190613c56565b600f6000828254612af49190613ea8565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612b329190613c87565b612b3c9190613c56565b600e6000828254612b4d9190613ea8565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612b8b9190613c87565b612b959190613c56565b60106000828254612ba69190613ea8565b925050819055505b5b5b6000811115612bc557612bc4873083612c4d565b5b8085612bd191906142aa565b9450505b612be0868686612c4d565b5050505b505050565b6000838311158290612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c289190613625565b60405180910390fd5b5060008385612c4091906142aa565b9050809150509392505050565b612cb8816040518060600160405280602681526020016146c1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dea91906137d2565b60405180910390a3505050565b6000612e0230611161565b90506000601054600e54600f54612e199190613ea8565b612e239190613ea8565b9050600080831480612e355750600082145b15612e42575050506130e3565b6014600b54612e519190613c87565b831115612e6a576014600b54612e679190613c87565b92505b6000600283600f5486612e7d9190613c87565b612e879190613c56565b612e919190613c56565b90506000612ea882866131aa90919063ffffffff16565b90506000479050612eb8826131f4565b6000612ecd82476131aa90919063ffffffff16565b90506000612ef887612eea600e54856130e590919063ffffffff16565b61316090919063ffffffff16565b90506000612f2388612f15601054866130e590919063ffffffff16565b61316090919063ffffffff16565b905060008183612f339190613ea8565b84612f3e91906142aa565b90506000600f819055506000600e819055506000601081905550600087118015612f685750600081115b15612fb157612f778782613440565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612fa89291906142de565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612ff691906142aa565b60405161300290614338565b60006040518083038185875af1925050503d806000811461303f576040519150601f19603f3d011682016040523d82523d6000602084013e613044565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161309090614338565b60006040518083038185875af1925050503d80600081146130cd576040519150601f19603f3d011682016040523d82523d6000602084013e6130d2565b606091505b505080985050505050505050505050505b565b6000808314156130f8576000905061315a565b600082846131069190613c87565b90508284826131159190613c56565b14613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c906143bf565b60405180910390fd5b809150505b92915050565b60006131a283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613529565b905092915050565b60006131ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be9565b905092915050565b6000600267ffffffffffffffff811115613211576132106143df565b5b60405190808252806020026020018201604052801561323f5781602001602082028036833780820191505090505b50905030816000815181106132575761325661440e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f757600080fd5b505afa15801561330b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332f9190614452565b816001815181106133435761334261440e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133a8307f000000000000000000000000000000000000000000000000000000000000000084612028565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161340a959493929190614578565b600060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b505050505050565b61346b307f000000000000000000000000000000000000000000000000000000000000000084612028565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016134d0969594939291906145d2565b6060604051808303818588803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135229190614648565b5050505050565b60008083118290613570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135679190613625565b60405180910390fd5b506000838561357f9190613c56565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135c65780820151818401526020810190506135ab565b838111156135d5576000848401525b50505050565b6000601f19601f8301169050919050565b60006135f78261358c565b6136018185613597565b93506136118185602086016135a8565b61361a816135db565b840191505092915050565b6000602082019050818103600083015261363f81846135ec565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136778261364c565b9050919050565b6136878161366c565b811461369257600080fd5b50565b6000813590506136a48161367e565b92915050565b6000819050919050565b6136bd816136aa565b81146136c857600080fd5b50565b6000813590506136da816136b4565b92915050565b600080604083850312156136f7576136f6613647565b5b600061370585828601613695565b9250506020613716858286016136cb565b9150509250929050565b60008115159050919050565b61373581613720565b82525050565b6000602082019050613750600083018461372c565b92915050565b60006020828403121561376c5761376b613647565b5b600061377a84828501613695565b91505092915050565b6000806040838503121561379a57613799613647565b5b60006137a8858286016136cb565b92505060206137b9858286016136cb565b9150509250929050565b6137cc816136aa565b82525050565b60006020820190506137e760008301846137c3565b92915050565b60008060006060848603121561380657613805613647565b5b600061381486828701613695565b935050602061382586828701613695565b9250506040613836868287016136cb565b9150509250925092565b600060ff82169050919050565b61385681613840565b82525050565b6000602082019050613871600083018461384d565b92915050565b61388081613840565b811461388b57600080fd5b50565b60008135905061389d81613877565b92915050565b60008060008060008060c087890312156138c0576138bf613647565b5b60006138ce89828a0161388e565b96505060206138df89828a0161388e565b95505060406138f089828a0161388e565b945050606061390189828a0161388e565b935050608061391289828a0161388e565b92505060a061392389828a0161388e565b9150509295509295509295565b6139398161366c565b82525050565b60006020820190506139546000830184613930565b92915050565b6000602082840312156139705761396f613647565b5b600061397e848285016136cb565b91505092915050565b61399081613720565b811461399b57600080fd5b50565b6000813590506139ad81613987565b92915050565b600080604083850312156139ca576139c9613647565b5b60006139d885828601613695565b92505060206139e98582860161399e565b9150509250929050565b600061010082019050613a09600083018b61384d565b613a16602083018a61384d565b613a23604083018961384d565b613a30606083018861384d565b613a3d608083018761384d565b613a4a60a083018661384d565b613a5760c083018561384d565b613a6460e083018461384d565b9998505050505050505050565b60008060408385031215613a8857613a87613647565b5b6000613a9685828601613695565b9250506020613aa785828601613695565b9150509250929050565b6000819050919050565b6000613ad6613ad1613acc8461364c565b613ab1565b61364c565b9050919050565b6000613ae882613abb565b9050919050565b6000613afa82613add565b9050919050565b613b0a81613aef565b82525050565b6000602082019050613b256000830184613b01565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7257607f821691505b60208210811415613b8657613b85613b2b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bc2602083613597565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c61826136aa565b9150613c6c836136aa565b925082613c7c57613c7b613bf8565b5b828204905092915050565b6000613c92826136aa565b9150613c9d836136aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cd657613cd5613c27565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613d3d602383613597565b9150613d4882613ce1565b604082019050919050565b60006020820190508181036000830152613d6c81613d30565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000613dcf602483613597565b9150613dda82613d73565b604082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b6000613e1082613840565b9150613e1b83613840565b92508260ff03821115613e3157613e30613c27565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613e72601d83613597565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b6000613eb3826136aa565b9150613ebe836136aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ef357613ef2613c27565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000613f34601783613597565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc6602283613597565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614058602683613597565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140c4601b83613597565b91506140cf8261408e565b602082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614130601683613597565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b600061419c601c83613597565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614208601d83613597565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614274601383613597565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b60006142b5826136aa565b91506142c0836136aa565b9250828210156142d3576142d2613c27565b5b828203905092915050565b60006040820190506142f360008301856137c3565b61430060208301846137c3565b9392505050565b600081905092915050565b50565b6000614322600083614307565b915061432d82614312565b600082019050919050565b600061434382614315565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143a9602183613597565b91506143b48261434d565b604082019050919050565b600060208201905081810360008301526143d88161439c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061444c8161367e565b92915050565b60006020828403121561446857614467613647565b5b60006144768482850161443d565b91505092915050565b6000819050919050565b60006144a461449f61449a8461447f565b613ab1565b6136aa565b9050919050565b6144b481614489565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144ef8161366c565b82525050565b600061450183836144e6565b60208301905092915050565b6000602082019050919050565b6000614525826144ba565b61452f81856144c5565b935061453a836144d6565b8060005b8381101561456b57815161455288826144f5565b975061455d8361450d565b92505060018101905061453e565b5085935050505092915050565b600060a08201905061458d60008301886137c3565b61459a60208301876144ab565b81810360408301526145ac818661451a565b90506145bb6060830185613930565b6145c860808301846137c3565b9695505050505050565b600060c0820190506145e76000830189613930565b6145f460208301886137c3565b61460160408301876144ab565b61460e60608301866144ab565b61461b6080830185613930565b61462860a08301846137c3565b979650505050505050565b600081519050614642816136b4565b92915050565b60008060006060848603121561466157614660613647565b5b600061466f86828701614633565b935050602061468086828701614633565b925050604061469186828701614633565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220373992464e58b328221db32fa98bd72694a9c10f8924db3e674dfcb6c6f7bfa364736f6c63430008090033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80638da5cb5b11610123578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461080f578063e16830a81461084c578063f2fde38b14610875578063f5b3c3bf1461089e578063f887ea40146108db57610225565b8063c024666814610739578063c16dd4a414610762578063c18bc1951461078b578063d212a69a146107b4578063d3f6a157146107e657610225565b80639fccce32116100f25780639fccce3214610652578063a457c2d71461067d578063a9059cbb146106ba578063b8863115146106f7578063b9e418e71461072257610225565b80638da5cb5b146105945780638ea5220f146105bf57806395d89b41146105ea57806396880b171461061557610225565b80633265e846116101a6578063555467a111610175578063555467a1146104af5780636ddd1713146104ec57806370a0823114610517578063715018a6146105545780637571336a1461056b57610225565b80633265e846146103e1578063395093511461040a57806349bd5a5e146104475780634fbee1931461047257610225565b806318160ddd116101ed57806318160ddd146102f85780631a8145bb146103235780631f3fed8f1461034e57806323b872dd14610379578063313ce567146103b657610225565b806306fdde031461022a578063095ea7b31461025557806310d5de531461029257806311a582c3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610906565b60405161024c9190613625565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906136e0565b610998565b604051610289919061373b565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613756565b6109b6565b6040516102c6919061373b565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613783565b6109d6565b005b34801561030457600080fd5b5061030d610ba7565b60405161031a91906137d2565b60405180910390f35b34801561032f57600080fd5b50610338610bb1565b60405161034591906137d2565b60405180910390f35b34801561035a57600080fd5b50610363610bb7565b60405161037091906137d2565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906137ed565b610bbd565b6040516103ad919061373b565b60405180910390f35b3480156103c257600080fd5b506103cb610c96565b6040516103d8919061385c565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906138a3565b610c9f565b005b34801561041657600080fd5b50610431600480360381019061042c91906136e0565b610f78565b60405161043e919061373b565b60405180910390f35b34801561045357600080fd5b5061045c61102b565b604051610469919061393f565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613756565b61104f565b6040516104a6919061373b565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061395a565b6110a5565b6040516104e3919061373b565b60405180910390f35b3480156104f857600080fd5b5061050161114e565b60405161050e919061373b565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613756565b611161565b60405161054b91906137d2565b60405180910390f35b34801561056057600080fd5b506105696111a9565b005b34801561057757600080fd5b50610592600480360381019061058d91906139b3565b611301565b005b3480156105a057600080fd5b506105a96113f3565b6040516105b6919061393f565b60405180910390f35b3480156105cb57600080fd5b506105d461141d565b6040516105e1919061393f565b60405180910390f35b3480156105f657600080fd5b506105ff611443565b60405161060c9190613625565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613756565b6114d5565b604051610649919061373b565b60405180910390f35b34801561065e57600080fd5b506106676114f5565b60405161067491906137d2565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906136e0565b6114fb565b6040516106b1919061373b565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc91906136e0565b6115c8565b6040516106ee919061373b565b60405180910390f35b34801561070357600080fd5b5061070c6115e6565b604051610719919061373b565b60405180910390f35b34801561072e57600080fd5b506107376115f9565b005b34801561074557600080fd5b50610760600480360381019061075b91906139b3565b6116db565b005b34801561076e57600080fd5b50610789600480360381019061078491906139b3565b6117cd565b005b34801561079757600080fd5b506107b260048036038101906107ad919061395a565b61194e565b005b3480156107c057600080fd5b506107c9611a83565b6040516107dd9897969594939291906139f3565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190613a71565b611b21565b005b34801561081b57600080fd5b5061083660048036038101906108319190613a71565b611c3e565b60405161084391906137d2565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e91906139b3565b611cc5565b005b34801561088157600080fd5b5061089c60048036038101906108979190613756565b611db7565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613756565b611f7e565b6040516108d2919061373b565b60405180910390f35b3480156108e757600080fd5b506108f0611f9e565b6040516108fd9190613b10565b60405180910390f35b60606003805461091590613b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461094190613b5a565b801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050905090565b60006109ac6109a5612020565b8484612028565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6109de612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6490613bd8565b60405180910390fd5b6064610a77610ba7565b610a819190613c56565b6103e883610a8d610ba7565b610a979190613c87565b610aa19190613c56565b1015610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990613d53565b60405180910390fd5b6064610aec610ba7565b610af69190613c56565b6103e882610b02610ba7565b610b0c9190613c87565b610b169190613c56565b1015610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613de5565b60405180910390fd5b6103e882610b63610ba7565b610b6d9190613c87565b610b779190613c56565b6008819055506103e881610b89610ba7565b610b939190613c87565b610b9d9190613c56565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610bca848484612113565b610c8b84610bd6612020565b610c86856040518060600160405280602881526020016146e760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3c612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b612028565b600190509392505050565b60006012905090565b610ca7612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613bd8565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610dd39190613e05565b610ddd9190613e05565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610e979190613e05565b610ea19190613e05565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90613e88565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6790613e88565b60405180910390fd5b505050505050565b6000611021610f85612020565b8461101c8560016000610f96612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc290919063ffffffff16565b612028565b6001905092915050565b7f00000000000000000000000036931983d0bd2a6df3fe41b0b3fa48dc0ea44a8181565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006110af612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613bd8565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111b1612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611309612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90613bd8565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461145290613b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461147e90613b5a565b80156114cb5780601f106114a0576101008083540402835291602001916114cb565b820191906000526020600020905b8154815290600101906020018083116114ae57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b60006115be611508612020565b846115b98560405180606001604052806025815260200161469c6025913960016000611532612020565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b612028565b6001905092915050565b60006115dc6115d5612020565b8484612113565b6001905092915050565b600c60029054906101000a900460ff1681565b611601612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613bd8565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436116d39190613ea8565b601181905550565b6116e3612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613bd8565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117d5612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90613bd8565b60405180910390fd5b7f00000000000000000000000036931983d0bd2a6df3fe41b0b3fa48dc0ea44a8173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613f4a565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611956612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90613bd8565b60405180910390fd5b60646119ef610ba7565b6119f99190613c56565b6103e882611a05610ba7565b611a0f9190613c87565b611a199190613c56565b1015611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190613fdc565b60405180910390fd5b6103e881611a66610ba7565b611a709190613c87565b611a7a9190613c56565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611b29612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613bd8565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ccd612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390613bd8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611dbf612020565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb59061406e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611fd19190613ea8565b905083811015612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906140da565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161210691906137d2565b60405180910390a3505050565b600081141561212d5761212883836000612c4d565b612be4565b6121356113f3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121a357506121736113f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121bc5750600c60029054906101000a900460ff16155b1561254257600c60009054906101000a900460ff166122b657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122765750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614146565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123595750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123a8576008548111156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906141b2565b60405180910390fd5b612497565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561244b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561249657600954811115612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061421e565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661254157600a546124f483611161565b826124ff9190613ea8565b1115612540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125379061428a565b60405180910390fd5b5b5b600061254d30611161565b90506000600b5482101590508080156125725750600c60019054906101000a900460ff165b801561258b5750600c60029054906101000a900460ff16155b80156125e05750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126365750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561268c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126d0576001600c60026101000a81548160ff0219169083151502179055506126b4612df7565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127865750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561279057600090505b8015612bd5576000601154431015612832576127c960646127bb6063886130e590919063ffffffff16565b61316090919063ffffffff16565b90506063605e826127da9190613c87565b6127e49190613c56565b600e60008282546127f59190613ea8565b92505081905550606360058261280b9190613c87565b6128159190613c56565b601060008282546128269190613ea8565b92505081905550612bb0565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128a057506000600d60000160049054906101000a900460ff1660ff16115b156129f2576128e060646128d2600d60000160049054906101000a900460ff1660ff16886130e590919063ffffffff16565b61316090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff16826129199190613c87565b6129239190613c56565b600f60008282546129349190613ea8565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826129729190613c87565b61297c9190613c56565b600e600082825461298d9190613ea8565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff16826129cb9190613c87565b6129d59190613c56565b601060008282546129e69190613ea8565b92505081905550612baf565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6057506000600d60000160009054906101000a900460ff1660ff16115b15612bae57612aa06064612a92600d60000160009054906101000a900460ff1660ff16886130e590919063ffffffff16565b61316090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612ad99190613c87565b612ae39190613c56565b600f6000828254612af49190613ea8565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612b329190613c87565b612b3c9190613c56565b600e6000828254612b4d9190613ea8565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612b8b9190613c87565b612b959190613c56565b60106000828254612ba69190613ea8565b925050819055505b5b5b6000811115612bc557612bc4873083612c4d565b5b8085612bd191906142aa565b9450505b612be0868686612c4d565b5050505b505050565b6000838311158290612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c289190613625565b60405180910390fd5b5060008385612c4091906142aa565b9050809150509392505050565b612cb8816040518060600160405280602681526020016146c1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dea91906137d2565b60405180910390a3505050565b6000612e0230611161565b90506000601054600e54600f54612e199190613ea8565b612e239190613ea8565b9050600080831480612e355750600082145b15612e42575050506130e3565b6014600b54612e519190613c87565b831115612e6a576014600b54612e679190613c87565b92505b6000600283600f5486612e7d9190613c87565b612e879190613c56565b612e919190613c56565b90506000612ea882866131aa90919063ffffffff16565b90506000479050612eb8826131f4565b6000612ecd82476131aa90919063ffffffff16565b90506000612ef887612eea600e54856130e590919063ffffffff16565b61316090919063ffffffff16565b90506000612f2388612f15601054866130e590919063ffffffff16565b61316090919063ffffffff16565b905060008183612f339190613ea8565b84612f3e91906142aa565b90506000600f819055506000600e819055506000601081905550600087118015612f685750600081115b15612fb157612f778782613440565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612fa89291906142de565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612ff691906142aa565b60405161300290614338565b60006040518083038185875af1925050503d806000811461303f576040519150601f19603f3d011682016040523d82523d6000602084013e613044565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161309090614338565b60006040518083038185875af1925050503d80600081146130cd576040519150601f19603f3d011682016040523d82523d6000602084013e6130d2565b606091505b505080985050505050505050505050505b565b6000808314156130f8576000905061315a565b600082846131069190613c87565b90508284826131159190613c56565b14613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c906143bf565b60405180910390fd5b809150505b92915050565b60006131a283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613529565b905092915050565b60006131ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612be9565b905092915050565b6000600267ffffffffffffffff811115613211576132106143df565b5b60405190808252806020026020018201604052801561323f5781602001602082028036833780820191505090505b50905030816000815181106132575761325661440e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f757600080fd5b505afa15801561330b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332f9190614452565b816001815181106133435761334261440e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133a8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612028565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161340a959493929190614578565b600060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b505050505050565b61346b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612028565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016134d0969594939291906145d2565b6060604051808303818588803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135229190614648565b5050505050565b60008083118290613570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135679190613625565b60405180910390fd5b506000838561357f9190613c56565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135c65780820151818401526020810190506135ab565b838111156135d5576000848401525b50505050565b6000601f19601f8301169050919050565b60006135f78261358c565b6136018185613597565b93506136118185602086016135a8565b61361a816135db565b840191505092915050565b6000602082019050818103600083015261363f81846135ec565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136778261364c565b9050919050565b6136878161366c565b811461369257600080fd5b50565b6000813590506136a48161367e565b92915050565b6000819050919050565b6136bd816136aa565b81146136c857600080fd5b50565b6000813590506136da816136b4565b92915050565b600080604083850312156136f7576136f6613647565b5b600061370585828601613695565b9250506020613716858286016136cb565b9150509250929050565b60008115159050919050565b61373581613720565b82525050565b6000602082019050613750600083018461372c565b92915050565b60006020828403121561376c5761376b613647565b5b600061377a84828501613695565b91505092915050565b6000806040838503121561379a57613799613647565b5b60006137a8858286016136cb565b92505060206137b9858286016136cb565b9150509250929050565b6137cc816136aa565b82525050565b60006020820190506137e760008301846137c3565b92915050565b60008060006060848603121561380657613805613647565b5b600061381486828701613695565b935050602061382586828701613695565b9250506040613836868287016136cb565b9150509250925092565b600060ff82169050919050565b61385681613840565b82525050565b6000602082019050613871600083018461384d565b92915050565b61388081613840565b811461388b57600080fd5b50565b60008135905061389d81613877565b92915050565b60008060008060008060c087890312156138c0576138bf613647565b5b60006138ce89828a0161388e565b96505060206138df89828a0161388e565b95505060406138f089828a0161388e565b945050606061390189828a0161388e565b935050608061391289828a0161388e565b92505060a061392389828a0161388e565b9150509295509295509295565b6139398161366c565b82525050565b60006020820190506139546000830184613930565b92915050565b6000602082840312156139705761396f613647565b5b600061397e848285016136cb565b91505092915050565b61399081613720565b811461399b57600080fd5b50565b6000813590506139ad81613987565b92915050565b600080604083850312156139ca576139c9613647565b5b60006139d885828601613695565b92505060206139e98582860161399e565b9150509250929050565b600061010082019050613a09600083018b61384d565b613a16602083018a61384d565b613a23604083018961384d565b613a30606083018861384d565b613a3d608083018761384d565b613a4a60a083018661384d565b613a5760c083018561384d565b613a6460e083018461384d565b9998505050505050505050565b60008060408385031215613a8857613a87613647565b5b6000613a9685828601613695565b9250506020613aa785828601613695565b9150509250929050565b6000819050919050565b6000613ad6613ad1613acc8461364c565b613ab1565b61364c565b9050919050565b6000613ae882613abb565b9050919050565b6000613afa82613add565b9050919050565b613b0a81613aef565b82525050565b6000602082019050613b256000830184613b01565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7257607f821691505b60208210811415613b8657613b85613b2b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bc2602083613597565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c61826136aa565b9150613c6c836136aa565b925082613c7c57613c7b613bf8565b5b828204905092915050565b6000613c92826136aa565b9150613c9d836136aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cd657613cd5613c27565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613d3d602383613597565b9150613d4882613ce1565b604082019050919050565b60006020820190508181036000830152613d6c81613d30565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000613dcf602483613597565b9150613dda82613d73565b604082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b6000613e1082613840565b9150613e1b83613840565b92508260ff03821115613e3157613e30613c27565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613e72601d83613597565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b6000613eb3826136aa565b9150613ebe836136aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ef357613ef2613c27565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000613f34601783613597565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc6602283613597565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614058602683613597565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140c4601b83613597565b91506140cf8261408e565b602082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614130601683613597565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b600061419c601c83613597565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614208601d83613597565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614274601383613597565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b60006142b5826136aa565b91506142c0836136aa565b9250828210156142d3576142d2613c27565b5b828203905092915050565b60006040820190506142f360008301856137c3565b61430060208301846137c3565b9392505050565b600081905092915050565b50565b6000614322600083614307565b915061432d82614312565b600082019050919050565b600061434382614315565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143a9602183613597565b91506143b48261434d565b604082019050919050565b600060208201905081810360008301526143d88161439c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061444c8161367e565b92915050565b60006020828403121561446857614467613647565b5b60006144768482850161443d565b91505092915050565b6000819050919050565b60006144a461449f61449a8461447f565b613ab1565b6136aa565b9050919050565b6144b481614489565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144ef8161366c565b82525050565b600061450183836144e6565b60208301905092915050565b6000602082019050919050565b6000614525826144ba565b61452f81856144c5565b935061453a836144d6565b8060005b8381101561456b57815161455288826144f5565b975061455d8361450d565b92505060018101905061453e565b5085935050505092915050565b600060a08201905061458d60008301886137c3565b61459a60208301876144ab565b81810360408301526145ac818661451a565b90506145bb6060830185613930565b6145c860808301846137c3565b9695505050505050565b600060c0820190506145e76000830189613930565b6145f460208301886137c3565b61460160408301876144ab565b61460e60608301866144ab565b61461b6080830185613930565b61462860a08301846137c3565b979650505050505050565b600081519050614642816136b4565b92915050565b60008060006060848603121561466157614660613647565b5b600061466f86828701614633565b935050602061468086828701614633565b925050604061469186828701614633565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220373992464e58b328221db32fa98bd72694a9c10f8924db3e674dfcb6c6f7bfa364736f6c63430008090033

Deployed Bytecode Sourcemap

13899:12667:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2800:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15271:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18280:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2187:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15055:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15015;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2982:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2082:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19027:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3350:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14026:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20674:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18112:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14398:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2308:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6874:148;;;;;;;;;;;;;:::i;:::-;;20156:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6570:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14093:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1965:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15341:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15095:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3581:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2448:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14436:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17895:143;;;;;;;;;;;;;:::i;:::-;;19866:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18748:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14743:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20497:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2636:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20004:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7036:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15557:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13977;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:99;1906:13;1939:5;1932:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:99;:::o;2800:168::-;2882:4;2899:39;2908:12;:10;:12::i;:::-;2922:7;2931:6;2899:8;:39::i;:::-;2956:4;2949:11;;2800:168;;;;:::o;15271:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18280:458::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18442:3:::1;18426:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18416:4;18403:9;18387:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18386:34;;;;:::i;:::-;18385:61;;18377:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18563:3;18547:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18537:4;18523:10;18507:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18506:35;;;;:::i;:::-;18505:62;;18497:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18664:4;18651:9;18635:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18634:34;;;;:::i;:::-;18619:12;:49;;;;18726:4;18712:10;18696:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18695:35;;;;:::i;:::-;18679:13;:51;;;;18280:458:::0;;:::o;2187:107::-;2247:7;2274:12;;2267:19;;2187:107;:::o;15055:33::-;;;;:::o;15015:::-;;;;:::o;2982:354::-;3121:4;3138:36;3148:6;3156:9;3167:6;3138:9;:36::i;:::-;3185:121;3194:6;3202:12;:10;:12::i;:::-;3216:89;3254:6;3216:89;;;;;;;;;;;;;;;;;:11;:19;3228:6;3216:19;;;;;;;;;;;;;;;:33;3236:12;:10;:12::i;:::-;3216:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3185:8;:121::i;:::-;3324:4;3317:11;;2982:354;;;;;:::o;2082:92::-;2139:5;2164:2;2157:9;;2082:92;:::o;19027:827::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19232:16:::1;19208:5;:21;;;:40;;;;;;;;;;;;;;;;;;19283:16;19259:5;:21;;;:40;;;;;;;;;;;;;;;;;;19328:10;19310:5;:15;;;:28;;;;;;;;;;;;;;;;;;19418:5;:15;;;;;;;;;;;;19394:5;:21;;;;;;;;;;;;19370:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19349:5;:18;;;:84;;;;;;;;;;;;;;;;;;19471:17;19446:5;:22;;;:42;;;;;;;;;;;;;;;;;;19524:17;19499:5;:22;;;:42;;;;;;;;;;;;;;;;;;19571:11;19552:5;:16;;;:30;;;;;;;;;;;;;;;;;;19665:5;:16;;;;;;;;;;;;19640:5;:22;;;;;;;;;;;;19615:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19593:5;:19;;;:88;;;;;;;;;;;;;;;;;;19722:2;19700:5;:18;;;;;;;;;;;;:24;;;;19692:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19803:2;19780:5;:19;;;;;;;;;;;;:25;;;;19772:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19027:827:::0;;;;;;:::o;3350:217::-;3437:4;3454:83;3463:12;:10;:12::i;:::-;3477:7;3486:50;3525:10;3486:11;:25;3498:12;:10;:12::i;:::-;3486:25;;;;;;;;;;;;;;;:34;3512:7;3486:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3454:8;:83::i;:::-;3555:4;3548:11;;3350:217;;;;:::o;14026:38::-;;;:::o;20674:125::-;20739:4;20763:19;:28;20783:7;20763:28;;;;;;;;;;;;;;;;;;;;;;;;;20756:35;;20674:125;;;:::o;18112:158::-;18193:4;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18231:9:::1;18209:19;:31;;;;18258:4;18251:11;;18112:158:::0;;;:::o;14398:31::-;;;;;;;;;;;;;:::o;2308:126::-;2381:7;2408:9;:18;2418:7;2408:18;;;;;;;;;;;;;;;;2401:25;;2308:126;;;:::o;6874:148::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6981:1:::1;6944:40;;6965:6;;;;;;;;;;;6944:40;;;;;;;;;;;;7012:1;6995:6;;:19;;;;;;;;;;;;;;;;;;6874:148::o:0;20156:144::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20288:4:::1;20246:31;:39;20278:6;20246:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20156:144:::0;;:::o;6570:78::-;6607:7;6634:6;;;;;;;;;;;6627:13;;6570:78;:::o;14093:25::-;;;;;;;;;;;;;:::o;1965:103::-;2020:13;2053:7;2046:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1965:103;:::o;15341:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;15095:27::-;;;;:::o;3581:268::-;3673:4;3690:129;3699:12;:10;:12::i;:::-;3713:7;3722:96;3761:15;3722:96;;;;;;;;;;;;;;;;;:11;:25;3734:12;:10;:12::i;:::-;3722:25;;;;;;;;;;;;;;;:34;3748:7;3722:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3690:8;:129::i;:::-;3837:4;3830:11;;3581:268;;;;:::o;2448:174::-;2533:4;2550:42;2560:12;:10;:12::i;:::-;2574:9;2585:6;2550:9;:42::i;:::-;2610:4;2603:11;;2448:174;;;;:::o;14436:22::-;;;;;;;;;;;;;:::o;17895:143::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17960:4:::1;17948:9;;:16;;;;;;;;;;;;;;;;;;17989:4;17975:11;;:18;;;;;;;;;;;;;;;;;;18029:1;18014:12;:16;;;;:::i;:::-;18004:7;:26;;;;17895:143::o:0;19866:132::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19982:8:::1;19951:19;:28;19971:7;19951:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19866:132:::0;;:::o;20310:177::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20403:13:::1;20395:21;;:4;:21;;;;20387:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:5;20455:10;:16;20466:4;20455:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20310:177:::0;;:::o;18748:271::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18901:3:::1;18885:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18875:4;18858:13;18842;:11;:13::i;:::-;:29;;;;:::i;:::-;18841:38;;;;:::i;:::-;18840:65;;18832:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19007:4;18990:13;18974;:11;:13::i;:::-;:29;;;;:::i;:::-;18973:38;;;;:::i;:::-;18955:15;:56;;;;18748:271:::0;:::o;14743:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20497:169::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20609:16:::1;20591:15;;:34;;;;;;;;;;;;;;;;;;20648:10;20636:9;;:22;;;;;;;;;;;;;;;;;;20497:169:::0;;:::o;2636:150::-;2724:7;2751:11;:18;2763:5;2751:18;;;;;;;;;;;;;;;:27;2770:7;2751:27;;;;;;;;;;;;;;;;2744:34;;2636:150;;;;:::o;20004:146::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20134:8:::1;20096:26;:35;20123:7;20096:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20004:146:::0;;:::o;7036:244::-;6791:12;:10;:12::i;:::-;6781:22;;:6;;;;;;;;;;;:22;;;6773:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7145:1:::1;7125:22;;:8;:22;;;;7117:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7235:8;7206:38;;7227:6;;;;;;;;;;;7206:38;;;;;;;;;;;;7264:8;7255:6;;:17;;;;;;;;;;;;;;;;;;7036:244:::0;:::o;15557:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;13977:::-;;;:::o;4835:180::-;4892:7;4912:9;4928:1;4924;:5;;;;:::i;:::-;4912:17;;4953:1;4948;:6;;4940:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5006:1;4999:8;;;4835:180;;;;:::o;1285:97::-;1337:7;1364:10;1357:17;;1285:97;:::o;4570:220::-;4728:6;4698:11;:18;4710:5;4698:18;;;;;;;;;;;;;;;:27;4717:7;4698:27;;;;;;;;;;;;;;;:36;;;;4766:7;4750:32;;4759:5;4750:32;;;4775:6;4750:32;;;;;;:::i;:::-;;;;;;;;4570:220;;;:::o;20807:3261::-;20974:1;20964:6;:11;20960:102;;;20992:37;21008:6;21016:9;21027:1;20992:15;:37::i;:::-;21044:7;;20960:102;21102:7;:5;:7::i;:::-;21092:17;;:6;:17;;;;:54;;;;;21139:7;:5;:7::i;:::-;21126:20;;:9;:20;;;;21092:54;:82;;;;;21164:10;;;;;;;;;;;21163:11;21092:82;21074:849;;;21208:9;;;;;;;;;;;21203:147;;21246:19;:27;21266:6;21246:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21277:19;:30;21297:9;21277:30;;;;;;;;;;;;;;;;;;;;;;;;;21246:61;21238:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21203:147;21368:10;:18;21379:6;21368:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21391:31;:42;21423:9;21391:42;;;;;;;;;;;;;;;;;;;;;;;;;21390:43;21368:65;21364:360;;;21472:12;;21462:6;:22;;21454:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21364:360;;;21557:10;:21;21568:9;21557:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21583:31;:39;21615:6;21583:39;;;;;;;;;;;;;;;;;;;;;;;;;21582:40;21557:65;21553:171;;;21661:13;;21651:6;:23;;21643:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21553:171;21364:360;21745:26;:37;21772:9;21745:37;;;;;;;;;;;;;;;;;;;;;;;;;21740:159;;21844:15;;21820:20;21830:9;21820;:20::i;:::-;21811:6;:29;;;;:::i;:::-;:48;;21803:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21740:159;21074:849;21949:28;21980:24;21998:4;21980:9;:24::i;:::-;21949:55;;22018:12;22057:19;;22033:20;:43;;22018:58;;22107:7;:35;;;;;22131:11;;;;;;;;;;;22107:35;:63;;;;;22160:10;;;;;;;;;;;22159:11;22107:63;:101;;;;;22187:10;:21;22198:9;22187:21;;;;;;;;;;;;;;;;;;;;;;;;;22107:101;:146;;;;;22226:19;:27;22246:6;22226:27;;;;;;;;;;;;;;;;;;;;;;;;;22225:28;22107:146;:194;;;;;22271:19;:30;22291:9;22271:30;;;;;;;;;;;;;;;;;;;;;;;;;22270:31;22107:194;22089:326;;;22341:4;22328:10;;:17;;;;;;;;;;;;;;;;;;22360:10;:8;:10::i;:::-;22398:5;22385:10;;:18;;;;;;;;;;;;;;;;;;22089:326;22428:12;22444:10;;;;;;;;;;;22443:11;22428:26;;22556:19;:27;22576:6;22556:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22587:19;:30;22607:9;22587:30;;;;;;;;;;;;;;;;;;;;;;;;;22556:61;22552:109;;;22644:5;22634:15;;22552:109;22762:7;22758:1248;;;22786:12;22835:7;;22820:12;:22;22817:1036;;;22870:23;22889:3;22870:14;22881:2;22870:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;22863:30;;22948:2;22942;22935:4;:9;;;;:::i;:::-;22934:16;;;;:::i;:::-;22912:18;;:38;;;;;;;:::i;:::-;;;;;;;;22998:2;22993:1;22986:4;:8;;;;:::i;:::-;22985:15;;;;:::i;:::-;22969:12;;:31;;;;;;;:::i;:::-;;;;;;;;22817:1036;;;23026:10;:21;23037:9;23026:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23073:1;23051:5;:19;;;;;;;;;;;;:23;;;23026:48;23022:831;;;23102:40;23138:3;23102:31;23113:5;:19;;;;;;;;;;;;23102:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23095:47;;23215:5;:19;;;;;;;;;;;;23183:51;;23190:5;:22;;;;;;;;;;;;23183:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23161:18;;:73;;;;;;;:::i;:::-;;;;;;;;23307:5;:19;;;;;;;;;;;;23275:51;;23282:5;:22;;;;;;;;;;;;23275:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23253:18;;:73;;;;;;;:::i;:::-;;;;;;;;23387:5;:19;;;;;;;;;;;;23361:45;;23368:5;:16;;;;;;;;;;;;23361:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23345:12;;:61;;;;;;;:::i;:::-;;;;;;;;23022:831;;;23468:10;:18;23479:6;23468:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23511:1;23490:5;:18;;;;;;;;;;;;:22;;;23468:44;23464:389;;;23540:39;23575:3;23540:30;23551:5;:18;;;;;;;;;;;;23540:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23533:46;;23651:5;:18;;;;;;;;;;;;23620:49;;23627:5;:21;;;;;;;;;;;;23620:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23598:18;;:71;;;;;;;:::i;:::-;;;;;;;;23741:5;:18;;;;;;;;;;;;23710:49;;23717:5;:21;;;;;;;;;;;;23710:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23688:18;;:71;;;;;;;:::i;:::-;;;;;;;;23819:5;:18;;;;;;;;;;;;23794:43;;23801:5;:15;;;;;;;;;;;;23794:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;23778:12;;:59;;;;;;;:::i;:::-;;;;;;;;23464:389;23022:831;22817:1036;23880:1;23873:4;:8;23869:93;;;23902:44;23918:6;23934:4;23941;23902:15;:44::i;:::-;23869:93;23988:4;23978:14;;;;;:::i;:::-;;;22771:1235;22758:1248;24018:42;24034:6;24042:9;24053:6;24018:15;:42::i;:::-;20939:3129;;;20807:3261;;;;:::o;5176:191::-;5261:7;5294:1;5289;:6;;5297:12;5281:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5321:9;5337:1;5333;:5;;;;:::i;:::-;5321:17;;5358:1;5351:8;;;5176:191;;;;;:::o;3863:358::-;4025:71;4047:6;4025:71;;;;;;;;;;;;;;;;;:9;:17;4035:6;4025:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4005:9;:17;4015:6;4005:17;;;;;;;;;;;;;;;:91;;;;4130:32;4155:6;4130:9;:20;4140:9;4130:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4107:9;:20;4117:9;4107:20;;;;;;;;;;;;;;;:55;;;;4195:9;4178:35;;4187:6;4178:35;;;4206:6;4178:35;;;;;;:::i;:::-;;;;;;;;3863:358;;;:::o;24996:1565::-;25035:28;25066:24;25084:4;25066:9;:24::i;:::-;25035:55;;25101:14;25160:12;;25139:18;;25118;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25101:71;;25183:12;25236:1;25212:20;:25;:40;;;;25251:1;25241:6;:11;25212:40;25208:57;;;25256:7;;;;;25208:57;25326:2;25304:19;;:24;;;;:::i;:::-;25281:20;:47;25277:127;;;25390:2;25368:19;;:24;;;;:::i;:::-;25345:47;;25277:127;25465:23;25544:1;25535:6;25514:18;;25491:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25465:80;;25556:26;25585:41;25610:15;25585:20;:24;;:41;;;;:::i;:::-;25556:70;;25640:25;25668:21;25640:49;;25702:36;25719:18;25702:16;:36::i;:::-;25753:18;25774:44;25800:17;25774:21;:25;;:44;;;;:::i;:::-;25753:65;;25832:23;25858:46;25897:6;25858:34;25873:18;;25858:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;25832:72;;25915:17;25935:40;25968:6;25935:28;25950:12;;25935:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;25915:60;;25986:23;26044:9;26026:15;:27;;;;:::i;:::-;26012:10;:42;;;;:::i;:::-;25986:68;;26090:1;26069:18;:22;;;;26123:1;26102:18;:22;;;;26150:1;26135:12;:16;;;;26188:1;26170:15;:19;:42;;;;;26211:1;26193:15;:19;26170:42;26166:192;;;26229:46;26242:15;26259;26229:12;:46::i;:::-;26295:51;26310:18;26330:15;26295:51;;;;;;;:::i;:::-;;;;;;;;26166:192;26391:9;;;;;;;;;;;26383:23;;26440:15;26416:21;:39;;;;:::i;:::-;26383:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26370:93;;;;;26495:15;;;;;;;;;;;26487:29;;26525:21;26487:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26474:79;;;;;25024:1537;;;;;;;;;;24996:1565;:::o;5375:256::-;5432:7;5467:1;5462;:6;5458:47;;;5492:1;5485:8;;;;5458:47;5518:9;5534:1;5530;:5;;;;:::i;:::-;5518:17;;5563:1;5558;5554;:5;;;;:::i;:::-;:10;5546:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5622:1;5615:8;;;5375:256;;;;;:::o;5642:131::-;5699:7;5726:39;5730:1;5733;5726:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5719:46;;5642:131;;;;:::o;5028:135::-;5085:7;5112:43;5116:1;5119;5112:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5105:50;;5028:135;;;;:::o;24076:554::-;24200:21;24238:1;24224:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24200:40;;24269:4;24251;24256:1;24251:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24295:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24285:4;24290:1;24285:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24321:49;24338:4;24353:6;24362:7;24321:8;:49::i;:::-;24409:6;:57;;;24481:7;24503:1;24547:4;24574;24594:15;24409:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24127:503;24076:554;:::o;24638:350::-;24782:49;24799:4;24814:6;24823:7;24782:8;:49::i;:::-;24874:6;:22;;;24905:9;24926:4;24933:7;24942:1;24945;24957:4;24964:15;24874:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24638:350;;:::o;5785:277::-;5870:7;5902:1;5898;:5;5905:12;5890:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5929:9;5945:1;5941;:5;;;;:::i;:::-;5929:17;;6053:1;6046:8;;;5785:277;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:86::-;5321:7;5361:4;5354:5;5350:16;5339:27;;5286:86;;;:::o;5378:112::-;5461:22;5477:5;5461:22;:::i;:::-;5456:3;5449:35;5378:112;;:::o;5496:214::-;5585:4;5623:2;5612:9;5608:18;5600:26;;5636:67;5700:1;5689:9;5685:17;5676:6;5636:67;:::i;:::-;5496:214;;;;:::o;5716:118::-;5787:22;5803:5;5787:22;:::i;:::-;5780:5;5777:33;5767:61;;5824:1;5821;5814:12;5767:61;5716:118;:::o;5840:135::-;5884:5;5922:6;5909:20;5900:29;;5938:31;5963:5;5938:31;:::i;:::-;5840:135;;;;:::o;5981:1033::-;6073:6;6081;6089;6097;6105;6113;6162:3;6150:9;6141:7;6137:23;6133:33;6130:120;;;6169:79;;:::i;:::-;6130:120;6289:1;6314:51;6357:7;6348:6;6337:9;6333:22;6314:51;:::i;:::-;6304:61;;6260:115;6414:2;6440:51;6483:7;6474:6;6463:9;6459:22;6440:51;:::i;:::-;6430:61;;6385:116;6540:2;6566:51;6609:7;6600:6;6589:9;6585:22;6566:51;:::i;:::-;6556:61;;6511:116;6666:2;6692:51;6735:7;6726:6;6715:9;6711:22;6692:51;:::i;:::-;6682:61;;6637:116;6792:3;6819:51;6862:7;6853:6;6842:9;6838:22;6819:51;:::i;:::-;6809:61;;6763:117;6919:3;6946:51;6989:7;6980:6;6969:9;6965:22;6946:51;:::i;:::-;6936:61;;6890:117;5981:1033;;;;;;;;:::o;7020:118::-;7107:24;7125:5;7107:24;:::i;:::-;7102:3;7095:37;7020:118;;:::o;7144:222::-;7237:4;7275:2;7264:9;7260:18;7252:26;;7288:71;7356:1;7345:9;7341:17;7332:6;7288:71;:::i;:::-;7144:222;;;;:::o;7372:329::-;7431:6;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7372:329;;;;:::o;7707:116::-;7777:21;7792:5;7777:21;:::i;:::-;7770:5;7767:32;7757:60;;7813:1;7810;7803:12;7757:60;7707:116;:::o;7829:133::-;7872:5;7910:6;7897:20;7888:29;;7926:30;7950:5;7926:30;:::i;:::-;7829:133;;;;:::o;7968:468::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:50;8411:7;8402:6;8391:9;8387:22;8369:50;:::i;:::-;8359:60;;8314:115;7968:468;;;;;:::o;8442:933::-;8699:4;8737:3;8726:9;8722:19;8714:27;;8751:67;8815:1;8804:9;8800:17;8791:6;8751:67;:::i;:::-;8828:68;8892:2;8881:9;8877:18;8868:6;8828:68;:::i;:::-;8906;8970:2;8959:9;8955:18;8946:6;8906:68;:::i;:::-;8984;9048:2;9037:9;9033:18;9024:6;8984:68;:::i;:::-;9062:69;9126:3;9115:9;9111:19;9102:6;9062:69;:::i;:::-;9141;9205:3;9194:9;9190:19;9181:6;9141:69;:::i;:::-;9220;9284:3;9273:9;9269:19;9260:6;9220:69;:::i;:::-;9299;9363:3;9352:9;9348:19;9339:6;9299:69;:::i;:::-;8442:933;;;;;;;;;;;:::o;9381:474::-;9449:6;9457;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9603:117;9759:2;9785:53;9830:7;9821:6;9810:9;9806:22;9785:53;:::i;:::-;9775:63;;9730:118;9381:474;;;;;:::o;9861:60::-;9889:3;9910:5;9903:12;;9861:60;;;:::o;9927:142::-;9977:9;10010:53;10028:34;10037:24;10055:5;10037:24;:::i;:::-;10028:34;:::i;:::-;10010:53;:::i;:::-;9997:66;;9927:142;;;:::o;10075:126::-;10125:9;10158:37;10189:5;10158:37;:::i;:::-;10145:50;;10075:126;;;:::o;10207:153::-;10284:9;10317:37;10348:5;10317:37;:::i;:::-;10304:50;;10207:153;;;:::o;10366:185::-;10480:64;10538:5;10480:64;:::i;:::-;10475:3;10468:77;10366:185;;:::o;10557:276::-;10677:4;10715:2;10704:9;10700:18;10692:26;;10728:98;10823:1;10812:9;10808:17;10799:6;10728:98;:::i;:::-;10557:276;;;;:::o;10839:180::-;10887:77;10884:1;10877:88;10984:4;10981:1;10974:15;11008:4;11005:1;10998:15;11025:320;11069:6;11106:1;11100:4;11096:12;11086:22;;11153:1;11147:4;11143:12;11174:18;11164:81;;11230:4;11222:6;11218:17;11208:27;;11164:81;11292:2;11284:6;11281:14;11261:18;11258:38;11255:84;;;11311:18;;:::i;:::-;11255:84;11076:269;11025:320;;;:::o;11351:182::-;11491:34;11487:1;11479:6;11475:14;11468:58;11351:182;:::o;11539:366::-;11681:3;11702:67;11766:2;11761:3;11702:67;:::i;:::-;11695:74;;11778:93;11867:3;11778:93;:::i;:::-;11896:2;11891:3;11887:12;11880:19;;11539:366;;;:::o;11911:419::-;12077:4;12115:2;12104:9;12100:18;12092:26;;12164:9;12158:4;12154:20;12150:1;12139:9;12135:17;12128:47;12192:131;12318:4;12192:131;:::i;:::-;12184:139;;11911:419;;;:::o;12336:180::-;12384:77;12381:1;12374:88;12481:4;12478:1;12471:15;12505:4;12502:1;12495:15;12522:180;12570:77;12567:1;12560:88;12667:4;12664:1;12657:15;12691:4;12688:1;12681:15;12708:185;12748:1;12765:20;12783:1;12765:20;:::i;:::-;12760:25;;12799:20;12817:1;12799:20;:::i;:::-;12794:25;;12838:1;12828:35;;12843:18;;:::i;:::-;12828:35;12885:1;12882;12878:9;12873:14;;12708:185;;;;:::o;12899:348::-;12939:7;12962:20;12980:1;12962:20;:::i;:::-;12957:25;;12996:20;13014:1;12996:20;:::i;:::-;12991:25;;13184:1;13116:66;13112:74;13109:1;13106:81;13101:1;13094:9;13087:17;13083:105;13080:131;;;13191:18;;:::i;:::-;13080:131;13239:1;13236;13232:9;13221:20;;12899:348;;;;:::o;13253:222::-;13393:34;13389:1;13381:6;13377:14;13370:58;13462:5;13457:2;13449:6;13445:15;13438:30;13253:222;:::o;13481:366::-;13623:3;13644:67;13708:2;13703:3;13644:67;:::i;:::-;13637:74;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13481:366;;;:::o;13853:419::-;14019:4;14057:2;14046:9;14042:18;14034:26;;14106:9;14100:4;14096:20;14092:1;14081:9;14077:17;14070:47;14134:131;14260:4;14134:131;:::i;:::-;14126:139;;13853:419;;;:::o;14278:223::-;14418:34;14414:1;14406:6;14402:14;14395:58;14487:6;14482:2;14474:6;14470:15;14463:31;14278:223;:::o;14507:366::-;14649:3;14670:67;14734:2;14729:3;14670:67;:::i;:::-;14663:74;;14746:93;14835:3;14746:93;:::i;:::-;14864:2;14859:3;14855:12;14848:19;;14507:366;;;:::o;14879:419::-;15045:4;15083:2;15072:9;15068:18;15060:26;;15132:9;15126:4;15122:20;15118:1;15107:9;15103:17;15096:47;15160:131;15286:4;15160:131;:::i;:::-;15152:139;;14879:419;;;:::o;15304:237::-;15342:3;15361:18;15377:1;15361:18;:::i;:::-;15356:23;;15393:18;15409:1;15393:18;:::i;:::-;15388:23;;15483:1;15477:4;15473:12;15470:1;15467:19;15464:45;;;15489:18;;:::i;:::-;15464:45;15533:1;15530;15526:9;15519:16;;15304:237;;;;:::o;15547:179::-;15687:31;15683:1;15675:6;15671:14;15664:55;15547:179;:::o;15732:366::-;15874:3;15895:67;15959:2;15954:3;15895:67;:::i;:::-;15888:74;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15732:366;;;:::o;16104:419::-;16270:4;16308:2;16297:9;16293:18;16285:26;;16357:9;16351:4;16347:20;16343:1;16332:9;16328:17;16321:47;16385:131;16511:4;16385:131;:::i;:::-;16377:139;;16104:419;;;:::o;16529:305::-;16569:3;16588:20;16606:1;16588:20;:::i;:::-;16583:25;;16622:20;16640:1;16622:20;:::i;:::-;16617:25;;16776:1;16708:66;16704:74;16701:1;16698:81;16695:107;;;16782:18;;:::i;:::-;16695:107;16826:1;16823;16819:9;16812:16;;16529:305;;;;:::o;16840:173::-;16980:25;16976:1;16968:6;16964:14;16957:49;16840:173;:::o;17019:366::-;17161:3;17182:67;17246:2;17241:3;17182:67;:::i;:::-;17175:74;;17258:93;17347:3;17258:93;:::i;:::-;17376:2;17371:3;17367:12;17360:19;;17019:366;;;:::o;17391:419::-;17557:4;17595:2;17584:9;17580:18;17572:26;;17644:9;17638:4;17634:20;17630:1;17619:9;17615:17;17608:47;17672:131;17798:4;17672:131;:::i;:::-;17664:139;;17391:419;;;:::o;17816:221::-;17956:34;17952:1;17944:6;17940:14;17933:58;18025:4;18020:2;18012:6;18008:15;18001:29;17816:221;:::o;18043:366::-;18185:3;18206:67;18270:2;18265:3;18206:67;:::i;:::-;18199:74;;18282:93;18371:3;18282:93;:::i;:::-;18400:2;18395:3;18391:12;18384:19;;18043:366;;;:::o;18415:419::-;18581:4;18619:2;18608:9;18604:18;18596:26;;18668:9;18662:4;18658:20;18654:1;18643:9;18639:17;18632:47;18696:131;18822:4;18696:131;:::i;:::-;18688:139;;18415:419;;;:::o;18840:225::-;18980:34;18976:1;18968:6;18964:14;18957:58;19049:8;19044:2;19036:6;19032:15;19025:33;18840:225;:::o;19071:366::-;19213:3;19234:67;19298:2;19293:3;19234:67;:::i;:::-;19227:74;;19310:93;19399:3;19310:93;:::i;:::-;19428:2;19423:3;19419:12;19412:19;;19071:366;;;:::o;19443:419::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:131;19850:4;19724:131;:::i;:::-;19716:139;;19443:419;;;:::o;19868:177::-;20008:29;20004:1;19996:6;19992:14;19985:53;19868:177;:::o;20051:366::-;20193:3;20214:67;20278:2;20273:3;20214:67;:::i;:::-;20207:74;;20290:93;20379:3;20290:93;:::i;:::-;20408:2;20403:3;20399:12;20392:19;;20051:366;;;:::o;20423:419::-;20589:4;20627:2;20616:9;20612:18;20604:26;;20676:9;20670:4;20666:20;20662:1;20651:9;20647:17;20640:47;20704:131;20830:4;20704:131;:::i;:::-;20696:139;;20423:419;;;:::o;20848:172::-;20988:24;20984:1;20976:6;20972:14;20965:48;20848:172;:::o;21026:366::-;21168:3;21189:67;21253:2;21248:3;21189:67;:::i;:::-;21182:74;;21265:93;21354:3;21265:93;:::i;:::-;21383:2;21378:3;21374:12;21367:19;;21026:366;;;:::o;21398:419::-;21564:4;21602:2;21591:9;21587:18;21579:26;;21651:9;21645:4;21641:20;21637:1;21626:9;21622:17;21615:47;21679:131;21805:4;21679:131;:::i;:::-;21671:139;;21398:419;;;:::o;21823:178::-;21963:30;21959:1;21951:6;21947:14;21940:54;21823:178;:::o;22007:366::-;22149:3;22170:67;22234:2;22229:3;22170:67;:::i;:::-;22163:74;;22246:93;22335:3;22246:93;:::i;:::-;22364:2;22359:3;22355:12;22348:19;;22007:366;;;:::o;22379:419::-;22545:4;22583:2;22572:9;22568:18;22560:26;;22632:9;22626:4;22622:20;22618:1;22607:9;22603:17;22596:47;22660:131;22786:4;22660:131;:::i;:::-;22652:139;;22379:419;;;:::o;22804:179::-;22944:31;22940:1;22932:6;22928:14;22921:55;22804:179;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:169::-;23926:21;23922:1;23914:6;23910:14;23903:45;23786:169;:::o;23961:366::-;24103:3;24124:67;24188:2;24183:3;24124:67;:::i;:::-;24117:74;;24200:93;24289:3;24200:93;:::i;:::-;24318:2;24313:3;24309:12;24302:19;;23961:366;;;:::o;24333:419::-;24499:4;24537:2;24526:9;24522:18;24514:26;;24586:9;24580:4;24576:20;24572:1;24561:9;24557:17;24550:47;24614:131;24740:4;24614:131;:::i;:::-;24606:139;;24333:419;;;:::o;24758:191::-;24798:4;24818:20;24836:1;24818:20;:::i;:::-;24813:25;;24852:20;24870:1;24852:20;:::i;:::-;24847:25;;24891:1;24888;24885:8;24882:34;;;24896:18;;:::i;:::-;24882:34;24941:1;24938;24934:9;24926:17;;24758:191;;;;:::o;24955:332::-;25076:4;25114:2;25103:9;25099:18;25091:26;;25127:71;25195:1;25184:9;25180:17;25171:6;25127:71;:::i;:::-;25208:72;25276:2;25265:9;25261:18;25252:6;25208:72;:::i;:::-;24955:332;;;;;:::o;25293:147::-;25394:11;25431:3;25416:18;;25293:147;;;;:::o;25446:114::-;;:::o;25566:398::-;25725:3;25746:83;25827:1;25822:3;25746:83;:::i;:::-;25739:90;;25838:93;25927:3;25838:93;:::i;:::-;25956:1;25951:3;25947:11;25940:18;;25566:398;;;:::o;25970:379::-;26154:3;26176:147;26319:3;26176:147;:::i;:::-;26169:154;;26340:3;26333:10;;25970:379;;;:::o;26355:220::-;26495:34;26491:1;26483:6;26479:14;26472:58;26564:3;26559:2;26551:6;26547:15;26540:28;26355:220;:::o;26581:366::-;26723:3;26744:67;26808:2;26803:3;26744:67;:::i;:::-;26737:74;;26820:93;26909:3;26820:93;:::i;:::-;26938:2;26933:3;26929:12;26922:19;;26581:366;;;:::o;26953:419::-;27119:4;27157:2;27146:9;27142:18;27134:26;;27206:9;27200:4;27196:20;27192:1;27181:9;27177:17;27170:47;27234:131;27360:4;27234:131;:::i;:::-;27226:139;;26953:419;;;:::o;27378:180::-;27426:77;27423:1;27416:88;27523:4;27520:1;27513:15;27547:4;27544:1;27537:15;27564:180;27612:77;27609:1;27602:88;27709:4;27706:1;27699:15;27733:4;27730:1;27723:15;27750:143;27807:5;27838:6;27832:13;27823:22;;27854:33;27881:5;27854:33;:::i;:::-;27750:143;;;;:::o;27899:351::-;27969:6;28018:2;28006:9;27997:7;27993:23;27989:32;27986:119;;;28024:79;;:::i;:::-;27986:119;28144:1;28169:64;28225:7;28216:6;28205:9;28201:22;28169:64;:::i;:::-;28159:74;;28115:128;27899:351;;;;:::o;28256:85::-;28301:7;28330:5;28319:16;;28256:85;;;:::o;28347:158::-;28405:9;28438:61;28456:42;28465:32;28491:5;28465:32;:::i;:::-;28456:42;:::i;:::-;28438:61;:::i;:::-;28425:74;;28347:158;;;:::o;28511:147::-;28606:45;28645:5;28606:45;:::i;:::-;28601:3;28594:58;28511:147;;:::o;28664:114::-;28731:6;28765:5;28759:12;28749:22;;28664:114;;;:::o;28784:184::-;28883:11;28917:6;28912:3;28905:19;28957:4;28952:3;28948:14;28933:29;;28784:184;;;;:::o;28974:132::-;29041:4;29064:3;29056:11;;29094:4;29089:3;29085:14;29077:22;;28974:132;;;:::o;29112:108::-;29189:24;29207:5;29189:24;:::i;:::-;29184:3;29177:37;29112:108;;:::o;29226:179::-;29295:10;29316:46;29358:3;29350:6;29316:46;:::i;:::-;29394:4;29389:3;29385:14;29371:28;;29226:179;;;;:::o;29411:113::-;29481:4;29513;29508:3;29504:14;29496:22;;29411:113;;;:::o;29560:732::-;29679:3;29708:54;29756:5;29708:54;:::i;:::-;29778:86;29857:6;29852:3;29778:86;:::i;:::-;29771:93;;29888:56;29938:5;29888:56;:::i;:::-;29967:7;29998:1;29983:284;30008:6;30005:1;30002:13;29983:284;;;30084:6;30078:13;30111:63;30170:3;30155:13;30111:63;:::i;:::-;30104:70;;30197:60;30250:6;30197:60;:::i;:::-;30187:70;;30043:224;30030:1;30027;30023:9;30018:14;;29983:284;;;29987:14;30283:3;30276:10;;29684:608;;;29560:732;;;;:::o;30298:831::-;30561:4;30599:3;30588:9;30584:19;30576:27;;30613:71;30681:1;30670:9;30666:17;30657:6;30613:71;:::i;:::-;30694:80;30770:2;30759:9;30755:18;30746:6;30694:80;:::i;:::-;30821:9;30815:4;30811:20;30806:2;30795:9;30791:18;30784:48;30849:108;30952:4;30943:6;30849:108;:::i;:::-;30841:116;;30967:72;31035:2;31024:9;31020:18;31011:6;30967:72;:::i;:::-;31049:73;31117:3;31106:9;31102:19;31093:6;31049:73;:::i;:::-;30298:831;;;;;;;;:::o;31135:807::-;31384:4;31422:3;31411:9;31407:19;31399:27;;31436:71;31504:1;31493:9;31489:17;31480:6;31436:71;:::i;:::-;31517:72;31585:2;31574:9;31570:18;31561:6;31517:72;:::i;:::-;31599:80;31675:2;31664:9;31660:18;31651:6;31599:80;:::i;:::-;31689;31765:2;31754:9;31750:18;31741:6;31689:80;:::i;:::-;31779:73;31847:3;31836:9;31832:19;31823:6;31779:73;:::i;:::-;31862;31930:3;31919:9;31915:19;31906:6;31862:73;:::i;:::-;31135:807;;;;;;;;;:::o;31948:143::-;32005:5;32036:6;32030:13;32021:22;;32052:33;32079:5;32052:33;:::i;:::-;31948:143;;;;:::o;32097:663::-;32185:6;32193;32201;32250:2;32238:9;32229:7;32225:23;32221:32;32218:119;;;32256:79;;:::i;:::-;32218:119;32376:1;32401:64;32457:7;32448:6;32437:9;32433:22;32401:64;:::i;:::-;32391:74;;32347:128;32514:2;32540:64;32596:7;32587:6;32576:9;32572:22;32540:64;:::i;:::-;32530:74;;32485:129;32653:2;32679:64;32735:7;32726:6;32715:9;32711:22;32679:64;:::i;:::-;32669:74;;32624:129;32097:663;;;;;:::o

Swarm Source

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