ETH Price: $2,501.56 (-0.47%)

Token

Sonata Network (SONA)
 

Overview

Max Total Supply

1,000,000,000 SONA

Holders

1,703

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$33,530.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SONA

Value
$0.00
0x71a7a7aca2d9316f95eb91bebc6925f59f24212b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Sonata Network is an open decentralized launchpad protocol, service provider, and pioneer of niche liquidity lending.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SONA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT                                                                               

pragma solidity = 0.8.17;

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

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

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


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 allowance below zero"));
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _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");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {return _owner;}
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() 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;
        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) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }
    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;
    }
    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;
    }
    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract SONA is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet = 0xf333Ae72f27ADD83fACca68Dba065eC65Ee61B6B;
    address public devWallet = 0xD00E37190b860904aC8B1E02517d0af11F53e615;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Sonata Network", "SONA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 4;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 1;
        
        uint256 totalSupply = 1000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn
        maxWallet = totalSupply * 30 / 1000; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = 0xf333Ae72f27ADD83fACca68Dba065eC65Ee61B6B;
        devWallet = 0xD00E37190b860904aC8B1E02517d0af11F53e615; 

        // exclude from paying fees or having max transaction amount
       excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 51, "Must keep fees at 51% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 51, "Must keep fees at 51% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    function manage_blacklist(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        (success,) = address(devWallet).call{value: ethForDev}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        (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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273f333ae72f27add83facca68dba065ec65ee61b6b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d00e37190b860904ac8b1e02517d0af11f53e615600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055503480156200012757600080fd5b506040518060400160405280600e81526020017f536f6e617461204e6574776f726b0000000000000000000000000000000000008152506040518060400160405280600481526020017f534f4e41000000000000000000000000000000000000000000000000000000008152508160039081620001a5919062000ea7565b508060049081620001b7919062000ea7565b5050506000620001cc620006fa60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002978160016200070260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000ff8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000ff8565b6040518363ffffffff1660e01b8152600401620003ea9291906200103b565b6020604051808303816000875af11580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000430919062000ff8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200047860a05160016200070260201b60201c565b6200048d60a0516001620007ff60201b60201c565b600060049050600080600190506000600490506000806001905060006b033b2e3c9fd0803ce800000090506103e8601e82620004ca919062001097565b620004d6919062001111565b6008819055506103e8601e82620004ee919062001097565b620004fa919062001111565b600a8190555061271060058262000512919062001097565b6200051e919062001111565b6009819055508660108190555085601181905550846012819055506012546011546010546200054e919062001149565b6200055a919062001149565b600f819055508360148190555082601581905550816016819055506016546015546014546200058a919062001149565b62000596919062001149565b60138190555073f333ae72f27add83facca68dba065ec65ee61b6b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d00e37190b860904ac8b1e02517d0af11f53e615600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006686200065a620008a060201b60201c565b6001620008ca60201b60201c565b6200067b306001620008ca60201b60201c565b6200069061dead6001620008ca60201b60201c565b620006b2620006a4620008a060201b60201c565b60016200070260201b60201c565b620006c53060016200070260201b60201c565b620006da61dead60016200070260201b60201c565b620006ec338262000a1760201b60201c565b505050505050505062001353565b600033905090565b62000712620006fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079b90620011e5565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008da620006fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096390620011e5565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a0b919062001224565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a809062001291565b60405180910390fd5b62000a9d6000838362000bc560201b60201c565b62000ab98160025462000bca60201b620027b31790919060201c565b60028190555062000b17816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bca60201b620027b31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bb99190620012c4565b60405180910390a35050565b505050565b600080828462000bdb919062001149565b90508381101562000c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1a9062001331565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000caf57607f821691505b60208210810362000cc55762000cc462000c67565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d2f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cf0565b62000d3b868362000cf0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d8862000d8262000d7c8462000d53565b62000d5d565b62000d53565b9050919050565b6000819050919050565b62000da48362000d67565b62000dbc62000db38262000d8f565b84845462000cfd565b825550505050565b600090565b62000dd362000dc4565b62000de081848462000d99565b505050565b5b8181101562000e085762000dfc60008262000dc9565b60018101905062000de6565b5050565b601f82111562000e575762000e218162000ccb565b62000e2c8462000ce0565b8101602085101562000e3c578190505b62000e5462000e4b8562000ce0565b83018262000de5565b50505b505050565b600082821c905092915050565b600062000e7c6000198460080262000e5c565b1980831691505092915050565b600062000e97838362000e69565b9150826002028217905092915050565b62000eb28262000c2d565b67ffffffffffffffff81111562000ece5762000ecd62000c38565b5b62000eda825462000c96565b62000ee782828562000e0c565b600060209050601f83116001811462000f1f576000841562000f0a578287015190505b62000f16858262000e89565b86555062000f86565b601f19841662000f2f8662000ccb565b60005b8281101562000f595784890151825560018201915060208501945060208101905062000f32565b8683101562000f79578489015162000f75601f89168262000e69565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fc08262000f93565b9050919050565b62000fd28162000fb3565b811462000fde57600080fd5b50565b60008151905062000ff28162000fc7565b92915050565b60006020828403121562001011576200101062000f8e565b5b6000620010218482850162000fe1565b91505092915050565b620010358162000fb3565b82525050565b60006040820190506200105260008301856200102a565b6200106160208301846200102a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010a48262000d53565b9150620010b18362000d53565b9250828202620010c18162000d53565b91508282048414831517620010db57620010da62001068565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200111e8262000d53565b91506200112b8362000d53565b9250826200113e576200113d620010e2565b5b828204905092915050565b6000620011568262000d53565b9150620011638362000d53565b92508282019050808211156200117e576200117d62001068565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011cd60208362001184565b9150620011da8262001195565b602082019050919050565b600060208201905081810360008301526200120081620011be565b9050919050565b60008115159050919050565b6200121e8162001207565b82525050565b60006020820190506200123b600083018462001213565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001279601f8362001184565b9150620012868262001241565b602082019050919050565b60006020820190508181036000830152620012ac816200126a565b9050919050565b620012be8162000d53565b82525050565b6000602082019050620012db6000830184620012b3565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001319601b8362001184565b91506200132682620012e1565b602082019050919050565b600060208201905081810360008301526200134c816200130a565b9050919050565b60805160a051615551620013b1600039600081816112a301528181611c3f0152612e7a015260008181610e4d01528181612e2201528181613e3901528181613f1a01528181613f4101528181613fdd015261400401526155516000f3fe60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614143565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fe565b610e0d565b6040516103da9190614259565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614274565b610e2b565b6040516104179190614259565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b6040516104429190614300565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d919061432a565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614274565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c1919061432a565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec919061432a565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614345565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614372565b611106565b6040516105529190614259565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d4565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440b565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fe565b6111ee565b6040516105e59190614259565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d4565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614259565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614274565b6112d8565b6040516106789190614259565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a3919061432a565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614259565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614274565b611347565b60405161070b919061432a565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614259565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614452565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d4565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614452565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f5919061432a565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614492565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d4565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d4565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b6919061432a565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e5565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614143565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614452565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e919061432a565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b604051610989919061432a565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b4919061432a565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fe565b611ceb565b6040516109f19190614259565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fe565b611db8565b604051610a2e9190614259565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614274565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614274565b611f2d565b604051610a949190614259565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614259565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614452565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614492565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614345565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614259565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b90919061432a565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614345565b6122fd565b604051610bcd9190614259565b60405180910390f35b348015610be257600080fd5b50610beb61246d565b604051610bf8919061432a565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614512565b612473565b604051610c35919061432a565b60405180910390f35b348015610c4a57600080fd5b50610c536124fa565b604051610c60919061432a565b60405180910390f35b348015610c7557600080fd5b50610c7e612500565b604051610c8b9190614259565b60405180910390f35b348015610ca057600080fd5b50610ca96125bb565b604051610cb6919061432a565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614274565b6125c1565b005b348015610cf457600080fd5b50610cfd612787565b604051610d0a919061432a565b60405180910390f35b348015610d1f57600080fd5b50610d2861278d565b604051610d35919061432a565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614274565b612793565b604051610d729190614259565b60405180910390f35b606060038054610d8a90614581565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614581565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612811565b8484612819565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e81612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fe565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fe565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464d565b61109d91906146be565b6110a791906146be565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614761565b60405180910390fd5b670de0b6b3a7640000816110fd919061464d565b60088190555050565b60006111138484846129e2565b6111d48461111f612811565b6111cf856040518060600160405280602881526020016154cf60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b612819565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612811565b84611292856001600061120c612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b612819565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fe565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fe565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fe565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ed565b6118ea91906147ed565b600f819055506033600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486d565b60405180910390fd5b505050565b611943612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fe565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fe565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614581565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614581565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fe565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148ff565b60405180910390fd5b611cd582826137a4565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612811565b84611da9856040518060600160405280602581526020016154f76025913960016000611d22612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b612819565b6001905092915050565b6000611dcc611dc5612811565b84846129e2565b6001905092915050565b611dde612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fe565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fe565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614259565b60405180910390a25050565b6120a8612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fe565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ed565b61216991906147ed565b601381905550603360135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486d565b60405180910390fd5b505050565b6121c2612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fe565b60405180910390fd5b670de0b6b3a76400006103e86001612267610e6f565b612271919061464d565b61227b91906146be565b61228591906146be565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614991565b60405180910390fd5b670de0b6b3a7640000816122db919061464d565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fe565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464d565b6123b891906146be565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a23565b60405180910390fd5b6103e86005612407610e6f565b612411919061464d565b61241b91906146be565b82111561245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490614ab5565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061250a612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612590906145fe565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c9612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614b47565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c291906147ed565b905083811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614bb3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614c45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee90614cd7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d5919061432a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4890614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614dfb565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b645750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a90614e67565b60405180910390fd5b60008103612bbc57612bb783836000613845565b61373b565b600b60009054906101000a900460ff161561327f57612bd9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c475750612c17611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c805750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cba575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd35750600560149054906101000a900460ff16155b1561327e57600b60019054906101000a900460ff16612dcd57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc390614ed3565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9557612dea611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f945743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690614f8b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130385750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130df57600854811115613082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130799061501d565b60405180910390fd5b600a5461308e83611347565b8261309991906147ed565b11156130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d190615089565b60405180910390fd5b61327d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131825750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d1576008548111156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c39061511b565b60405180910390fd5b61327c565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327b57600a5461322e83611347565b8261323991906147ed565b111561327a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327190615089565b60405180910390fd5b5b5b5b5b5b600061328a30611347565b9050600060095482101590508080156132af5750600b60029054906101000a900460ff165b80156132c85750600560149054906101000a900460ff16155b801561331e5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133745750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ca5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340e576001600560146101000a81548160ff0219169083151502179055506133f2613ad8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c45750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134ce57600090505b6000811561372b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353157506000601354115b156135f057606460135486613546919061464d565b61355091906146be565b905060135460155482613563919061464d565b61356d91906146be565b6018600082825461357e91906147ed565b9250508190555060135460165482613596919061464d565b6135a091906146be565b601960008282546135b191906147ed565b92505081905550601354601454826135c9919061464d565b6135d391906146be565b601760008282546135e491906147ed565b92505081905550613707565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364b57506000600f54115b15613706576064600f5486613660919061464d565b61366a91906146be565b9050600f546011548261367d919061464d565b61368791906146be565b6018600082825461369891906147ed565b92505081905550600f54601254826136b0919061464d565b6136ba91906146be565b601960008282546136cb91906147ed565b92505081905550600f54601054826136e3919061464d565b6136ed91906146be565b601760008282546136fe91906147ed565b925050819055505b5b600081111561371c5761371b873083613845565b5b8085613728919061513b565b94505b613736878787613845565b505050505b505050565b6000838311158290613788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377f9190614143565b60405180910390fd5b5060008385613797919061513b565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ab90614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391a90614dfb565b60405180910390fd5b61392e838383613d95565b613999816040518060600160405280602681526020016154a9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613acb919061432a565b60405180910390a3505050565b6000613ae330611347565b90506000601954601754601854613afa91906147ed565b613b0491906147ed565b9050600080831480613b165750600082145b15613b2357505050613d93565b6014600954613b32919061464d565b831115613b4b576014600954613b48919061464d565b92505b600060028360185486613b5e919061464d565b613b6891906146be565b613b7291906146be565b905060008185613b82919061513b565b90506000479050613b9282613d9a565b60008147613ba0919061513b565b905060008660175483613bb3919061464d565b613bbd91906146be565b905060008760195484613bd0919061464d565b613bda91906146be565b90506000818385613beb919061513b565b613bf5919061513b565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c55906151a0565b60006040518083038185875af1925050503d8060008114613c92576040519150601f19603f3d011682016040523d82523d6000602084013e613c97565b606091505b505080985050600087118015613cad5750600081115b15613cfa57613cbc8782613fd7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf1939291906151b5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d40906151a0565b60006040518083038185875af1925050503d8060008114613d7d576040519150601f19603f3d011682016040523d82523d6000602084013e613d82565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db757613db66151ec565b5b604051908082528060200260200182016040528015613de55781602001602082028036833780820191505090505b5090503081600081518110613dfd57613dfc61521b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec6919061525f565b81600181518110613eda57613ed961521b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3f307f000000000000000000000000000000000000000000000000000000000000000084612819565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa1959493929190615385565b600060405180830381600087803b158015613fbb57600080fd5b505af1158015613fcf573d6000803e3d6000fd5b505050505050565b614002307f000000000000000000000000000000000000000000000000000000000000000084612819565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614069969594939291906153df565b60606040518083038185885af1158015614087573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ac9190615455565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ed5780820151818401526020810190506140d2565b60008484015250505050565b6000601f19601f8301169050919050565b6000614115826140b3565b61411f81856140be565b935061412f8185602086016140cf565b614138816140f9565b840191505092915050565b6000602082019050818103600083015261415d818461410a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141958261416a565b9050919050565b6141a58161418a565b81146141b057600080fd5b50565b6000813590506141c28161419c565b92915050565b6000819050919050565b6141db816141c8565b81146141e657600080fd5b50565b6000813590506141f8816141d2565b92915050565b6000806040838503121561421557614214614165565b5b6000614223858286016141b3565b9250506020614234858286016141e9565b9150509250929050565b60008115159050919050565b6142538161423e565b82525050565b600060208201905061426e600083018461424a565b92915050565b60006020828403121561428a57614289614165565b5b6000614298848285016141b3565b91505092915050565b6000819050919050565b60006142c66142c16142bc8461416a565b6142a1565b61416a565b9050919050565b60006142d8826142ab565b9050919050565b60006142ea826142cd565b9050919050565b6142fa816142df565b82525050565b600060208201905061431560008301846142f1565b92915050565b614324816141c8565b82525050565b600060208201905061433f600083018461431b565b92915050565b60006020828403121561435b5761435a614165565b5b6000614369848285016141e9565b91505092915050565b60008060006060848603121561438b5761438a614165565b5b6000614399868287016141b3565b93505060206143aa868287016141b3565b92505060406143bb868287016141e9565b9150509250925092565b6143ce8161418a565b82525050565b60006020820190506143e960008301846143c5565b92915050565b600060ff82169050919050565b614405816143ef565b82525050565b600060208201905061442060008301846143fc565b92915050565b61442f8161423e565b811461443a57600080fd5b50565b60008135905061444c81614426565b92915050565b6000806040838503121561446957614468614165565b5b6000614477858286016141b3565b92505060206144888582860161443d565b9150509250929050565b6000806000606084860312156144ab576144aa614165565b5b60006144b9868287016141e9565b93505060206144ca868287016141e9565b92505060406144db868287016141e9565b9150509250925092565b6000602082840312156144fb576144fa614165565b5b60006145098482850161443d565b91505092915050565b6000806040838503121561452957614528614165565b5b6000614537858286016141b3565b9250506020614548858286016141b3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459957607f821691505b6020821081036145ac576145ab614552565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e86020836140be565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614658826141c8565b9150614663836141c8565b9250828202614671816141c8565b915082820484148315176146885761468761461e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c9826141c8565b91506146d4836141c8565b9250826146e4576146e361468f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474b602f836140be565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b76017836140be565b91506147c282614781565b602082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b60006147f8826141c8565b9150614803836141c8565b925082820190508082111561481b5761481a61461e565b5b92915050565b7f4d757374206b656570206665657320617420353125206f72206c657373000000600082015250565b6000614857601d836140be565b915061486282614821565b602082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e96039836140be565b91506148f48261488d565b604082019050919050565b60006020820190508181036000830152614918816148dc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061497b6022836140be565b91506149868261491f565b604082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0d6035836140be565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a9f6034836140be565b9150614aaa82614a43565b604082019050919050565b60006020820190508181036000830152614ace81614a92565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b316026836140be565b9150614b3c82614ad5565b604082019050919050565b60006020820190508181036000830152614b6081614b24565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9d601b836140be565b9150614ba882614b67565b602082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2f6024836140be565b9150614c3a82614bd3565b604082019050919050565b60006020820190508181036000830152614c5e81614c22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc16022836140be565b9150614ccc82614c65565b604082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d536025836140be565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de56023836140be565b9150614df082614d89565b604082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e51600b836140be565b9150614e5c82614e1b565b602082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebd6016836140be565b9150614ec882614e87565b602082019050919050565b60006020820190508181036000830152614eec81614eb0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f756049836140be565b9150614f8082614ef3565b606082019050919050565b60006020820190508181036000830152614fa481614f68565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150076035836140be565b915061501282614fab565b604082019050919050565b6000602082019050818103600083015261503681614ffa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150736013836140be565b915061507e8261503d565b602082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151056036836140be565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b6000615146826141c8565b9150615151836141c8565b92508282039050818111156151695761516861461e565b5b92915050565b600081905092915050565b50565b600061518a60008361516f565b91506151958261517a565b600082019050919050565b60006151ab8261517d565b9150819050919050565b60006060820190506151ca600083018661431b565b6151d7602083018561431b565b6151e4604083018461431b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152598161419c565b92915050565b60006020828403121561527557615274614165565b5b60006152838482850161524a565b91505092915050565b6000819050919050565b60006152b16152ac6152a78461528c565b6142a1565b6141c8565b9050919050565b6152c181615296565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fc8161418a565b82525050565b600061530e83836152f3565b60208301905092915050565b6000602082019050919050565b6000615332826152c7565b61533c81856152d2565b9350615347836152e3565b8060005b8381101561537857815161535f8882615302565b975061536a8361531a565b92505060018101905061534b565b5085935050505092915050565b600060a08201905061539a600083018861431b565b6153a760208301876152b8565b81810360408301526153b98186615327565b90506153c860608301856143c5565b6153d5608083018461431b565b9695505050505050565b600060c0820190506153f460008301896143c5565b615401602083018861431b565b61540e60408301876152b8565b61541b60608301866152b8565b61542860808301856143c5565b61543560a083018461431b565b979650505050505050565b60008151905061544f816141d2565b92915050565b60008060006060848603121561546e5761546d614165565b5b600061547c86828701615440565b935050602061548d86828701615440565b925050604061549e86828701615440565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bfecafc13fc817fb004c3de5974254f002453cd43d2e8592d341b5c9fb86dd6c64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610cbf578063f637434214610ce8578063f8b45b0514610d13578063fe575a8714610d3e57610376565b8063e2f4560514610c3e578063e884f26014610c69578063f11a24d314610c9457610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b6e578063d257b34f14610b99578063d85ba06314610bd6578063dd62ed3e14610c0157610376565b8063c17b5b8c14610af1578063c18bc19514610b1a578063c876d0b914610b4357610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a37578063b62496f514610a60578063bbc0c74214610a9d578063c024666814610ac857610376565b8063a0d82dc514610992578063a457c2d7146109bd578063a9059cbb146109fa57610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638ea5220f146108695780639213691314610894578063924de9b7146108bf57610376565b80634a62bb65116102a05780637571336a1161023e5780637bce5a04116102185780637bce5a04146107d35780638095d564146107fe5780638a8c523c146108275780638da5cb5b1461083e57610376565b80637571336a1461075657806375f0a8741461077f5780637804389f146107aa57610376565b80636ddd17131161027a5780636ddd1713146106ac57806370a08231146106d7578063715018a614610714578063751039fc1461072b57610376565b80634a62bb65146106195780634fbee193146106445780636a486a8e1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7b565b60405161039d9190614143565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fe565b610e0d565b6040516103da9190614259565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614274565b610e2b565b6040516104179190614259565b60405180910390f35b34801561042c57600080fd5b50610435610e4b565b6040516104429190614300565b60405180910390f35b34801561045757600080fd5b50610460610e6f565b60405161046d919061432a565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614274565b610e79565b005b3480156104ab57600080fd5b506104b4610fd0565b6040516104c1919061432a565b60405180910390f35b3480156104d657600080fd5b506104df610fd6565b6040516104ec919061432a565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614345565b610fdc565b005b34801561052a57600080fd5b5061054560048036038101906105409190614372565b611106565b6040516105529190614259565b60405180910390f35b34801561056757600080fd5b506105706111df565b60405161057d91906143d4565b60405180910390f35b34801561059257600080fd5b5061059b6111e5565b6040516105a8919061440b565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906141fe565b6111ee565b6040516105e59190614259565b60405180910390f35b3480156105fa57600080fd5b506106036112a1565b60405161061091906143d4565b60405180910390f35b34801561062557600080fd5b5061062e6112c5565b60405161063b9190614259565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614274565b6112d8565b6040516106789190614259565b60405180910390f35b34801561068d57600080fd5b5061069661132e565b6040516106a3919061432a565b60405180910390f35b3480156106b857600080fd5b506106c1611334565b6040516106ce9190614259565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614274565b611347565b60405161070b919061432a565b60405180910390f35b34801561072057600080fd5b5061072961138f565b005b34801561073757600080fd5b506107406114e7565b60405161074d9190614259565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614452565b6115a2565b005b34801561078b57600080fd5b50610794611694565b6040516107a191906143d4565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190614452565b6116ba565b005b3480156107df57600080fd5b506107e861181b565b6040516107f5919061432a565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190614492565b611821565b005b34801561083357600080fd5b5061083c61193b565b005b34801561084a57600080fd5b50610853611a0a565b60405161086091906143d4565b60405180910390f35b34801561087557600080fd5b5061087e611a34565b60405161088b91906143d4565b60405180910390f35b3480156108a057600080fd5b506108a9611a5a565b6040516108b6919061432a565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906144e5565b611a60565b005b3480156108f457600080fd5b506108fd611b14565b60405161090a9190614143565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190614452565b611ba6565b005b34801561094857600080fd5b50610951611cd9565b60405161095e919061432a565b60405180910390f35b34801561097357600080fd5b5061097c611cdf565b604051610989919061432a565b60405180910390f35b34801561099e57600080fd5b506109a7611ce5565b6040516109b4919061432a565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906141fe565b611ceb565b6040516109f19190614259565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906141fe565b611db8565b604051610a2e9190614259565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a599190614274565b611dd6565b005b348015610a6c57600080fd5b50610a876004803603810190610a829190614274565b611f2d565b604051610a949190614259565b60405180910390f35b348015610aa957600080fd5b50610ab2611f4d565b604051610abf9190614259565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190614452565b611f60565b005b348015610afd57600080fd5b50610b186004803603810190610b139190614492565b6120a0565b005b348015610b2657600080fd5b50610b416004803603810190610b3c9190614345565b6121ba565b005b348015610b4f57600080fd5b50610b586122e4565b604051610b659190614259565b60405180910390f35b348015610b7a57600080fd5b50610b836122f7565b604051610b90919061432a565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190614345565b6122fd565b604051610bcd9190614259565b60405180910390f35b348015610be257600080fd5b50610beb61246d565b604051610bf8919061432a565b60405180910390f35b348015610c0d57600080fd5b50610c286004803603810190610c239190614512565b612473565b604051610c35919061432a565b60405180910390f35b348015610c4a57600080fd5b50610c536124fa565b604051610c60919061432a565b60405180910390f35b348015610c7557600080fd5b50610c7e612500565b604051610c8b9190614259565b60405180910390f35b348015610ca057600080fd5b50610ca96125bb565b604051610cb6919061432a565b60405180910390f35b348015610ccb57600080fd5b50610ce66004803603810190610ce19190614274565b6125c1565b005b348015610cf457600080fd5b50610cfd612787565b604051610d0a919061432a565b60405180910390f35b348015610d1f57600080fd5b50610d2861278d565b604051610d35919061432a565b60405180910390f35b348015610d4a57600080fd5b50610d656004803603810190610d609190614274565b612793565b604051610d729190614259565b60405180910390f35b606060038054610d8a90614581565b80601f0160208091040260200160405190810160405280929190818152602001828054610db690614581565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b5050505050905090565b6000610e21610e1a612811565b8484612819565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e81612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906145fe565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fe4612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906145fe565b60405180910390fd5b670de0b6b3a76400006103e86001611089610e6f565b611093919061464d565b61109d91906146be565b6110a791906146be565b8110156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614761565b60405180910390fd5b670de0b6b3a7640000816110fd919061464d565b60088190555050565b60006111138484846129e2565b6111d48461111f612811565b6111cf856040518060600160405280602881526020016154cf60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611185612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b612819565b600190509392505050565b61dead81565b60006012905090565b60006112976111fb612811565b84611292856001600061120c612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b612819565b6001905092915050565b7f000000000000000000000000147bead0b921b2a33f34558c5764ec251f36ba6f81565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611397612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114f1612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906145fe565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115aa612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906145fe565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c2612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b7906147cd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611829612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906145fe565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118e091906147ed565b6118ea91906147ed565b600f819055506033600f541115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d9061486d565b60405180910390fd5b505050565b611943612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906145fe565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a68612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906145fe565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b2390614581565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90614581565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906145fe565b60405180910390fd5b7f000000000000000000000000147bead0b921b2a33f34558c5764ec251f36ba6f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906148ff565b60405180910390fd5b611cd582826137a4565b5050565b60125481565b60195481565b60165481565b6000611dae611cf8612811565b84611da9856040518060600160405280602581526020016154f76025913960016000611d22612811565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b612819565b6001905092915050565b6000611dcc611dc5612811565b84846129e2565b6001905092915050565b611dde612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e64906145fe565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f68612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee906145fe565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120949190614259565b60405180910390a25050565b6120a8612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145fe565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461215f91906147ed565b61216991906147ed565b601381905550603360135411156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061486d565b60405180910390fd5b505050565b6121c2612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612248906145fe565b60405180910390fd5b670de0b6b3a76400006103e86001612267610e6f565b612271919061464d565b61227b91906146be565b61228591906146be565b8110156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614991565b60405180910390fd5b670de0b6b3a7640000816122db919061464d565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612307612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906145fe565b60405180910390fd5b620186a060016123a4610e6f565b6123ae919061464d565b6123b891906146be565b8210156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190614a23565b60405180910390fd5b6103e86005612407610e6f565b612411919061464d565b61241b91906146be565b82111561245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490614ab5565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061250a612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612590906145fe565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6125c9612811565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f906145fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614b47565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008082846127c291906147ed565b905083811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614bb3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614c45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee90614cd7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129d5919061432a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4890614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614dfb565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b645750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a90614e67565b60405180910390fd5b60008103612bbc57612bb783836000613845565b61373b565b600b60009054906101000a900460ff161561327f57612bd9611a0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c475750612c17611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c805750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cba575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd35750600560149054906101000a900460ff16155b1561327e57600b60019054906101000a900460ff16612dcd57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc390614ed3565b60405180910390fd5b5b600e60009054906101000a900460ff1615612f9557612dea611a0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec957507f000000000000000000000000147bead0b921b2a33f34558c5764ec251f36ba6f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f945743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690614f8b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130385750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130df57600854811115613082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130799061501d565b60405180910390fd5b600a5461308e83611347565b8261309991906147ed565b11156130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d190615089565b60405180910390fd5b61327d565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131825750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d1576008548111156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c39061511b565b60405180910390fd5b61327c565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327b57600a5461322e83611347565b8261323991906147ed565b111561327a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327190615089565b60405180910390fd5b5b5b5b5b5b600061328a30611347565b9050600060095482101590508080156132af5750600b60029054906101000a900460ff165b80156132c85750600560149054906101000a900460ff16155b801561331e5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133745750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ca5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340e576001600560146101000a81548160ff0219169083151502179055506133f2613ad8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134c45750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134ce57600090505b6000811561372b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561353157506000601354115b156135f057606460135486613546919061464d565b61355091906146be565b905060135460155482613563919061464d565b61356d91906146be565b6018600082825461357e91906147ed565b9250508190555060135460165482613596919061464d565b6135a091906146be565b601960008282546135b191906147ed565b92505081905550601354601454826135c9919061464d565b6135d391906146be565b601760008282546135e491906147ed565b92505081905550613707565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364b57506000600f54115b15613706576064600f5486613660919061464d565b61366a91906146be565b9050600f546011548261367d919061464d565b61368791906146be565b6018600082825461369891906147ed565b92505081905550600f54601254826136b0919061464d565b6136ba91906146be565b601960008282546136cb91906147ed565b92505081905550600f54601054826136e3919061464d565b6136ed91906146be565b601760008282546136fe91906147ed565b925050819055505b5b600081111561371c5761371b873083613845565b5b8085613728919061513b565b94505b613736878787613845565b505050505b505050565b6000838311158290613788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377f9190614143565b60405180910390fd5b5060008385613797919061513b565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ab90614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391a90614dfb565b60405180910390fd5b61392e838383613d95565b613999816040518060600160405280602681526020016154a9602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137409092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613acb919061432a565b60405180910390a3505050565b6000613ae330611347565b90506000601954601754601854613afa91906147ed565b613b0491906147ed565b9050600080831480613b165750600082145b15613b2357505050613d93565b6014600954613b32919061464d565b831115613b4b576014600954613b48919061464d565b92505b600060028360185486613b5e919061464d565b613b6891906146be565b613b7291906146be565b905060008185613b82919061513b565b90506000479050613b9282613d9a565b60008147613ba0919061513b565b905060008660175483613bb3919061464d565b613bbd91906146be565b905060008760195484613bd0919061464d565b613bda91906146be565b90506000818385613beb919061513b565b613bf5919061513b565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c55906151a0565b60006040518083038185875af1925050503d8060008114613c92576040519150601f19603f3d011682016040523d82523d6000602084013e613c97565b606091505b505080985050600087118015613cad5750600081115b15613cfa57613cbc8782613fd7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613cf1939291906151b5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d40906151a0565b60006040518083038185875af1925050503d8060008114613d7d576040519150601f19603f3d011682016040523d82523d6000602084013e613d82565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613db757613db66151ec565b5b604051908082528060200260200182016040528015613de55781602001602082028036833780820191505090505b5090503081600081518110613dfd57613dfc61521b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec6919061525f565b81600181518110613eda57613ed961521b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f3f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612819565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fa1959493929190615385565b600060405180830381600087803b158015613fbb57600080fd5b505af1158015613fcf573d6000803e3d6000fd5b505050505050565b614002307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612819565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614069969594939291906153df565b60606040518083038185885af1158015614087573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140ac9190615455565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140ed5780820151818401526020810190506140d2565b60008484015250505050565b6000601f19601f8301169050919050565b6000614115826140b3565b61411f81856140be565b935061412f8185602086016140cf565b614138816140f9565b840191505092915050565b6000602082019050818103600083015261415d818461410a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141958261416a565b9050919050565b6141a58161418a565b81146141b057600080fd5b50565b6000813590506141c28161419c565b92915050565b6000819050919050565b6141db816141c8565b81146141e657600080fd5b50565b6000813590506141f8816141d2565b92915050565b6000806040838503121561421557614214614165565b5b6000614223858286016141b3565b9250506020614234858286016141e9565b9150509250929050565b60008115159050919050565b6142538161423e565b82525050565b600060208201905061426e600083018461424a565b92915050565b60006020828403121561428a57614289614165565b5b6000614298848285016141b3565b91505092915050565b6000819050919050565b60006142c66142c16142bc8461416a565b6142a1565b61416a565b9050919050565b60006142d8826142ab565b9050919050565b60006142ea826142cd565b9050919050565b6142fa816142df565b82525050565b600060208201905061431560008301846142f1565b92915050565b614324816141c8565b82525050565b600060208201905061433f600083018461431b565b92915050565b60006020828403121561435b5761435a614165565b5b6000614369848285016141e9565b91505092915050565b60008060006060848603121561438b5761438a614165565b5b6000614399868287016141b3565b93505060206143aa868287016141b3565b92505060406143bb868287016141e9565b9150509250925092565b6143ce8161418a565b82525050565b60006020820190506143e960008301846143c5565b92915050565b600060ff82169050919050565b614405816143ef565b82525050565b600060208201905061442060008301846143fc565b92915050565b61442f8161423e565b811461443a57600080fd5b50565b60008135905061444c81614426565b92915050565b6000806040838503121561446957614468614165565b5b6000614477858286016141b3565b92505060206144888582860161443d565b9150509250929050565b6000806000606084860312156144ab576144aa614165565b5b60006144b9868287016141e9565b93505060206144ca868287016141e9565b92505060406144db868287016141e9565b9150509250925092565b6000602082840312156144fb576144fa614165565b5b60006145098482850161443d565b91505092915050565b6000806040838503121561452957614528614165565b5b6000614537858286016141b3565b9250506020614548858286016141b3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061459957607f821691505b6020821081036145ac576145ab614552565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145e86020836140be565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614658826141c8565b9150614663836141c8565b9250828202614671816141c8565b915082820484148315176146885761468761461e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c9826141c8565b91506146d4836141c8565b9250826146e4576146e361468f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061474b602f836140be565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b60006147b76017836140be565b91506147c282614781565b602082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b60006147f8826141c8565b9150614803836141c8565b925082820190508082111561481b5761481a61461e565b5b92915050565b7f4d757374206b656570206665657320617420353125206f72206c657373000000600082015250565b6000614857601d836140be565b915061486282614821565b602082019050919050565b600060208201905081810360008301526148868161484a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148e96039836140be565b91506148f48261488d565b604082019050919050565b60006020820190508181036000830152614918816148dc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061497b6022836140be565b91506149868261491f565b604082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a0d6035836140be565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a9f6034836140be565b9150614aaa82614a43565b604082019050919050565b60006020820190508181036000830152614ace81614a92565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b316026836140be565b9150614b3c82614ad5565b604082019050919050565b60006020820190508181036000830152614b6081614b24565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b9d601b836140be565b9150614ba882614b67565b602082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2f6024836140be565b9150614c3a82614bd3565b604082019050919050565b60006020820190508181036000830152614c5e81614c22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc16022836140be565b9150614ccc82614c65565b604082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d536025836140be565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614de56023836140be565b9150614df082614d89565b604082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614e51600b836140be565b9150614e5c82614e1b565b602082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ebd6016836140be565b9150614ec882614e87565b602082019050919050565b60006020820190508181036000830152614eec81614eb0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f756049836140be565b9150614f8082614ef3565b606082019050919050565b60006020820190508181036000830152614fa481614f68565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150076035836140be565b915061501282614fab565b604082019050919050565b6000602082019050818103600083015261503681614ffa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150736013836140be565b915061507e8261503d565b602082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151056036836140be565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b6000615146826141c8565b9150615151836141c8565b92508282039050818111156151695761516861461e565b5b92915050565b600081905092915050565b50565b600061518a60008361516f565b91506151958261517a565b600082019050919050565b60006151ab8261517d565b9150819050919050565b60006060820190506151ca600083018661431b565b6151d7602083018561431b565b6151e4604083018461431b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152598161419c565b92915050565b60006020828403121561527557615274614165565b5b60006152838482850161524a565b91505092915050565b6000819050919050565b60006152b16152ac6152a78461528c565b6142a1565b6141c8565b9050919050565b6152c181615296565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fc8161418a565b82525050565b600061530e83836152f3565b60208301905092915050565b6000602082019050919050565b6000615332826152c7565b61533c81856152d2565b9350615347836152e3565b8060005b8381101561537857815161535f8882615302565b975061536a8361531a565b92505060018101905061534b565b5085935050505092915050565b600060a08201905061539a600083018861431b565b6153a760208301876152b8565b81810360408301526153b98186615327565b90506153c860608301856143c5565b6153d5608083018461431b565b9695505050505050565b600060c0820190506153f460008301896143c5565b615401602083018861431b565b61540e60408301876152b8565b61541b60608301866152b8565b61542860808301856143c5565b61543560a083018461431b565b979650505050505050565b60008151905061544f816141d2565b92915050565b60008060006060848603121561546e5761546d614165565b5b600061547c86828701615440565b935050602061548d86828701615440565b925050604061549e86828701615440565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bfecafc13fc817fb004c3de5974254f002453cd43d2e8592d341b5c9fb86dd6c64736f6c63430008110033

Deployed Bytecode Sourcemap

10245:15363:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2922:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11720:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10286:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2369:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18295:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11499:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11459;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15846:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3097:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10389:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2286:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3458:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10344:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10760:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18466:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11310:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10840:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2467:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7797:148;;;;;;;;;;;;;:::i;:::-;;15059:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16313:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10481:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18599:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11199:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16670:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14891:112;;;;;;;;;;;;;:::i;:::-;;7603:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10563:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11345:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16557:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2192:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17627:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11273:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11539:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11421:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3682:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2584:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18075:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11942:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10800:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17437:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17051:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16088:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11116:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10645:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15453:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11165:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2765:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10687:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15244:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11236:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7951:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11383:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10727:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11063:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2102:84;2156:13;2179:5;2172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:84;:::o;2922:169::-;3005:4;3022:39;3031:12;:10;:12::i;:::-;3045:7;3054:6;3022:8;:39::i;:::-;3079:4;3072:11;;2922:169;;;;:::o;11720:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;10286:51::-;;;:::o;2369:92::-;2430:7;2447:12;;2440:19;;2369:92;:::o;18295:157::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18402:9:::1;;;;;;;;;;;18374:38;;18391:9;18374:38;;;;;;;;;;;;18435:9;18423;;:21;;;;;;;;;;;;;;;;;;18295:157:::0;:::o;11499:33::-;;;;:::o;11459:::-;;;;:::o;15846:234::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15965:4:::1;15959;15955:1;15939:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;15938:31;;;;:::i;:::-;15928:6;:41;;15920:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;16065:6;16055;:17;;;;:::i;:::-;16032:20;:40;;;;15846:234:::0;:::o;3097:355::-;3237:4;3254:36;3264:6;3272:9;3283:6;3254:9;:36::i;:::-;3301:121;3310:6;3318:12;:10;:12::i;:::-;3332:89;3370:6;3332:89;;;;;;;;;;;;;;;;;:11;:19;3344:6;3332:19;;;;;;;;;;;;;;;:33;3352:12;:10;:12::i;:::-;3332:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3301:8;:121::i;:::-;3440:4;3433:11;;3097:355;;;;;:::o;10389:53::-;10435:6;10389:53;:::o;2286:77::-;2344:5;2359:2;2352:9;;2286:77;:::o;3458:218::-;3546:4;3563:83;3572:12;:10;:12::i;:::-;3586:7;3595:50;3634:10;3595:11;:25;3607:12;:10;:12::i;:::-;3595:25;;;;;;;;;;;;;;;:34;3621:7;3595:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3563:8;:83::i;:::-;3664:4;3657:11;;3458:218;;;;:::o;10344:38::-;;;:::o;10760:33::-;;;;;;;;;;;;;:::o;18466:125::-;18531:4;18555:19;:28;18575:7;18555:28;;;;;;;;;;;;;;;;;;;;;;;;;18548:35;;18466:125;;;:::o;11310:28::-;;;;:::o;10840:31::-;;;;;;;;;;;;;:::o;2467:111::-;2541:7;2558:9;:18;2568:7;2558:18;;;;;;;;;;;;;;;;2551:25;;2467:111;;;:::o;7797:148::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7904:1:::1;7867:40;;7888:6;;;;;;;;;;;7867:40;;;;;;;;;;;;7935:1;7918:6;;:19;;;;;;;;;;;;;;;;;;7797:148::o:0;15059:120::-;15111:4;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15144:5:::1;15127:14;;:22;;;;;;;;;;;;;;;;;;15167:4;15160:11;;15059:120:::0;:::o;16313:144::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16445:4:::1;16403:31;:39;16435:6;16403:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16313:144:::0;;:::o;10481:75::-;;;;;;;;;;;;;:::o;18599:195::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18714:1:::1;18694:22;;:8;:22;;::::0;18686:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18780:6;18754:13;:23;18768:8;18754:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18599:195:::0;;:::o;11199:30::-;;;;:::o;16670:369::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16804:13:::1;16786:15;:31;;;;16846:13;16828:15;:31;;;;16882:7;16870:9;:19;;;;16951:9;;16933:15;;16915;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;16900:12;:60;;;;16995:2;16979:12;;:18;;16971:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16670:369:::0;;;:::o;14891:112::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14962:4:::1;14946:13;;:20;;;;;;;;;;;;;;;;;;14991:4;14977:11;;:18;;;;;;;;;;;;;;;;;;14891:112::o:0;7603:63::-;7641:7;7658:6;;;;;;;;;;;7651:13;;7603:63;:::o;10563:69::-;;;;;;;;;;;;;:::o;11345:31::-;;;;:::o;16557:101::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16643:7:::1;16629:11;;:21;;;;;;;;;;;;;;;;;;16557:101:::0;:::o;2192:88::-;2248:13;2271:7;2264:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2192:88;:::o;17627:244::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17734:13:::1;17726:21;;:4;:21;;::::0;17718:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17822:41;17851:4;17857:5;17822:28;:41::i;:::-;17627:244:::0;;:::o;11273:24::-;;;;:::o;11539:27::-;;;;:::o;11421:25::-;;;;:::o;3682:269::-;3775:4;3792:129;3801:12;:10;:12::i;:::-;3815:7;3824:96;3863:15;3824:96;;;;;;;;;;;;;;;;;:11;:25;3836:12;:10;:12::i;:::-;3824:25;;;;;;;;;;;;;;;:34;3850:7;3824:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3792:8;:129::i;:::-;3939:4;3932:11;;3682:269;;;;:::o;2584:175::-;2670:4;2687:42;2697:12;:10;:12::i;:::-;2711:9;2722:6;2687:9;:42::i;:::-;2747:4;2740:11;;2584:175;;;;:::o;18075:208::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18212:15:::1;;;;;;;;;;;18169:59;;18192:18;18169:59;;;;;;;;;;;;18257:18;18239:15;;:36;;;;;;;;;;;;;;;;;;18075:208:::0;:::o;11942:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;10800:33::-;;;;;;;;;;;;;:::o;17437:182::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17553:8:::1;17522:19;:28;17542:7;17522:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17593:7;17577:34;;;17602:8;17577:34;;;;;;:::i;:::-;;;;;;;;17437:182:::0;;:::o;17051:378::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17187:13:::1;17168:16;:32;;;;17230:13;17211:16;:32;;;;17267:7;17254:10;:20;;;;17339:10;;17320:16;;17301;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;17285:13;:64;;;;17385:2;17368:13;;:19;;17360:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;17051:378:::0;;;:::o;16088:213::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16210:4:::1;16204;16200:1;16184:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16183:31;;;;:::i;:::-;16173:6;:41;;16165:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;16286:6;16276;:17;;;;:::i;:::-;16264:9;:29;;;;16088:213:::0;:::o;11116:40::-;;;;;;;;;;;;;:::o;10645:35::-;;;;:::o;15453:381::-;15534:4;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15590:6:::1;15586:1;15570:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;15557:9;:39;;15549:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;15705:4;15701:1;15685:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;15672:9;:37;;15664:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;15797:9;15776:18;:30;;;;15823:4;15816:11;;15453:381:::0;;;:::o;11165:27::-;;;;:::o;2765:151::-;2854:7;2881:11;:18;2893:5;2881:18;;;;;;;;;;;;;;;:27;2900:7;2881:27;;;;;;;;;;;;;;;;2874:34;;2765:151;;;;:::o;10687:33::-;;;;:::o;15244:134::-;15304:4;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15343:5:::1;15320:20;;:28;;;;;;;;;;;;;;;;;;15366:4;15359:11;;15244:134:::0;:::o;11236:30::-;;;;:::o;7951:244::-;7722:12;:10;:12::i;:::-;7712:22;;:6;;;;;;;;;;;:22;;;7704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8060:1:::1;8040:22;;:8;:22;;::::0;8032:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8150:8;8121:38;;8142:6;;;;;;;;;;;8121:38;;;;;;;;;;;;8179:8;8170:6;;:17;;;;;;;;;;;;;;;;;;7951:244:::0;:::o;11383:31::-;;;;:::o;10727:24::-;;;;:::o;11063:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;5872:179::-;5930:7;5950:9;5966:1;5962;:5;;;;:::i;:::-;5950:17;;5991:1;5986;:6;;5978:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6042:1;6035:8;;;5872:179;;;;:::o;175:98::-;228:7;255:10;248:17;;175:98;:::o;5332:378::-;5485:1;5468:19;;:5;:19;;;5460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5566:1;5547:21;;:7;:21;;;5539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5648:6;5618:11;:18;5630:5;5618:18;;;;;;;;;;;;;;;:27;5637:7;5618:27;;;;;;;;;;;;;;;:36;;;;5686:7;5670:32;;5679:5;5670:32;;;5695:6;5670:32;;;;;;:::i;:::-;;;;;;;;5332:378;;;:::o;18802:4174::-;18950:1;18934:18;;:4;:18;;;18926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19027:1;19013:16;;:2;:16;;;19005:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19089:13;:19;19103:4;19089:19;;;;;;;;;;;;;;;;;;;;;;;;;19088:20;:42;;;;;19113:13;:17;19127:2;19113:17;;;;;;;;;;;;;;;;;;;;;;;;;19112:18;19088:42;19080:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19180:1;19170:6;:11;19167:92;;19198:28;19214:4;19220:2;19224:1;19198:15;:28::i;:::-;19241:7;;19167:92;19282:14;;;;;;;;;;;19279:1841;;;19342:7;:5;:7::i;:::-;19334:15;;:4;:15;;;;:49;;;;;19376:7;:5;:7::i;:::-;19370:13;;:2;:13;;;;19334:49;:86;;;;;19418:1;19404:16;;:2;:16;;;;19334:86;:128;;;;;19455:6;19441:21;;:2;:21;;;;19334:128;:158;;;;;19484:8;;;;;;;;;;;19483:9;19334:158;19312:1797;;;19530:13;;;;;;;;;;;19526:148;;19575:19;:25;19595:4;19575:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19604:19;:23;19624:2;19604:23;;;;;;;;;;;;;;;;;;;;;;;;;19575:52;19567:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19526:148;19832:20;;;;;;;;;;;19828:423;;;19886:7;:5;:7::i;:::-;19880:13;;:2;:13;;;;:47;;;;;19911:15;19897:30;;:2;:30;;;;19880:47;:79;;;;;19945:13;19931:28;;:2;:28;;;;19880:79;19876:356;;;20037:12;19995:28;:39;20024:9;19995:39;;;;;;;;;;;;;;;;:54;19987:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20196:12;20154:28;:39;20183:9;20154:39;;;;;;;;;;;;;;;:54;;;;19876:356;19828:423;20320:25;:31;20346:4;20320:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20356:31;:35;20388:2;20356:35;;;;;;;;;;;;;;;;;;;;;;;;;20355:36;20320:71;20316:778;;;20438:20;;20428:6;:30;;20420:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20577:9;;20560:13;20570:2;20560:9;:13::i;:::-;20551:6;:22;;;;:::i;:::-;:35;;20543:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20316:778;;;20704:25;:29;20730:2;20704:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20738:31;:37;20770:4;20738:37;;;;;;;;;;;;;;;;;;;;;;;;;20737:38;20704:71;20700:394;;;20822:20;;20812:6;:30;;20804:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;20700:394;;;20948:31;:35;20980:2;20948:35;;;;;;;;;;;;;;;;;;;;;;;;;20944:150;;21041:9;;21024:13;21034:2;21024:9;:13::i;:::-;21015:6;:22;;;;:::i;:::-;:35;;21007:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20944:150;20700:394;20316:778;19312:1797;19279:1841;21134:28;21165:24;21183:4;21165:9;:24::i;:::-;21134:55;;21210:12;21249:18;;21225:20;:42;;21210:57;;21298:7;:35;;;;;21322:11;;;;;;;;;;;21298:35;:61;;;;;21351:8;;;;;;;;;;;21350:9;21298:61;:110;;;;;21377:25;:31;21403:4;21377:31;;;;;;;;;;;;;;;;;;;;;;;;;21376:32;21298:110;:153;;;;;21426:19;:25;21446:4;21426:25;;;;;;;;;;;;;;;;;;;;;;;;;21425:26;21298:153;:194;;;;;21469:19;:23;21489:2;21469:23;;;;;;;;;;;;;;;;;;;;;;;;;21468:24;21298:194;21280:338;;;21530:4;21519:8;;:15;;;;;;;;;;;;;;;;;;21563:10;:8;:10::i;:::-;21601:5;21590:8;;:16;;;;;;;;;;;;;;;;;;21280:338;21630:12;21646:8;;;;;;;;;;;21645:9;21630:24;;21755:19;:25;21775:4;21755:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21784:19;:23;21804:2;21784:23;;;;;;;;;;;;;;;;;;;;;;;;;21755:52;21752:99;;;21834:5;21824:15;;21752:99;21871:12;21975:7;21972:951;;;22026:25;:29;22052:2;22026:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;22075:1;22059:13;;:17;22026:50;22022:732;;;22126:3;22112:13;;22103:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;22096:33;;22196:13;;22177:16;;22170:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22148:18;;:61;;;;;;;:::i;:::-;;;;;;;;22264:13;;22251:10;;22244:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;22228:12;;:49;;;;;;;:::i;:::-;;;;;;;;22344:13;;22325:16;;22318:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22296:18;;:61;;;;;;;:::i;:::-;;;;;;;;22022:732;;;22418:25;:31;22444:4;22418:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;22468:1;22453:12;;:16;22418:51;22415:339;;;22516:3;22503:12;;22494:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;22487:32;;22582:12;;22564:15;;22557:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22535:18;;:59;;;;;;;:::i;:::-;;;;;;;;22648:12;;22636:9;;22629:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;22613:12;;:47;;;;;;;:::i;:::-;;;;;;;;22726:12;;22708:15;;22701:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22679:18;;:59;;;;;;;:::i;:::-;;;;;;;;22415:339;22022:732;22792:1;22785:4;:8;22782:93;;;22817:42;22833:4;22847;22854;22817:15;:42::i;:::-;22782:93;22907:4;22897:14;;;;;:::i;:::-;;;21972:951;22935:33;22951:4;22957:2;22961:6;22935:15;:33::i;:::-;18915:4061;;;;18802:4174;;;;:::o;6199:190::-;6285:7;6318:1;6313;:6;;6321:12;6305:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6345:9;6361:1;6357;:5;;;;:::i;:::-;6345:17;;6380:1;6373:8;;;6199:190;;;;;:::o;17879:188::-;17996:5;17962:25;:31;17988:4;17962:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18053:5;18019:40;;18047:4;18019:40;;;;;;;;;;;;17879:188;;:::o;3957:569::-;4115:1;4097:20;;:6;:20;;;4089:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4199:1;4178:23;;:9;:23;;;4170:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4252:47;4273:6;4281:9;4292:6;4252:20;:47::i;:::-;4330:71;4352:6;4330:71;;;;;;;;;;;;;;;;;:9;:17;4340:6;4330:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4310:9;:17;4320:6;4310:17;;;;;;;;;;;;;;;:91;;;;4435:32;4460:6;4435:9;:20;4445:9;4435:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4412:9;:20;4422:9;4412:20;;;;;;;;;;;;;;;:55;;;;4500:9;4483:35;;4492:6;4483:35;;;4511:6;4483:35;;;;;;:::i;:::-;;;;;;;;3957:569;;;:::o;24134:1463::-;24173:23;24199:24;24217:4;24199:9;:24::i;:::-;24173:50;;24234:25;24304:12;;24283:18;;24262;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24234:82;;24327:12;24374:1;24355:15;:20;:46;;;;24400:1;24379:17;:22;24355:46;24352:60;;;24404:7;;;;;24352:60;24464:2;24443:18;;:23;;;;:::i;:::-;24425:15;:41;24422:111;;;24519:2;24498:18;;:23;;;;:::i;:::-;24480:41;;24422:111;24543:23;24628:1;24608:17;24587:18;;24569:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24543:86;;24640:26;24687:15;24669;:33;;;;:::i;:::-;24640:62;;24713:25;24741:21;24713:49;;24773:36;24790:18;24773:16;:36::i;:::-;24821:18;24866:17;24842:21;:41;;;;:::i;:::-;24821:62;;24894:23;24952:17;24933:18;;24920:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;24894:75;;24980:17;25026;25013:12;;25000:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;24980:63;;25054:23;25111:9;25093:15;25080:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;25054:66;;25152:1;25131:18;:22;;;;25185:1;25164:18;:22;;;;25212:1;25197:12;:16;;;;25245:9;;;;;;;;;;;25237:23;;25268:9;25237:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25224:58;;;;;25314:1;25296:15;:19;:42;;;;;25337:1;25319:15;:19;25296:42;25293:210;;;25354:46;25367:15;25384;25354:12;:46::i;:::-;25420:71;25435:18;25455:15;25472:18;;25420:71;;;;;;;;:::i;:::-;;;;;;;;25293:210;25534:15;;;;;;;;;;;25526:29;;25563:21;25526:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25513:76;;;;;24162:1435;;;;;;;;;;24134:1463;:::o;5716:125::-;;;;:::o;22984:601::-;23112:21;23150:1;23136:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23112:40;;23181:4;23163;23168:1;23163:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23207:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23197:4;23202:1;23197:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23242:62;23259:4;23274:15;23292:11;23242:8;:62::i;:::-;23343:15;:66;;;23424:11;23450:1;23494:4;23521;23541:15;23343:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23039:546;22984:601;:::o;23609:517::-;23757:62;23774:4;23789:15;23807:11;23757:8;:62::i;:::-;23862:15;:31;;;23901:9;23934:4;23954:11;23980:1;24023;10435:6;24092:15;23862:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23609:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:173::-;12675:25;12671:1;12663:6;12659:14;12652:49;12535:173;:::o;12714:366::-;12856:3;12877:67;12941:2;12936:3;12877:67;:::i;:::-;12870:74;;12953:93;13042:3;12953:93;:::i;:::-;13071:2;13066:3;13062:12;13055:19;;12714:366;;;:::o;13086:419::-;13252:4;13290:2;13279:9;13275:18;13267:26;;13339:9;13333:4;13329:20;13325:1;13314:9;13310:17;13303:47;13367:131;13493:4;13367:131;:::i;:::-;13359:139;;13086:419;;;:::o;13511:191::-;13551:3;13570:20;13588:1;13570:20;:::i;:::-;13565:25;;13604:20;13622:1;13604:20;:::i;:::-;13599:25;;13647:1;13644;13640:9;13633:16;;13668:3;13665:1;13662:10;13659:36;;;13675:18;;:::i;:::-;13659:36;13511:191;;;;:::o;13708:179::-;13848:31;13844:1;13836:6;13832:14;13825:55;13708:179;:::o;13893:366::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:419::-;14431:4;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14265:419;;;:::o;14690:244::-;14830:34;14826:1;14818:6;14814:14;14807:58;14899:27;14894:2;14886:6;14882:15;14875:52;14690:244;:::o;14940:366::-;15082:3;15103:67;15167:2;15162:3;15103:67;:::i;:::-;15096:74;;15179:93;15268:3;15179:93;:::i;:::-;15297:2;15292:3;15288:12;15281:19;;14940:366;;;:::o;15312:419::-;15478:4;15516:2;15505:9;15501:18;15493:26;;15565:9;15559:4;15555:20;15551:1;15540:9;15536:17;15529:47;15593:131;15719:4;15593:131;:::i;:::-;15585:139;;15312:419;;;:::o;15737:221::-;15877:34;15873:1;15865:6;15861:14;15854:58;15946:4;15941:2;15933:6;15929:15;15922:29;15737:221;:::o;15964:366::-;16106:3;16127:67;16191:2;16186:3;16127:67;:::i;:::-;16120:74;;16203:93;16292:3;16203:93;:::i;:::-;16321:2;16316:3;16312:12;16305:19;;15964:366;;;:::o;16336:419::-;16502:4;16540:2;16529:9;16525:18;16517:26;;16589:9;16583:4;16579:20;16575:1;16564:9;16560:17;16553:47;16617:131;16743:4;16617:131;:::i;:::-;16609:139;;16336:419;;;:::o;16761:240::-;16901:34;16897:1;16889:6;16885:14;16878:58;16970:23;16965:2;16957:6;16953:15;16946:48;16761:240;:::o;17007:366::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17379:419;;;:::o;17804:239::-;17944:34;17940:1;17932:6;17928:14;17921:58;18013:22;18008:2;18000:6;17996:15;17989:47;17804:239;:::o;18049:366::-;18191:3;18212:67;18276:2;18271:3;18212:67;:::i;:::-;18205:74;;18288:93;18377:3;18288:93;:::i;:::-;18406:2;18401:3;18397:12;18390:19;;18049:366;;;:::o;18421:419::-;18587:4;18625:2;18614:9;18610:18;18602:26;;18674:9;18668:4;18664:20;18660:1;18649:9;18645:17;18638:47;18702:131;18828:4;18702:131;:::i;:::-;18694:139;;18421:419;;;:::o;18846:225::-;18986:34;18982:1;18974:6;18970:14;18963:58;19055:8;19050:2;19042:6;19038:15;19031:33;18846:225;:::o;19077:366::-;19219:3;19240:67;19304:2;19299:3;19240:67;:::i;:::-;19233:74;;19316:93;19405:3;19316:93;:::i;:::-;19434:2;19429:3;19425:12;19418:19;;19077:366;;;:::o;19449:419::-;19615:4;19653:2;19642:9;19638:18;19630:26;;19702:9;19696:4;19692:20;19688:1;19677:9;19673:17;19666:47;19730:131;19856:4;19730:131;:::i;:::-;19722:139;;19449:419;;;:::o;19874:177::-;20014:29;20010:1;20002:6;19998:14;19991:53;19874:177;:::o;20057:366::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20057:366;;;:::o;20429:419::-;20595:4;20633:2;20622:9;20618:18;20610:26;;20682:9;20676:4;20672:20;20668:1;20657:9;20653:17;20646:47;20710:131;20836:4;20710:131;:::i;:::-;20702:139;;20429:419;;;:::o;20854:223::-;20994:34;20990:1;20982:6;20978:14;20971:58;21063:6;21058:2;21050:6;21046:15;21039:31;20854:223;:::o;21083:366::-;21225:3;21246:67;21310:2;21305:3;21246:67;:::i;:::-;21239:74;;21322:93;21411:3;21322:93;:::i;:::-;21440:2;21435:3;21431:12;21424:19;;21083:366;;;:::o;21455:419::-;21621:4;21659:2;21648:9;21644:18;21636:26;;21708:9;21702:4;21698:20;21694:1;21683:9;21679:17;21672:47;21736:131;21862:4;21736:131;:::i;:::-;21728:139;;21455:419;;;:::o;21880:221::-;22020:34;22016:1;22008:6;22004:14;21997:58;22089:4;22084:2;22076:6;22072:15;22065:29;21880:221;:::o;22107:366::-;22249:3;22270:67;22334:2;22329:3;22270:67;:::i;:::-;22263:74;;22346:93;22435:3;22346:93;:::i;:::-;22464:2;22459:3;22455:12;22448:19;;22107:366;;;:::o;22479:419::-;22645:4;22683:2;22672:9;22668:18;22660:26;;22732:9;22726:4;22722:20;22718:1;22707:9;22703:17;22696:47;22760:131;22886:4;22760:131;:::i;:::-;22752:139;;22479:419;;;:::o;22904:224::-;23044:34;23040:1;23032:6;23028:14;23021:58;23113:7;23108:2;23100:6;23096:15;23089:32;22904:224;:::o;23134:366::-;23276:3;23297:67;23361:2;23356:3;23297:67;:::i;:::-;23290:74;;23373:93;23462:3;23373:93;:::i;:::-;23491:2;23486:3;23482:12;23475:19;;23134:366;;;:::o;23506:419::-;23672:4;23710:2;23699:9;23695:18;23687:26;;23759:9;23753:4;23749:20;23745:1;23734:9;23730:17;23723:47;23787:131;23913:4;23787:131;:::i;:::-;23779:139;;23506:419;;;:::o;23931:222::-;24071:34;24067:1;24059:6;24055:14;24048:58;24140:5;24135:2;24127:6;24123:15;24116:30;23931:222;:::o;24159:366::-;24301:3;24322:67;24386:2;24381:3;24322:67;:::i;:::-;24315:74;;24398:93;24487:3;24398:93;:::i;:::-;24516:2;24511:3;24507:12;24500:19;;24159:366;;;:::o;24531:419::-;24697:4;24735:2;24724:9;24720:18;24712:26;;24784:9;24778:4;24774:20;24770:1;24759:9;24755:17;24748:47;24812:131;24938:4;24812:131;:::i;:::-;24804:139;;24531:419;;;:::o;24956:161::-;25096:13;25092:1;25084:6;25080:14;25073:37;24956:161;:::o;25123:366::-;25265:3;25286:67;25350:2;25345:3;25286:67;:::i;:::-;25279:74;;25362:93;25451:3;25362:93;:::i;:::-;25480:2;25475:3;25471:12;25464:19;;25123:366;;;:::o;25495:419::-;25661:4;25699:2;25688:9;25684:18;25676:26;;25748:9;25742:4;25738:20;25734:1;25723:9;25719:17;25712:47;25776:131;25902:4;25776:131;:::i;:::-;25768:139;;25495:419;;;:::o;25920:172::-;26060:24;26056:1;26048:6;26044:14;26037:48;25920:172;:::o;26098:366::-;26240:3;26261:67;26325:2;26320:3;26261:67;:::i;:::-;26254:74;;26337:93;26426:3;26337:93;:::i;:::-;26455:2;26450:3;26446:12;26439:19;;26098:366;;;:::o;26470:419::-;26636:4;26674:2;26663:9;26659:18;26651:26;;26723:9;26717:4;26713:20;26709:1;26698:9;26694:17;26687:47;26751:131;26877:4;26751:131;:::i;:::-;26743:139;;26470:419;;;:::o;26895:297::-;27035:34;27031:1;27023:6;27019:14;27012:58;27104:34;27099:2;27091:6;27087:15;27080:59;27173:11;27168:2;27160:6;27156:15;27149:36;26895:297;:::o;27198:366::-;27340:3;27361:67;27425:2;27420:3;27361:67;:::i;:::-;27354:74;;27437:93;27526:3;27437:93;:::i;:::-;27555:2;27550:3;27546:12;27539:19;;27198:366;;;:::o;27570:419::-;27736:4;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:131;27977:4;27851:131;:::i;:::-;27843:139;;27570:419;;;:::o;27995:240::-;28135:34;28131:1;28123:6;28119:14;28112:58;28204:23;28199:2;28191:6;28187:15;28180:48;27995:240;:::o;28241:366::-;28383:3;28404:67;28468:2;28463:3;28404:67;:::i;:::-;28397:74;;28480:93;28569:3;28480:93;:::i;:::-;28598:2;28593:3;28589:12;28582:19;;28241:366;;;:::o;28613:419::-;28779:4;28817:2;28806:9;28802:18;28794:26;;28866:9;28860:4;28856:20;28852:1;28841:9;28837:17;28830:47;28894:131;29020:4;28894:131;:::i;:::-;28886:139;;28613:419;;;:::o;29038:169::-;29178:21;29174:1;29166:6;29162:14;29155:45;29038:169;:::o;29213:366::-;29355:3;29376:67;29440:2;29435:3;29376:67;:::i;:::-;29369:74;;29452:93;29541:3;29452:93;:::i;:::-;29570:2;29565:3;29561:12;29554:19;;29213:366;;;:::o;29585:419::-;29751:4;29789:2;29778:9;29774:18;29766:26;;29838:9;29832:4;29828:20;29824:1;29813:9;29809:17;29802:47;29866:131;29992:4;29866:131;:::i;:::-;29858:139;;29585:419;;;:::o;30010:241::-;30150:34;30146:1;30138:6;30134:14;30127:58;30219:24;30214:2;30206:6;30202:15;30195:49;30010:241;:::o;30257:366::-;30399:3;30420:67;30484:2;30479:3;30420:67;:::i;:::-;30413:74;;30496:93;30585:3;30496:93;:::i;:::-;30614:2;30609:3;30605:12;30598:19;;30257:366;;;:::o;30629:419::-;30795:4;30833:2;30822:9;30818:18;30810:26;;30882:9;30876:4;30872:20;30868:1;30857:9;30853:17;30846:47;30910:131;31036:4;30910:131;:::i;:::-;30902:139;;30629:419;;;:::o;31054:194::-;31094:4;31114:20;31132:1;31114:20;:::i;:::-;31109:25;;31148:20;31166:1;31148:20;:::i;:::-;31143:25;;31192:1;31189;31185:9;31177:17;;31216:1;31210:4;31207:11;31204:37;;;31221:18;;:::i;:::-;31204:37;31054:194;;;;:::o;31254:147::-;31355:11;31392:3;31377:18;;31254:147;;;;:::o;31407:114::-;;:::o;31527:398::-;31686:3;31707:83;31788:1;31783:3;31707:83;:::i;:::-;31700:90;;31799:93;31888:3;31799:93;:::i;:::-;31917:1;31912:3;31908:11;31901:18;;31527:398;;;:::o;31931:379::-;32115:3;32137:147;32280:3;32137:147;:::i;:::-;32130:154;;32301:3;32294:10;;31931:379;;;:::o;32316:442::-;32465:4;32503:2;32492:9;32488:18;32480:26;;32516:71;32584:1;32573:9;32569:17;32560:6;32516:71;:::i;:::-;32597:72;32665:2;32654:9;32650:18;32641:6;32597:72;:::i;:::-;32679;32747:2;32736:9;32732:18;32723:6;32679:72;:::i;:::-;32316:442;;;;;;:::o;32764:180::-;32812:77;32809:1;32802:88;32909:4;32906:1;32899:15;32933:4;32930:1;32923:15;32950:180;32998:77;32995:1;32988:88;33095:4;33092:1;33085:15;33119:4;33116:1;33109:15;33136:143;33193:5;33224:6;33218:13;33209:22;;33240:33;33267:5;33240:33;:::i;:::-;33136:143;;;;:::o;33285:351::-;33355:6;33404:2;33392:9;33383:7;33379:23;33375:32;33372:119;;;33410:79;;:::i;:::-;33372:119;33530:1;33555:64;33611:7;33602:6;33591:9;33587:22;33555:64;:::i;:::-;33545:74;;33501:128;33285:351;;;;:::o;33642:85::-;33687:7;33716:5;33705:16;;33642:85;;;:::o;33733:158::-;33791:9;33824:61;33842:42;33851:32;33877:5;33851:32;:::i;:::-;33842:42;:::i;:::-;33824:61;:::i;:::-;33811:74;;33733:158;;;:::o;33897:147::-;33992:45;34031:5;33992:45;:::i;:::-;33987:3;33980:58;33897:147;;:::o;34050:114::-;34117:6;34151:5;34145:12;34135:22;;34050:114;;;:::o;34170:184::-;34269:11;34303:6;34298:3;34291:19;34343:4;34338:3;34334:14;34319:29;;34170:184;;;;:::o;34360:132::-;34427:4;34450:3;34442:11;;34480:4;34475:3;34471:14;34463:22;;34360:132;;;:::o;34498:108::-;34575:24;34593:5;34575:24;:::i;:::-;34570:3;34563:37;34498:108;;:::o;34612:179::-;34681:10;34702:46;34744:3;34736:6;34702:46;:::i;:::-;34780:4;34775:3;34771:14;34757:28;;34612:179;;;;:::o;34797:113::-;34867:4;34899;34894:3;34890:14;34882:22;;34797:113;;;:::o;34946:732::-;35065:3;35094:54;35142:5;35094:54;:::i;:::-;35164:86;35243:6;35238:3;35164:86;:::i;:::-;35157:93;;35274:56;35324:5;35274:56;:::i;:::-;35353:7;35384:1;35369:284;35394:6;35391:1;35388:13;35369:284;;;35470:6;35464:13;35497:63;35556:3;35541:13;35497:63;:::i;:::-;35490:70;;35583:60;35636:6;35583:60;:::i;:::-;35573:70;;35429:224;35416:1;35413;35409:9;35404:14;;35369:284;;;35373:14;35669:3;35662:10;;35070:608;;;34946:732;;;;:::o;35684:831::-;35947:4;35985:3;35974:9;35970:19;35962:27;;35999:71;36067:1;36056:9;36052:17;36043:6;35999:71;:::i;:::-;36080:80;36156:2;36145:9;36141:18;36132:6;36080:80;:::i;:::-;36207:9;36201:4;36197:20;36192:2;36181:9;36177:18;36170:48;36235:108;36338:4;36329:6;36235:108;:::i;:::-;36227:116;;36353:72;36421:2;36410:9;36406:18;36397:6;36353:72;:::i;:::-;36435:73;36503:3;36492:9;36488:19;36479:6;36435:73;:::i;:::-;35684:831;;;;;;;;:::o;36521:807::-;36770:4;36808:3;36797:9;36793:19;36785:27;;36822:71;36890:1;36879:9;36875:17;36866:6;36822:71;:::i;:::-;36903:72;36971:2;36960:9;36956:18;36947:6;36903:72;:::i;:::-;36985:80;37061:2;37050:9;37046:18;37037:6;36985:80;:::i;:::-;37075;37151:2;37140:9;37136:18;37127:6;37075:80;:::i;:::-;37165:73;37233:3;37222:9;37218:19;37209:6;37165:73;:::i;:::-;37248;37316:3;37305:9;37301:19;37292:6;37248:73;:::i;:::-;36521:807;;;;;;;;;:::o;37334:143::-;37391:5;37422:6;37416:13;37407:22;;37438:33;37465:5;37438:33;:::i;:::-;37334:143;;;;:::o;37483:663::-;37571:6;37579;37587;37636:2;37624:9;37615:7;37611:23;37607:32;37604:119;;;37642:79;;:::i;:::-;37604:119;37762:1;37787:64;37843:7;37834:6;37823:9;37819:22;37787:64;:::i;:::-;37777:74;;37733:128;37900:2;37926:64;37982:7;37973:6;37962:9;37958:22;37926:64;:::i;:::-;37916:74;;37871:129;38039:2;38065:64;38121:7;38112:6;38101:9;38097:22;38065:64;:::i;:::-;38055:74;;38010:129;37483:663;;;;;:::o

Swarm Source

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