ETH Price: $2,295.37 (-5.21%)

Token

BLACK SHIBA (BSHIBA)
 

Overview

Max Total Supply

333,333,333 BSHIBA

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.36826043001171875 BSHIBA

Value
$0.00
0x1e3d1e391a85435073780a2f4c4ae417419705c2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BLACKSHIBA

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 2022-12-03
*/

/**
BLACK SHIBA
$BSHIBA 
3% Tax Buy/Sell
Burnt LP

Socials
http://blackshiba.org
https://twitter.com/blackshibaeth
https://t.me/blackshibaerc 

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}




contract BLACKSHIBA is Context,IERC20, Ownable{
    using Address for address;

    string private _name = "BLACK SHIBA";
    string private _symbol = "BSHIBA";
    uint8 private _decimals = 18;
    uint256 totalFeeFortx = 0;
    uint256 maxWalletTreshold = 2;
    uint256 maxTxTreshold = 2;
    uint256 private swapTreshold =2;
    bool public limitsInEffect = true;

    uint256 private currentThreshold = 20; 
    uint256 private _totalSupply = 333_333_333 * 10**_decimals; 
    uint256 public requiredTokensToSwap = _totalSupply * swapTreshold /1000;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _excludedFromFees;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) _isExcludedMaxTransactionAmount;
    mapping (address => bool) public automatedMarketMakerPairs;
    address _owner;
    address payable public marketingAddress = payable(0x8124F120F80d8D4F8bf6C71435314A5927F19c04);
    
    uint256 maxWalletAmount = _totalSupply*maxWalletTreshold/100; 
    uint256 maxTxAmount = _totalSupply*maxTxTreshold/100;
    mapping (address => bool) botWallets;
    bool botTradeEnabled = false;
    bool checkWalletSize = true;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private presaleAddresses;
    uint256 private buyliqFee = 0; 
    uint256 private buyprevLiqFee = 0;
    uint256 private buymktFee = 5;
    uint256 private buyPrevmktFee = 5;
    
    
    bool private tradeEnabled = false;

    
    uint256 private sellliqFee = 0;
    uint256 private sellprevLiqFee = 0;
    uint256 private sellmktFee = 5;
    uint256 private sellPrevmktFee = 5;


    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private mktTokens = 0;
  
    uint256 private liqTokens = 0;

    
    event SwapAndLiquify(uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiquidity
	);
    event tokensSwappedDuringTokenomics(uint256 amount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    
    IUniswapV2Router02 _router;
    address public uniswapV2Pair;

    //Balances tracker

    modifier lockTheSwap{
		inSwapAndLiquify = true;
		_;
		inSwapAndLiquify = false;
	}
    

    constructor(){
        _balances[_msgSender()] = _totalSupply;
        
        IUniswapV2Router02 _uniRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Pair = IUniswapV2Factory(_uniRouter.factory())
            .createPair(address(this), _uniRouter.WETH());
        
        _excludedFromFees[owner()] = true;         
        _excludedFromFees[address(this)] = true;
        _router = _uniRouter;
        _liquidityHolders[address(_router)] = true;
        _liquidityHolders[owner()] = true;
        _liquidityHolders[address(this)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        emit Transfer(address(0),_msgSender(),_totalSupply);
 
    }
    receive() external payable{}


    //general token data and tracking of balances to be swapped.
    function getOwner()external view returns(address){
            return owner();
    }
    function currentmktTokens() external view returns (uint256){
            return mktTokens;
     }
   
     function currentLiqTokens() external view returns (uint256){
            return liqTokens;
     }

     function totalSupply() external view override returns (uint256){
            return _totalSupply;
     }
   
    function balanceOf(address account) public view override returns (uint256){
        return _balances[account];
    }
   
    function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(),recipient,amount);
            return true;

    }
   
    function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 amount) external override returns (bool){
            _approve(_msgSender(),spender,amount);
            return true;
    }
    function removeLimits() public onlyOwner{
        limitsInEffect = false;
    }

    function decimals()external view returns(uint256){
        return _decimals;
    }
    function name() external view returns (string memory) {
		return _name;
	}
    function symbol() external view returns (string memory){
        return _symbol;
    }
        function updateMaxTxTreshold(uint256 newVal) public onlyOwner{
        maxTxTreshold = newVal;
        maxTxAmount = _totalSupply*maxTxTreshold/100;// 1%

    }
     function updateMaxWalletTreshold(uint256 newVal) public onlyOwner{
        maxWalletTreshold = newVal;
        maxWalletAmount = _totalSupply*maxWalletTreshold/100;

    }
    

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

    function addBotWallet (address payable detectedBot, bool isBot) public onlyOwner{
        botWallets[detectedBot] = isBot;
    }
    function currentbuyliqFee() public view returns (uint256){
            return buyliqFee;
    }
    function currentbuymktfee() public view returns (uint256){
            return buymktFee;
    }
   

      function currentsellLiqFee() public view returns (uint256){
            return sellliqFee;
    }
    function currentsellmktfee() public view returns (uint256){
            return sellmktFee;
    }
    
    function currentThresholdInt()public view returns (uint256){
        return currentThreshold;
    }
    function isExcluded(address toCheck)public view returns (bool){
            return _excludedFromFees[toCheck];
    }

    function _transfer(address from, address to, uint256 amount) internal{
        
        require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0,"ERC20: transfered amount must be greater than zero");
        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        if(tradeEnabled == false){
            require(_liquidityHolders[to] || _liquidityHolders[from],"Cant trade, trade is disabled");
        }
        
       
         
          if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead)
            ){

                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Unable to exceed Max Wallet");
                    

                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWalletAmount, "Unable to exceed Max Wallet");
                }
            }
        }
         uint256 inContractBalance = balanceOf(address(this));

        if(inContractBalance >=requiredTokensToSwap && 
			!inSwapAndLiquify && 
			from != uniswapV2Pair && 
			swapAndLiquifyEnabled){
                if(inContractBalance >= requiredTokensToSwap ){
                    inContractBalance = requiredTokensToSwap;
                    swapForTokenomics(inContractBalance);
                }
            }

            bool takeFees = true;
            
            
            if(_excludedFromFees[from] || _excludedFromFees[to]) {
                totalFeeFortx = 0;
                takeFees = false;
               

            }
            uint256 mktAmount = 0;
           
		    uint256 liqAmount = 0;  // Amount to be added to liquidity.

            if(takeFees){
                
                //bot fees
                if(botWallets[from] == true||botWallets[to]==true){
                    revert("No bots allowed to trade");
                }
                //Selling fees
                if (automatedMarketMakerPairs[to] && to != address(_router) ){
                        totalFeeFortx = 0;
                        mktAmount = amount * sellmktFee/100;
                        liqAmount = amount * sellliqFee/100;
                        
                        totalFeeFortx = mktAmount + liqAmount ;
                }
                //Buy Fees
                else if(automatedMarketMakerPairs[from] && from != address(_router)) {
                    
                    totalFeeFortx = 0;
                    mktAmount = amount * buymktFee/100;
                    liqAmount = amount * buyliqFee/100;
                    
                    totalFeeFortx = mktAmount + liqAmount ;
                }

                
            }

            _balances[from] = senderBalance - amount;
            _balances[to] += amount - mktAmount - liqAmount;

          if(liqAmount != 0) {
			_balances[address(this)] += totalFeeFortx;
			//tLiqTotal += liqAmount;
            liqTokens += liqAmount;
            mktTokens += mktAmount;
			emit Transfer(from, address(this), totalFeeFortx);
            
		    }
            emit Transfer(from, to,amount-totalFeeFortx);
            
        
    }
    function swapForTokenomics(uint256 balanceToswap) private lockTheSwap{
        swapAndLiquify(liqTokens);
        swapTokensForETHmkt(mktTokens);
        emit tokensSwappedDuringTokenomics(balanceToswap);
        mktTokens = 0;
        liqTokens = 0;
    }
     function addLimitExempt(address newAddress)external onlyOwner{
        _liquidityHolders[newAddress] = true;
     
    }
    function swapTokensForETHmkt(uint256 amount)private {
        address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), amount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0, // Accept any amount of ETH.
			path,
			marketingAddress,
			block.timestamp
		);

    }
  


    function unstuckTokens (IERC20 tokenToClear, address payable destination, uint256 amount) public onlyOwner{
        //uint256 contractBalance = tokenToClear.balanceOf(address(this));
        tokenToClear.transfer(destination, amount);
    }

    function unstuckETH(address payable destination) public onlyOwner{
        uint256 ethBalance = address(this).balance;
        payable(destination).transfer(ethBalance);
    }

    function tradeStatus(bool status) public onlyOwner{
        tradeEnabled = status;
    }

    function swapAndLiquify(uint256 liqTokensPassed) private {
		uint256 half = liqTokensPassed / 2;
		uint256 otherHalf = liqTokensPassed - half;
		uint256 initialBalance = address(this).balance;

		swapTokensForETH(half);
		uint256 newBalance = address(this).balance - (initialBalance); 

		addLiquidity(otherHalf, newBalance);
		emit SwapAndLiquify(half,newBalance,otherHalf);
	}

    function swapTokensForETH(uint256 tokenAmount) private{
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), tokenAmount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // Accept any amount of ETH.
			path,
			address(this),
			block.timestamp
		);
	}
    
    function addLiquidity(uint256 tokenAmount,uint256 ethAmount) private{
		_approve(address(this), address(_router), tokenAmount);

		_router.addLiquidityETH{value:ethAmount}(
			address(this),
			tokenAmount,
			0,
			0,
			deadAddress,// tr
			block.timestamp
		);
	}

    function _approve(address owner,address spender, uint256 amount) internal{
        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);


    }




    //Fees related functions

    function addToExcluded(address toExclude) public onlyOwner{  
        _excludedFromFees[toExclude] = true;
    }

    function removeFromExcluded(address toRemove) public onlyOwner{
        _excludedFromFees[toRemove] = false;
    }
      function excludePresaleAddresses(address router, address presale) external onlyOwner {
        
        _liquidityHolders[address(router)] = true;
        _liquidityHolders[presale] = true;
        presaleAddresses[address(router)] = true;
        presaleAddresses[presale] = true;
       
    }



    function updateThreshold(uint newThreshold) public onlyOwner{
        currentThreshold = newThreshold;

    }

    function setSwapAndLiquify(bool _enabled) public onlyOwner{
            swapAndLiquifyEnabled = _enabled;
    }


    //Marketing related 

    function setMktAddress(address newAddress) external onlyOwner{
        marketingAddress = payable(newAddress);
    }
   
    function transferAssetsETH(address payable to, uint256 amount) internal{
            to.transfer(amount);
    }
   
    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 updatecurrentbuyliqFee(uint256 newAmount) public onlyOwner{
            buyliqFee = newAmount;
    }
    function updatecurrentbuymktfee(uint256 newAmount) public onlyOwner{
             buymktFee= newAmount;
    }
   

      function updatecurrentsellLiqFee(uint256 newAmount) public onlyOwner{
             sellliqFee= newAmount;
    }
    function updatecurrentsellmktfee(uint256 newAmount)public onlyOwner{
             sellmktFee= newAmount;
    }
    
  
    function currentMaxWallet() public view returns(uint256){
        return maxWalletAmount;
    }
    function currentMaxTx() public view returns(uint256){
        return maxTxAmount;
    }
    function updateSwapTreshold(uint256 newVal) public onlyOwner{
        swapTreshold = newVal;
        requiredTokensToSwap = _totalSupply*swapTreshold/1000;
        
    }
    function currentTradeStatus() public view returns (bool){
        return tradeEnabled;   
    }
    function currentSwapTreshold() public view returns(uint256){
        return swapTreshold;
    }
    function currentTokensToSwap() public view returns(uint256){
        return requiredTokensToSwap;
    }
}


interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensSwappedDuringTokenomics","type":"event"},{"inputs":[{"internalType":"address payable","name":"detectedBot","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toExclude","type":"address"}],"name":"addToExcluded","outputs":[],"stateMutability":"nonpayable","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":"currentLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSwapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentThresholdInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTradeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuyliqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuymktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentmktTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellmktfee","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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeFromExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMktAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"tradeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"destination","type":"address"}],"name":"unstuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenToClear","type":"address"},{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxWalletTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuyliqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuymktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellmktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600b81526020017f424c41434b205348494241000000000000000000000000000000000000000000815250600190816200004a919062000be5565b506040518060400160405280600681526020017f42534849424100000000000000000000000000000000000000000000000000008152506002908162000091919062000be5565b506012600360006101000a81548160ff021916908360ff16021790555060006004556002600555600260065560026007556001600860006101000a81548160ff0219169083151502179055506014600955600360009054906101000a900460ff16600a62000100919062000e5c565b6313de435562000111919062000ead565b600a556103e8600754600a5462000129919062000ead565b62000135919062000f27565b600b55738124f120f80d8d4f8bf6c71435314a5927f19c04601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600554600a54620001a1919062000ead565b620001ad919062000f27565b6013556064600654600a54620001c4919062000ead565b620001d0919062000f27565b6014556000601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff02191690831515021790555060006019556000601a556005601b556005601c556000601d60006101000a81548160ff0219169083151502179055506000601e556000601f55600560205560056021556001602260016101000a81548160ff02191690831515021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525060006023556000602455348015620002b357600080fd5b50620002d4620002c8620007d560201b60201c565b620007dd60201b60201c565b600a54600c6000620002eb620007d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b4919062000fc9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000442919062000fc9565b6040518363ffffffff1660e01b8152600401620004619291906200100c565b6020604051808303816000875af115801562000481573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a7919062000fc9565b602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000620004fd620008a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600062000677620008a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000755602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ca60201b60201c565b62000765620007d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620007c691906200104a565b60405180910390a35062001067565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009ed57607f821691505b60208210810362000a035762000a02620009a5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a6d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a2e565b62000a79868362000a2e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ac662000ac062000aba8462000a91565b62000a9b565b62000a91565b9050919050565b6000819050919050565b62000ae28362000aa5565b62000afa62000af18262000acd565b84845462000a3b565b825550505050565b600090565b62000b1162000b02565b62000b1e81848462000ad7565b505050565b5b8181101562000b465762000b3a60008262000b07565b60018101905062000b24565b5050565b601f82111562000b955762000b5f8162000a09565b62000b6a8462000a1e565b8101602085101562000b7a578190505b62000b9262000b898562000a1e565b83018262000b23565b50505b505050565b600082821c905092915050565b600062000bba6000198460080262000b9a565b1980831691505092915050565b600062000bd5838362000ba7565b9150826002028217905092915050565b62000bf0826200096b565b67ffffffffffffffff81111562000c0c5762000c0b62000976565b5b62000c188254620009d4565b62000c2582828562000b4a565b600060209050601f83116001811462000c5d576000841562000c48578287015190505b62000c54858262000bc7565b86555062000cc4565b601f19841662000c6d8662000a09565b60005b8281101562000c975784890151825560018201915060208501945060208101905062000c70565b8683101562000cb7578489015162000cb3601f89168262000ba7565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d5a5780860481111562000d325762000d3162000ccc565b5b600185161562000d425780820291505b808102905062000d528562000cfb565b945062000d12565b94509492505050565b60008262000d75576001905062000e48565b8162000d85576000905062000e48565b816001811462000d9e576002811462000da95762000ddf565b600191505062000e48565b60ff84111562000dbe5762000dbd62000ccc565b5b8360020a91508482111562000dd85762000dd762000ccc565b5b5062000e48565b5060208310610133831016604e8410600b841016171562000e195782820a90508381111562000e135762000e1262000ccc565b5b62000e48565b62000e28848484600162000d08565b9250905081840481111562000e425762000e4162000ccc565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e698262000a91565b915062000e768362000e4f565b925062000ea57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d63565b905092915050565b600062000eba8262000a91565b915062000ec78362000a91565b925082820262000ed78162000a91565b9150828204841483151762000ef15762000ef062000ccc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f348262000a91565b915062000f418362000a91565b92508262000f545762000f5362000ef8565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f918262000f64565b9050919050565b62000fa38162000f84565b811462000faf57600080fd5b50565b60008151905062000fc38162000f98565b92915050565b60006020828403121562000fe25762000fe162000f5f565b5b600062000ff28482850162000fb2565b91505092915050565b620010068162000f84565b82525050565b600060408201905062001023600083018562000ffb565b62001032602083018462000ffb565b9392505050565b620010448162000a91565b82525050565b600060208201905062001061600083018462001039565b92915050565b608051614d096200108a6000396000818161114201526139a10152614d096000f3fe6080604052600436106103395760003560e01c8063893d20e8116101ab578063b62496f5116100f7578063d7d7442f11610095578063e1370dd31161006f578063e1370dd314610bdf578063edcf19b214610c0a578063f2fde38b14610c33578063f7da678514610c5c57610340565b8063d7d7442f14610b4e578063dd62ed3e14610b77578063ddcf9b9814610bb457610340565b8063cb664534116100d1578063cb66453414610a94578063cba0e99614610abd578063d1294d4c14610afa578063d15bcf0f14610b2357610340565b8063b62496f514610a03578063bf9b015914610a40578063bf9eb54014610a6b57610340565b80639b136da411610164578063a6c38f591161013e578063a6c38f591461094b578063a7a0745214610974578063a9059cbb1461099d578063b4d95a93146109da57610340565b80639b136da4146108ca578063a04bdc81146108f5578063a5ece9411461092057610340565b8063893d20e8146107cc5780638cd0260c146107f75780638da5cb5b1461082057806390f502831461084b57806395d89b41146108765780639a7a23d6146108a157610340565b80634a0e963c116102855780636573c4df11610223578063715018a6116101fd578063715018a61461074c578063751039fc14610763578063801527ce1461077a5780638628c23f146107a357610340565b80636573c4df146106bb5780636df3333a146106e457806370a082311461070f57610340565b80634bd7ace51161025f5780634bd7ace5146106115780635297defd1461063c5780635be76f111461066757806364c161631461069057610340565b80634a0e963c146105925780634a62bb65146105bb5780634a74bb02146105e657610340565b806322788f86116102f25780632d03420b116102cc5780632d03420b146104e8578063313ce56714610511578063487a69051461053c57806349bd5a5e1461056757610340565b806322788f861461045557806323b872dd1461048057806327c8f835146104bd57610340565b806306fdde03146103455780630882a86314610370578063095ea7b31461039957806313b4a7f4146103d657806318160ddd146103ff578063220f66961461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610c85565b6040516103679190613abc565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613b19565b610d17565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613ba4565b610d9d565b6040516103cd9190613bff565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613c1a565b610dbb565b005b34801561040b57600080fd5b50610414610f9b565b6040516104219190613c69565b60405180910390f35b34801561043657600080fd5b5061043f610fa5565b60405161044c9190613bff565b60405180910390f35b34801561046157600080fd5b5061046a610fb8565b6040516104779190613c69565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613c84565b610fc2565b6040516104b49190613bff565b60405180910390f35b3480156104c957600080fd5b506104d2611140565b6040516104df9190613ce6565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613d2d565b611164565b005b34801561051d57600080fd5b506105266111fd565b6040516105339190613c69565b60405180910390f35b34801561054857600080fd5b50610551611217565b60405161055e9190613c69565b60405180910390f35b34801561057357600080fd5b5061057c611221565b6040516105899190613ce6565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613d5a565b611247565b005b3480156105c757600080fd5b506105d061131e565b6040516105dd9190613bff565b60405180910390f35b3480156105f257600080fd5b506105fb611331565b6040516106089190613bff565b60405180910390f35b34801561061d57600080fd5b50610626611344565b6040516106339190613c69565b60405180910390f35b34801561064857600080fd5b5061065161134e565b60405161065e9190613c69565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613dc5565b611358565b005b34801561069c57600080fd5b506106a5611424565b6040516106b29190613c69565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613b19565b61142e565b005b3480156106f057600080fd5b506106f96114d6565b6040516107069190613c69565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190613d5a565b6114e0565b6040516107439190613c69565b60405180910390f35b34801561075857600080fd5b50610761611529565b005b34801561076f57600080fd5b506107786115b1565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613d2d565b61164a565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613b19565b6116e3565b005b3480156107d857600080fd5b506107e1611769565b6040516107ee9190613ce6565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613b19565b611778565b005b34801561082c57600080fd5b506108356117fe565b6040516108429190613ce6565b60405180910390f35b34801561085757600080fd5b50610860611827565b60405161086d9190613c69565b60405180910390f35b34801561088257600080fd5b5061088b611831565b6040516108989190613abc565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613df2565b6118c3565b005b3480156108d657600080fd5b506108df6119dd565b6040516108ec9190613c69565b60405180910390f35b34801561090157600080fd5b5061090a6119e7565b6040516109179190613c69565b60405180910390f35b34801561092c57600080fd5b506109356119ed565b6040516109429190613e41565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613e5c565b611a13565b005b34801561098057600080fd5b5061099b60048036038101906109969190613b19565b611aea565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613ba4565b611b92565b6040516109d19190613bff565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613d5a565b611bb0565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613d5a565b611c87565b604051610a379190613bff565b60405180910390f35b348015610a4c57600080fd5b50610a55611ca7565b604051610a629190613c69565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613d5a565b611cb1565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613d5a565b611d71565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613d5a565b611e48565b604051610af19190613bff565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613b19565b611e9e565b005b348015610b2f57600080fd5b50610b38611f47565b604051610b459190613bff565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613b19565b611f5e565b005b348015610b8357600080fd5b50610b9e6004803603810190610b999190613c1a565b611fe4565b604051610bab9190613c69565b60405180910390f35b348015610bc057600080fd5b50610bc961206b565b604051610bd69190613c69565b60405180910390f35b348015610beb57600080fd5b50610bf4612075565b604051610c019190613c69565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190613b19565b61207f565b005b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613d5a565b612105565b005b348015610c6857600080fd5b50610c836004803603810190610c7e9190613eda565b6121fc565b005b606060018054610c9490613f5c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc090613f5c565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b610d1f6122fc565b73ffffffffffffffffffffffffffffffffffffffff16610d3d6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613fd9565b60405180910390fd5b8060198190555050565b6000610db1610daa6122fc565b8484612304565b6001905092915050565b610dc36122fc565b73ffffffffffffffffffffffffffffffffffffffff16610de16117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613fd9565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061100d6122fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561108a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110819061406b565b60405180910390fd5b6110958484846124cd565b611135846110a16122fc565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110eb6122fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113091906140ba565b612304565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61116c6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661118a6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613fd9565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124f6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661126d6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613fd9565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b6113606122fc565b73ffffffffffffffffffffffffffffffffffffffff1661137e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613fd9565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561141f573d6000803e3d6000fd5b505050565b6000602454905090565b6114366122fc565b73ffffffffffffffffffffffffffffffffffffffff166114546117fe565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613fd9565b60405180910390fd5b806005819055506064600554600a546114c391906140ee565b6114cd919061415f565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115316122fc565b73ffffffffffffffffffffffffffffffffffffffff1661154f6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613fd9565b60405180910390fd5b6115af6000613200565b565b6115b96122fc565b73ffffffffffffffffffffffffffffffffffffffff166115d76117fe565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613fd9565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6116526122fc565b73ffffffffffffffffffffffffffffffffffffffff166116706117fe565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613fd9565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b6116eb6122fc565b73ffffffffffffffffffffffffffffffffffffffff166117096117fe565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690613fd9565b60405180910390fd5b8060208190555050565b60006117736117fe565b905090565b6117806122fc565b73ffffffffffffffffffffffffffffffffffffffff1661179e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613fd9565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b60606002805461184090613f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90613f5c565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050905090565b6118cb6122fc565b73ffffffffffffffffffffffffffffffffffffffff166118e96117fe565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613fd9565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614202565b60405180910390fd5b6119d982826132c4565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1b6122fc565b73ffffffffffffffffffffffffffffffffffffffff16611a396117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613fd9565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611af26122fc565b73ffffffffffffffffffffffffffffffffffffffff16611b106117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613fd9565b60405180910390fd5b806006819055506064600654600a54611b7f91906140ee565b611b89919061415f565b60148190555050565b6000611ba6611b9f6122fc565b84846124cd565b6001905092915050565b611bb86122fc565b73ffffffffffffffffffffffffffffffffffffffff16611bd66117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613fd9565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611cb96122fc565b73ffffffffffffffffffffffffffffffffffffffff16611cd76117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613fd9565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d796122fc565b73ffffffffffffffffffffffffffffffffffffffff16611d976117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de490613fd9565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ea66122fc565b73ffffffffffffffffffffffffffffffffffffffff16611ec46117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613fd9565b60405180910390fd5b806007819055506103e8600754600a54611f3491906140ee565b611f3e919061415f565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b611f666122fc565b73ffffffffffffffffffffffffffffffffffffffff16611f846117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190613fd9565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b6120876122fc565b73ffffffffffffffffffffffffffffffffffffffff166120a56117fe565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613fd9565b60405180910390fd5b80601b8190555050565b61210d6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661212b6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614294565b60405180910390fd5b6121f981613200565b50565b6122046122fc565b73ffffffffffffffffffffffffffffffffffffffff166122226117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90613fd9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016122b3929190614313565b6020604051808303816000875af11580156122d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f69190614351565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906143f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614482565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c09190613c69565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253390614514565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a2906145a6565b60405180910390fd5b600081116125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614638565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c906146ca565b60405180910390fd5b60001515601d60009054906101000a900460ff1615150361277157601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127315750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790614736565b60405180910390fd5b5b600860009054906101000a900460ff1615612b5e5761278e6117fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156127fc57506127cc6117fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128355750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561286f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b5d57601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129175750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be57601454821115612961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612958906147c8565b60405180910390fd5b60135461296d846114e0565b8361297891906147e8565b11156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614868565b60405180910390fd5b612b5c565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a615750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab057601454821115612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa2906148fa565b60405180910390fd5b612b5b565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5a57601354612b0d846114e0565b83612b1891906147e8565b1115612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614868565b60405180910390fd5b5b5b5b5b5b6000612b69306114e0565b9050600b548110158015612b8a5750602260009054906101000a900460ff16155b8015612be45750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc5750602260019054906101000a900460ff165b15612c1a57600b548110612c1957600b549050612c1881613365565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cc15750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cd3576000600481905550600090505b6000808215612fcf5760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612d8b575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614966565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e725750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15612ece576000600481905550606460205487612e8f91906140ee565b612e99919061415f565b91506064601e5487612eab91906140ee565b612eb5919061415f565b90508082612ec391906147e8565b600481905550612fce565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f755750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612fcd5760006004819055506064601b5487612f9291906140ee565b612f9c919061415f565b9150606460195487612fae91906140ee565b612fb8919061415f565b90508082612fc691906147e8565b6004819055505b5b5b8585612fdb91906140ba565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080828761302b91906140ba565b61303591906140ba565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308391906147e8565b925050819055506000811461318457600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130e391906147e8565b9250508190555080602460008282546130fc91906147e8565b92505081905550816023600082825461311591906147e8565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161317b9190613c69565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896131e191906140ba565b6040516131ee9190613c69565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff02191690831515021790555061338b6024546133fb565b613396602354613486565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904816040516133c59190613c69565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b600060028261340a919061415f565b90506000818361341a91906140ba565b9050600047905061342a836136eb565b6000814761343891906140ba565b9050613444838261392e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161347793929190614986565b60405180910390a15050505050565b6000600267ffffffffffffffff8111156134a3576134a26149bd565b5b6040519080825280602002602001820160405280156134d15781602001602082028036833780820191505090505b50905030816000815181106134e9576134e86149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b49190614a30565b816001815181106135c8576135c76149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061362f30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016136b5959493929190614b56565b600060405180830381600087803b1580156136cf57600080fd5b505af11580156136e3573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff811115613708576137076149bd565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b509050308160008151811061374e5761374d6149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138199190614a30565b8160018151811061382d5761382c6149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389430602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138f8959493929190614bb0565b600060405180830381600087803b15801561391257600080fd5b505af1158015613926573d6000803e3d6000fd5b505050505050565b61395b30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b81526004016139e296959493929190614c0a565b60606040518083038185885af1158015613a00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a259190614c80565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a66578082015181840152602081019050613a4b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a8e82613a2c565b613a988185613a37565b9350613aa8818560208601613a48565b613ab181613a72565b840191505092915050565b60006020820190508181036000830152613ad68184613a83565b905092915050565b600080fd5b6000819050919050565b613af681613ae3565b8114613b0157600080fd5b50565b600081359050613b1381613aed565b92915050565b600060208284031215613b2f57613b2e613ade565b5b6000613b3d84828501613b04565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7182613b46565b9050919050565b613b8181613b66565b8114613b8c57600080fd5b50565b600081359050613b9e81613b78565b92915050565b60008060408385031215613bbb57613bba613ade565b5b6000613bc985828601613b8f565b9250506020613bda85828601613b04565b9150509250929050565b60008115159050919050565b613bf981613be4565b82525050565b6000602082019050613c146000830184613bf0565b92915050565b60008060408385031215613c3157613c30613ade565b5b6000613c3f85828601613b8f565b9250506020613c5085828601613b8f565b9150509250929050565b613c6381613ae3565b82525050565b6000602082019050613c7e6000830184613c5a565b92915050565b600080600060608486031215613c9d57613c9c613ade565b5b6000613cab86828701613b8f565b9350506020613cbc86828701613b8f565b9250506040613ccd86828701613b04565b9150509250925092565b613ce081613b66565b82525050565b6000602082019050613cfb6000830184613cd7565b92915050565b613d0a81613be4565b8114613d1557600080fd5b50565b600081359050613d2781613d01565b92915050565b600060208284031215613d4357613d42613ade565b5b6000613d5184828501613d18565b91505092915050565b600060208284031215613d7057613d6f613ade565b5b6000613d7e84828501613b8f565b91505092915050565b6000613d9282613b46565b9050919050565b613da281613d87565b8114613dad57600080fd5b50565b600081359050613dbf81613d99565b92915050565b600060208284031215613ddb57613dda613ade565b5b6000613de984828501613db0565b91505092915050565b60008060408385031215613e0957613e08613ade565b5b6000613e1785828601613b8f565b9250506020613e2885828601613d18565b9150509250929050565b613e3b81613d87565b82525050565b6000602082019050613e566000830184613e32565b92915050565b60008060408385031215613e7357613e72613ade565b5b6000613e8185828601613db0565b9250506020613e9285828601613d18565b9150509250929050565b6000613ea782613b66565b9050919050565b613eb781613e9c565b8114613ec257600080fd5b50565b600081359050613ed481613eae565b92915050565b600080600060608486031215613ef357613ef2613ade565b5b6000613f0186828701613ec5565b9350506020613f1286828701613db0565b9250506040613f2386828701613b04565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7457607f821691505b602082108103613f8757613f86613f2d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc3602083613a37565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614055602883613a37565b915061406082613ff9565b604082019050919050565b6000602082019050818103600083015261408481614048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c582613ae3565b91506140d083613ae3565b92508282039050818111156140e8576140e761408b565b5b92915050565b60006140f982613ae3565b915061410483613ae3565b925082820261411281613ae3565b915082820484148315176141295761412861408b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416a82613ae3565b915061417583613ae3565b92508261418557614184614130565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141ec603983613a37565b91506141f782614190565b604082019050919050565b6000602082019050818103600083015261421b816141df565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061427e602683613a37565b915061428982614222565b604082019050919050565b600060208201905081810360008301526142ad81614271565b9050919050565b6000819050919050565b60006142d96142d46142cf84613b46565b6142b4565b613b46565b9050919050565b60006142eb826142be565b9050919050565b60006142fd826142e0565b9050919050565b61430d816142f2565b82525050565b60006040820190506143286000830185614304565b6143356020830184613c5a565b9392505050565b60008151905061434b81613d01565b92915050565b60006020828403121561436757614366613ade565b5b60006143758482850161433c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143da602483613a37565b91506143e58261437e565b604082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061446c602283613a37565b915061447782614410565b604082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144fe602583613a37565b9150614509826144a2565b604082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614590602383613a37565b915061459b82614534565b604082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b6000614622603283613a37565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b4602683613a37565b91506146bf82614658565b604082019050919050565b600060208201905081810360008301526146e3816146a7565b9050919050565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b6000614720601d83613a37565b915061472b826146ea565b602082019050919050565b6000602082019050818103600083015261474f81614713565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147b2603583613a37565b91506147bd82614756565b604082019050919050565b600060208201905081810360008301526147e1816147a5565b9050919050565b60006147f382613ae3565b91506147fe83613ae3565b92508282019050808211156148165761481561408b565b5b92915050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614852601b83613a37565b915061485d8261481c565b602082019050919050565b6000602082019050818103600083015261488181614845565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148e4603683613a37565b91506148ef82614888565b604082019050919050565b60006020820190508181036000830152614913816148d7565b9050919050565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b6000614950601883613a37565b915061495b8261491a565b602082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b600060608201905061499b6000830186613c5a565b6149a86020830185613c5a565b6149b56040830184613c5a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a2a81613b78565b92915050565b600060208284031215614a4657614a45613ade565b5b6000614a5484828501614a1b565b91505092915050565b6000819050919050565b6000614a82614a7d614a7884614a5d565b6142b4565b613ae3565b9050919050565b614a9281614a67565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614acd81613b66565b82525050565b6000614adf8383614ac4565b60208301905092915050565b6000602082019050919050565b6000614b0382614a98565b614b0d8185614aa3565b9350614b1883614ab4565b8060005b83811015614b49578151614b308882614ad3565b9750614b3b83614aeb565b925050600181019050614b1c565b5085935050505092915050565b600060a082019050614b6b6000830188613c5a565b614b786020830187614a89565b8181036040830152614b8a8186614af8565b9050614b996060830185614304565b614ba66080830184613c5a565b9695505050505050565b600060a082019050614bc56000830188613c5a565b614bd26020830187614a89565b8181036040830152614be48186614af8565b9050614bf36060830185613cd7565b614c006080830184613c5a565b9695505050505050565b600060c082019050614c1f6000830189613cd7565b614c2c6020830188613c5a565b614c396040830187614a89565b614c466060830186614a89565b614c536080830185613cd7565b614c6060a0830184613c5a565b979650505050505050565b600081519050614c7a81613aed565b92915050565b600080600060608486031215614c9957614c98613ade565b5b6000614ca786828701614c6b565b9350506020614cb886828701614c6b565b9250506040614cc986828701614c6b565b915050925092509256fea2646970667358221220a84bda07403570587b3f76bec887614faed3e992136100756567b365a1b1b34064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063893d20e8116101ab578063b62496f5116100f7578063d7d7442f11610095578063e1370dd31161006f578063e1370dd314610bdf578063edcf19b214610c0a578063f2fde38b14610c33578063f7da678514610c5c57610340565b8063d7d7442f14610b4e578063dd62ed3e14610b77578063ddcf9b9814610bb457610340565b8063cb664534116100d1578063cb66453414610a94578063cba0e99614610abd578063d1294d4c14610afa578063d15bcf0f14610b2357610340565b8063b62496f514610a03578063bf9b015914610a40578063bf9eb54014610a6b57610340565b80639b136da411610164578063a6c38f591161013e578063a6c38f591461094b578063a7a0745214610974578063a9059cbb1461099d578063b4d95a93146109da57610340565b80639b136da4146108ca578063a04bdc81146108f5578063a5ece9411461092057610340565b8063893d20e8146107cc5780638cd0260c146107f75780638da5cb5b1461082057806390f502831461084b57806395d89b41146108765780639a7a23d6146108a157610340565b80634a0e963c116102855780636573c4df11610223578063715018a6116101fd578063715018a61461074c578063751039fc14610763578063801527ce1461077a5780638628c23f146107a357610340565b80636573c4df146106bb5780636df3333a146106e457806370a082311461070f57610340565b80634bd7ace51161025f5780634bd7ace5146106115780635297defd1461063c5780635be76f111461066757806364c161631461069057610340565b80634a0e963c146105925780634a62bb65146105bb5780634a74bb02146105e657610340565b806322788f86116102f25780632d03420b116102cc5780632d03420b146104e8578063313ce56714610511578063487a69051461053c57806349bd5a5e1461056757610340565b806322788f861461045557806323b872dd1461048057806327c8f835146104bd57610340565b806306fdde03146103455780630882a86314610370578063095ea7b31461039957806313b4a7f4146103d657806318160ddd146103ff578063220f66961461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610c85565b6040516103679190613abc565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613b19565b610d17565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613ba4565b610d9d565b6040516103cd9190613bff565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613c1a565b610dbb565b005b34801561040b57600080fd5b50610414610f9b565b6040516104219190613c69565b60405180910390f35b34801561043657600080fd5b5061043f610fa5565b60405161044c9190613bff565b60405180910390f35b34801561046157600080fd5b5061046a610fb8565b6040516104779190613c69565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613c84565b610fc2565b6040516104b49190613bff565b60405180910390f35b3480156104c957600080fd5b506104d2611140565b6040516104df9190613ce6565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613d2d565b611164565b005b34801561051d57600080fd5b506105266111fd565b6040516105339190613c69565b60405180910390f35b34801561054857600080fd5b50610551611217565b60405161055e9190613c69565b60405180910390f35b34801561057357600080fd5b5061057c611221565b6040516105899190613ce6565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613d5a565b611247565b005b3480156105c757600080fd5b506105d061131e565b6040516105dd9190613bff565b60405180910390f35b3480156105f257600080fd5b506105fb611331565b6040516106089190613bff565b60405180910390f35b34801561061d57600080fd5b50610626611344565b6040516106339190613c69565b60405180910390f35b34801561064857600080fd5b5061065161134e565b60405161065e9190613c69565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613dc5565b611358565b005b34801561069c57600080fd5b506106a5611424565b6040516106b29190613c69565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613b19565b61142e565b005b3480156106f057600080fd5b506106f96114d6565b6040516107069190613c69565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190613d5a565b6114e0565b6040516107439190613c69565b60405180910390f35b34801561075857600080fd5b50610761611529565b005b34801561076f57600080fd5b506107786115b1565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613d2d565b61164a565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613b19565b6116e3565b005b3480156107d857600080fd5b506107e1611769565b6040516107ee9190613ce6565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613b19565b611778565b005b34801561082c57600080fd5b506108356117fe565b6040516108429190613ce6565b60405180910390f35b34801561085757600080fd5b50610860611827565b60405161086d9190613c69565b60405180910390f35b34801561088257600080fd5b5061088b611831565b6040516108989190613abc565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613df2565b6118c3565b005b3480156108d657600080fd5b506108df6119dd565b6040516108ec9190613c69565b60405180910390f35b34801561090157600080fd5b5061090a6119e7565b6040516109179190613c69565b60405180910390f35b34801561092c57600080fd5b506109356119ed565b6040516109429190613e41565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d9190613e5c565b611a13565b005b34801561098057600080fd5b5061099b60048036038101906109969190613b19565b611aea565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613ba4565b611b92565b6040516109d19190613bff565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613d5a565b611bb0565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613d5a565b611c87565b604051610a379190613bff565b60405180910390f35b348015610a4c57600080fd5b50610a55611ca7565b604051610a629190613c69565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190613d5a565b611cb1565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613d5a565b611d71565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613d5a565b611e48565b604051610af19190613bff565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613b19565b611e9e565b005b348015610b2f57600080fd5b50610b38611f47565b604051610b459190613bff565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190613b19565b611f5e565b005b348015610b8357600080fd5b50610b9e6004803603810190610b999190613c1a565b611fe4565b604051610bab9190613c69565b60405180910390f35b348015610bc057600080fd5b50610bc961206b565b604051610bd69190613c69565b60405180910390f35b348015610beb57600080fd5b50610bf4612075565b604051610c019190613c69565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190613b19565b61207f565b005b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613d5a565b612105565b005b348015610c6857600080fd5b50610c836004803603810190610c7e9190613eda565b6121fc565b005b606060018054610c9490613f5c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc090613f5c565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b610d1f6122fc565b73ffffffffffffffffffffffffffffffffffffffff16610d3d6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613fd9565b60405180910390fd5b8060198190555050565b6000610db1610daa6122fc565b8484612304565b6001905092915050565b610dc36122fc565b73ffffffffffffffffffffffffffffffffffffffff16610de16117fe565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613fd9565b60405180910390fd5b6001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a54905090565b602260009054906101000a900460ff1681565b6000600954905090565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061100d6122fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561108a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110819061406b565b60405180910390fd5b6110958484846124cd565b611135846110a16122fc565b84600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110eb6122fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113091906140ba565b612304565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b61116c6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661118a6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613fd9565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600b54905090565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61124f6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661126d6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613fd9565b60405180910390fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860009054906101000a900460ff1681565b602260019054906101000a900460ff1681565b6000601954905090565b6000602054905090565b6113606122fc565b73ffffffffffffffffffffffffffffffffffffffff1661137e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613fd9565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561141f573d6000803e3d6000fd5b505050565b6000602454905090565b6114366122fc565b73ffffffffffffffffffffffffffffffffffffffff166114546117fe565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613fd9565b60405180910390fd5b806005819055506064600554600a546114c391906140ee565b6114cd919061415f565b60138190555050565b6000600754905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115316122fc565b73ffffffffffffffffffffffffffffffffffffffff1661154f6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613fd9565b60405180910390fd5b6115af6000613200565b565b6115b96122fc565b73ffffffffffffffffffffffffffffffffffffffff166115d76117fe565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613fd9565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6116526122fc565b73ffffffffffffffffffffffffffffffffffffffff166116706117fe565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613fd9565b60405180910390fd5b80602260016101000a81548160ff02191690831515021790555050565b6116eb6122fc565b73ffffffffffffffffffffffffffffffffffffffff166117096117fe565b73ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690613fd9565b60405180910390fd5b8060208190555050565b60006117736117fe565b905090565b6117806122fc565b73ffffffffffffffffffffffffffffffffffffffff1661179e6117fe565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613fd9565b60405180910390fd5b80601e8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e54905090565b60606002805461184090613f5c565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90613f5c565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050905090565b6118cb6122fc565b73ffffffffffffffffffffffffffffffffffffffff166118e96117fe565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613fd9565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614202565b60405180910390fd5b6119d982826132c4565b5050565b6000601b54905090565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1b6122fc565b73ffffffffffffffffffffffffffffffffffffffff16611a396117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613fd9565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611af26122fc565b73ffffffffffffffffffffffffffffffffffffffff16611b106117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613fd9565b60405180910390fd5b806006819055506064600654600a54611b7f91906140ee565b611b89919061415f565b60148190555050565b6000611ba6611b9f6122fc565b84846124cd565b6001905092915050565b611bb86122fc565b73ffffffffffffffffffffffffffffffffffffffff16611bd66117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613fd9565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000601454905090565b611cb96122fc565b73ffffffffffffffffffffffffffffffffffffffff16611cd76117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613fd9565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d796122fc565b73ffffffffffffffffffffffffffffffffffffffff16611d976117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de490613fd9565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ea66122fc565b73ffffffffffffffffffffffffffffffffffffffff16611ec46117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613fd9565b60405180910390fd5b806007819055506103e8600754600a54611f3491906140ee565b611f3e919061415f565b600b8190555050565b6000601d60009054906101000a900460ff16905090565b611f666122fc565b73ffffffffffffffffffffffffffffffffffffffff16611f846117fe565b73ffffffffffffffffffffffffffffffffffffffff1614611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190613fd9565b60405180910390fd5b8060098190555050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602354905090565b6000601354905090565b6120876122fc565b73ffffffffffffffffffffffffffffffffffffffff166120a56117fe565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613fd9565b60405180910390fd5b80601b8190555050565b61210d6122fc565b73ffffffffffffffffffffffffffffffffffffffff1661212b6117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614294565b60405180910390fd5b6121f981613200565b50565b6122046122fc565b73ffffffffffffffffffffffffffffffffffffffff166122226117fe565b73ffffffffffffffffffffffffffffffffffffffff1614612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90613fd9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016122b3929190614313565b6020604051808303816000875af11580156122d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f69190614351565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906143f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614482565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c09190613c69565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253390614514565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a2906145a6565b60405180910390fd5b600081116125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614638565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c906146ca565b60405180910390fd5b60001515601d60009054906101000a900460ff1615150361277157601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127315750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790614736565b60405180910390fd5b5b600860009054906101000a900460ff1615612b5e5761278e6117fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156127fc57506127cc6117fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128355750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561286f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b5d57601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129175750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be57601454821115612961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612958906147c8565b60405180910390fd5b60135461296d846114e0565b8361297891906147e8565b11156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614868565b60405180910390fd5b612b5c565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a615750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab057601454821115612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa2906148fa565b60405180910390fd5b612b5b565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5a57601354612b0d846114e0565b83612b1891906147e8565b1115612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614868565b60405180910390fd5b5b5b5b5b5b6000612b69306114e0565b9050600b548110158015612b8a5750602260009054906101000a900460ff16155b8015612be45750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc5750602260019054906101000a900460ff165b15612c1a57600b548110612c1957600b549050612c1881613365565b5b5b600060019050600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cc15750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cd3576000600481905550600090505b6000808215612fcf5760011515601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612d8b575060011515601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614966565b60405180910390fd5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e725750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15612ece576000600481905550606460205487612e8f91906140ee565b612e99919061415f565b91506064601e5487612eab91906140ee565b612eb5919061415f565b90508082612ec391906147e8565b600481905550612fce565b601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f755750602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612fcd5760006004819055506064601b5487612f9291906140ee565b612f9c919061415f565b9150606460195487612fae91906140ee565b612fb8919061415f565b90508082612fc691906147e8565b6004819055505b5b5b8585612fdb91906140ba565b600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080828761302b91906140ba565b61303591906140ba565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308391906147e8565b925050819055506000811461318457600454600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130e391906147e8565b9250508190555080602460008282546130fc91906147e8565b92505081905550816023600082825461311591906147e8565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161317b9190613c69565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454896131e191906140ba565b6040516131ee9190613c69565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602260006101000a81548160ff02191690831515021790555061338b6024546133fb565b613396602354613486565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904816040516133c59190613c69565b60405180910390a1600060238190555060006024819055506000602260006101000a81548160ff02191690831515021790555050565b600060028261340a919061415f565b90506000818361341a91906140ba565b9050600047905061342a836136eb565b6000814761343891906140ba565b9050613444838261392e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161347793929190614986565b60405180910390a15050505050565b6000600267ffffffffffffffff8111156134a3576134a26149bd565b5b6040519080825280602002602001820160405280156134d15781602001602082028036833780820191505090505b50905030816000815181106134e9576134e86149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b49190614a30565b816001815181106135c8576135c76149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061362f30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016136b5959493929190614b56565b600060405180830381600087803b1580156136cf57600080fd5b505af11580156136e3573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff811115613708576137076149bd565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b509050308160008151811061374e5761374d6149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138199190614a30565b8160018151811061382d5761382c6149ec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389430602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138f8959493929190614bb0565b600060405180830381600087803b15801561391257600080fd5b505af1158015613926573d6000803e3d6000fd5b505050505050565b61395b30602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612304565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b81526004016139e296959493929190614c0a565b60606040518083038185885af1158015613a00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a259190614c80565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a66578082015181840152602081019050613a4b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a8e82613a2c565b613a988185613a37565b9350613aa8818560208601613a48565b613ab181613a72565b840191505092915050565b60006020820190508181036000830152613ad68184613a83565b905092915050565b600080fd5b6000819050919050565b613af681613ae3565b8114613b0157600080fd5b50565b600081359050613b1381613aed565b92915050565b600060208284031215613b2f57613b2e613ade565b5b6000613b3d84828501613b04565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7182613b46565b9050919050565b613b8181613b66565b8114613b8c57600080fd5b50565b600081359050613b9e81613b78565b92915050565b60008060408385031215613bbb57613bba613ade565b5b6000613bc985828601613b8f565b9250506020613bda85828601613b04565b9150509250929050565b60008115159050919050565b613bf981613be4565b82525050565b6000602082019050613c146000830184613bf0565b92915050565b60008060408385031215613c3157613c30613ade565b5b6000613c3f85828601613b8f565b9250506020613c5085828601613b8f565b9150509250929050565b613c6381613ae3565b82525050565b6000602082019050613c7e6000830184613c5a565b92915050565b600080600060608486031215613c9d57613c9c613ade565b5b6000613cab86828701613b8f565b9350506020613cbc86828701613b8f565b9250506040613ccd86828701613b04565b9150509250925092565b613ce081613b66565b82525050565b6000602082019050613cfb6000830184613cd7565b92915050565b613d0a81613be4565b8114613d1557600080fd5b50565b600081359050613d2781613d01565b92915050565b600060208284031215613d4357613d42613ade565b5b6000613d5184828501613d18565b91505092915050565b600060208284031215613d7057613d6f613ade565b5b6000613d7e84828501613b8f565b91505092915050565b6000613d9282613b46565b9050919050565b613da281613d87565b8114613dad57600080fd5b50565b600081359050613dbf81613d99565b92915050565b600060208284031215613ddb57613dda613ade565b5b6000613de984828501613db0565b91505092915050565b60008060408385031215613e0957613e08613ade565b5b6000613e1785828601613b8f565b9250506020613e2885828601613d18565b9150509250929050565b613e3b81613d87565b82525050565b6000602082019050613e566000830184613e32565b92915050565b60008060408385031215613e7357613e72613ade565b5b6000613e8185828601613db0565b9250506020613e9285828601613d18565b9150509250929050565b6000613ea782613b66565b9050919050565b613eb781613e9c565b8114613ec257600080fd5b50565b600081359050613ed481613eae565b92915050565b600080600060608486031215613ef357613ef2613ade565b5b6000613f0186828701613ec5565b9350506020613f1286828701613db0565b9250506040613f2386828701613b04565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7457607f821691505b602082108103613f8757613f86613f2d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc3602083613a37565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614055602883613a37565b915061406082613ff9565b604082019050919050565b6000602082019050818103600083015261408481614048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c582613ae3565b91506140d083613ae3565b92508282039050818111156140e8576140e761408b565b5b92915050565b60006140f982613ae3565b915061410483613ae3565b925082820261411281613ae3565b915082820484148315176141295761412861408b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416a82613ae3565b915061417583613ae3565b92508261418557614184614130565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141ec603983613a37565b91506141f782614190565b604082019050919050565b6000602082019050818103600083015261421b816141df565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061427e602683613a37565b915061428982614222565b604082019050919050565b600060208201905081810360008301526142ad81614271565b9050919050565b6000819050919050565b60006142d96142d46142cf84613b46565b6142b4565b613b46565b9050919050565b60006142eb826142be565b9050919050565b60006142fd826142e0565b9050919050565b61430d816142f2565b82525050565b60006040820190506143286000830185614304565b6143356020830184613c5a565b9392505050565b60008151905061434b81613d01565b92915050565b60006020828403121561436757614366613ade565b5b60006143758482850161433c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143da602483613a37565b91506143e58261437e565b604082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061446c602283613a37565b915061447782614410565b604082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144fe602583613a37565b9150614509826144a2565b604082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614590602383613a37565b915061459b82614534565b604082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b6000614622603283613a37565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b4602683613a37565b91506146bf82614658565b604082019050919050565b600060208201905081810360008301526146e3816146a7565b9050919050565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b6000614720601d83613a37565b915061472b826146ea565b602082019050919050565b6000602082019050818103600083015261474f81614713565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147b2603583613a37565b91506147bd82614756565b604082019050919050565b600060208201905081810360008301526147e1816147a5565b9050919050565b60006147f382613ae3565b91506147fe83613ae3565b92508282019050808211156148165761481561408b565b5b92915050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614852601b83613a37565b915061485d8261481c565b602082019050919050565b6000602082019050818103600083015261488181614845565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148e4603683613a37565b91506148ef82614888565b604082019050919050565b60006020820190508181036000830152614913816148d7565b9050919050565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b6000614950601883613a37565b915061495b8261491a565b602082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b600060608201905061499b6000830186613c5a565b6149a86020830185613c5a565b6149b56040830184613c5a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a2a81613b78565b92915050565b600060208284031215614a4657614a45613ade565b5b6000614a5484828501614a1b565b91505092915050565b6000819050919050565b6000614a82614a7d614a7884614a5d565b6142b4565b613ae3565b9050919050565b614a9281614a67565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614acd81613b66565b82525050565b6000614adf8383614ac4565b60208301905092915050565b6000602082019050919050565b6000614b0382614a98565b614b0d8185614aa3565b9350614b1883614ab4565b8060005b83811015614b49578151614b308882614ad3565b9750614b3b83614aeb565b925050600181019050614b1c565b5085935050505092915050565b600060a082019050614b6b6000830188613c5a565b614b786020830187614a89565b8181036040830152614b8a8186614af8565b9050614b996060830185614304565b614ba66080830184613c5a565b9695505050505050565b600060a082019050614bc56000830188613c5a565b614bd26020830187614a89565b8181036040830152614be48186614af8565b9050614bf36060830185613cd7565b614c006080830184613c5a565b9695505050505050565b600060c082019050614c1f6000830189613cd7565b614c2c6020830188613c5a565b614c396040830187614a89565b614c466060830186614a89565b614c536080830185613cd7565b614c6060a0830184613c5a565b979650505050505050565b600081519050614c7a81613aed565b92915050565b600080600060608486031215614c9957614c98613ade565b5b6000614ca786828701614c6b565b9350506020614cb886828701614c6b565b9250506040614cc986828701614c6b565b915050925092509256fea2646970667358221220a84bda07403570587b3f76bec887614faed3e992136100756567b365a1b1b34064736f6c63430008110033

Deployed Bytecode Sourcemap

5578:15825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10144:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20221:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9791:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18939:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9201:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7322:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11643:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10684:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7404:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17137:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10054:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21295:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7870:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18693:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5921:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7357:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11216:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11533:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16951:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9093:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10495:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21192:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9318:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4943:94;;;;;;;;;;;;;:::i;:::-;;9965:81;;;;;;;;;;;;;:::i;:::-;;19373:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20583:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8890:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20464:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4292:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11429:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10226:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19777:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11318:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6074:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6489:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11080:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10324:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9447:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18815:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6403:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20814:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19524:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16158:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11750:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20909:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21089:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19253:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9634:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8982:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20711:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20338:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5192:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16700:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10144:76;10183:13;10210:5;10203:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10144:76;:::o;20221:111::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20315:9:::1;20303;:21;;;;20221:111:::0;:::o;9791:168::-;9868:4;9888:37;9897:12;:10;:12::i;:::-;9910:7;9918:6;9888:8;:37::i;:::-;9947:4;9940:11;;9791:168;;;;:::o;18939:302::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19082:4:::1;19045:17;:34;19071:6;19045:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19126:4;19097:17;:26;19115:7;19097:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19177:4;19141:16;:33;19166:6;19141:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;19220:4;19192:16;:25;19209:7;19192:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18939:302:::0;;:::o;9201:106::-;9256:7;9286:12;;9279:19;;9201:106;:::o;7322:28::-;;;;;;;;;;;;;:::o;11643:101::-;11694:7;11720:16;;11713:23;;11643:101;:::o;10684:388::-;10816:4;10850:11;:19;10862:6;10850:19;;;;;;;;;;;;;;;:33;10870:12;:10;:12::i;:::-;10850:33;;;;;;;;;;;;;;;;10840:6;:43;;10832:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10933:36;10943:6;10951:9;10962:6;10933:9;:36::i;:::-;10974:74;10983:6;10991:12;:10;:12::i;:::-;11041:6;11005:11;:19;11017:6;11005:19;;;;;;;;;;;;;;;:33;11025:12;:10;:12::i;:::-;11005:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;10974:8;:74::i;:::-;11060:4;11053:11;;10684:388;;;;;:::o;7404:81::-;;;:::o;17137:90::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17213:6:::1;17198:12;;:21;;;;;;;;;;;;;;;;;;17137:90:::0;:::o;10054:84::-;10095:7;10121:9;;;;;;;;;;;10114:16;;;;10054:84;:::o;21295:105::-;21346:7;21372:20;;21365:27;;21295:105;:::o;7870:28::-;;;;;;;;;;;;;:::o;18693:114::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18795:4:::1;18764:17;:28;18782:9;18764:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18693:114:::0;:::o;5921:33::-;;;;;;;;;;;;;:::o;7357:40::-;;;;;;;;;;;;;:::o;11216:96::-;11265:7;11295:9;;11288:16;;11216:96;:::o;11533:98::-;11583:7;11613:10;;11606:17;;11533:98;:::o;16951:178::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17027:18:::1;17048:21;17027:42;;17088:11;17080:29;;:41;17110:10;17080:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17016:113;16951:178:::0;:::o;9093:99::-;9144:7;9174:9;;9167:16;;9093:99;:::o;10495:175::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10591:6:::1;10571:17;:26;;;;10657:3;10639:17;;10626:12;;:30;;;;:::i;:::-;:34;;;;:::i;:::-;10608:15;:52;;;;10495:175:::0;:::o;21192:97::-;21243:7;21269:12;;21262:19;;21192:97;:::o;9318:118::-;9384:7;9410:9;:18;9420:7;9410:18;;;;;;;;;;;;;;;;9403:25;;9318:118;;;:::o;4943:94::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5008:21:::1;5026:1;5008:9;:21::i;:::-;4943:94::o:0;9965:81::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10033:5:::1;10016:14;;:22;;;;;;;;;;;;;;;;;;9965:81::o:0;19373:113::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19470:8:::1;19446:21;;:32;;;;;;;;;;;;;;;;;;19373:113:::0;:::o;20583:112::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20678:9:::1;20666:10;:21;;;;20583:112:::0;:::o;8890:86::-;8931:7;8961;:5;:7::i;:::-;8954:14;;8890:86;:::o;20464:113::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20560:9:::1;20548:10;:21;;;;20464:113:::0;:::o;4292:87::-;4338:7;4365:6;;;;;;;;;;;4358:13;;4292:87;:::o;11429:98::-;11479:7;11509:10;;11502:17;;11429:98;:::o;10226:88::-;10267:13;10299:7;10292:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10226:88;:::o;19777:242::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19884:13:::1;;;;;;;;;;;19876:21;;:4;:21;;::::0;19868:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19970:41;19999:4;20005:5;19970:28;:41::i;:::-;19777:242:::0;;:::o;11318:96::-;11367:7;11397:9;;11390:16;;11318:96;:::o;6074:71::-;;;;:::o;6489:93::-;;;;;;;;;;;;;:::o;11080:130::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11197:5:::1;11171:10;:23;11182:11;11171:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;11080:130:::0;;:::o;10324:164::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10412:6:::1;10396:13;:22;;;;10470:3;10456:13;;10443:12;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;10429:11;:44;;;;10324:164:::0;:::o;9447:176::-;9527:4;9547:40;9557:12;:10;:12::i;:::-;9570:9;9580:6;9547:9;:40::i;:::-;9609:4;9602:11;;9447:176;;;;:::o;18815:116::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18918:5:::1;18888:17;:27;18906:8;18888:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18815:116:::0;:::o;6403:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20814:89::-;20858:7;20884:11;;20877:18;;20814:89;:::o;19524:118::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19623:10:::1;19596:16;;:38;;;;;;;;;;;;;;;;;;19524:118:::0;:::o;16158:123::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16262:4:::1;16230:17;:29;16248:10;16230:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;16158:123:::0;:::o;11750:118::-;11807:4;11834:17;:26;11852:7;11834:26;;;;;;;;;;;;;;;;;;;;;;;;;11827:33;;11750:118;;;:::o;20909:174::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20995:6:::1;20980:12;:21;;;;21061:4;21048:12;;21035;;:25;;;;:::i;:::-;:30;;;;:::i;:::-;21012:20;:53;;;;20909:174:::0;:::o;21089:97::-;21140:4;21163:12;;;;;;;;;;;21156:19;;21089:97;:::o;19253:112::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19343:12:::1;19324:16;:31;;;;19253:112:::0;:::o;9634:148::-;9717:7;9747:11;:18;9759:5;9747:18;;;;;;;;;;;;;;;:27;9766:7;9747:27;;;;;;;;;;;;;;;;9740:34;;9634:148;;;;:::o;8982:99::-;9033:7;9063:9;;9056:16;;8982:99;:::o;20711:97::-;20759:7;20785:15;;20778:22;;20711:97;:::o;20338:111::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20432:9:::1;20421;:20;;;;20338:111:::0;:::o;5192:192::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5301:1:::1;5281:22;;:8;:22;;::::0;5273:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5357:19;5367:8;5357:9;:19::i;:::-;5192:192:::0;:::o;16700:243::-;4523:12;:10;:12::i;:::-;4512:23;;:7;:5;:7::i;:::-;:23;;;4504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16893:12:::1;:21;;;16915:11;16928:6;16893:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16700:243:::0;;;:::o;252:98::-;305:7;332:10;325:17;;252:98;:::o;18325:322::-;18434:1;18417:19;;:5;:19;;;18409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18509:1;18490:21;;:7;:21;;;18482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18587:6;18557:11;:18;18569:5;18557:18;;;;;;;;;;;;;;;:27;18576:7;18557:27;;;;;;;;;;;;;;;:36;;;;18619:7;18603:32;;18612:5;18603:32;;;18628:6;18603:32;;;;;;:::i;:::-;;;;;;;;18325:322;;;:::o;11876:4007::-;11990:1;11974:18;;:4;:18;;;11966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12061:1;12047:16;;:2;:16;;;12039:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12131:1;12122:6;:10;12114:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12197:21;12221:9;:15;12231:4;12221:15;;;;;;;;;;;;;;;;12197:39;;12272:6;12255:13;:23;;12247:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12351:5;12335:21;;:12;;;;;;;;;;;:21;;;12332:141;;12380:17;:21;12398:2;12380:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;12405:17;:23;12423:4;12405:23;;;;;;;;;;;;;;;;;;;;;;;;;12380:48;12372:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12332:141;12518:14;;;;;;;;;;;12515:1075;;;12578:7;:5;:7::i;:::-;12570:15;;:4;:15;;;;:49;;;;;12612:7;:5;:7::i;:::-;12606:13;;:2;:13;;;;12570:49;:86;;;;;12654:1;12640:16;;:2;:16;;;;12570:86;:128;;;;;12691:6;12677:21;;:2;:21;;;;12570:128;12548:1031;;;12784:25;:31;12810:4;12784:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;12820:31;:35;12852:2;12820:35;;;;;;;;;;;;;;;;;;;;;;;;;12819:36;12784:71;12780:784;;;12898:11;;12888:6;:21;;12880:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13024:15;;13007:13;13017:2;13007:9;:13::i;:::-;12998:6;:22;;;;:::i;:::-;:41;;12990:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12780:784;;;13172:25;:29;13198:2;13172:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;13206:31;:37;13238:4;13206:37;;;;;;;;;;;;;;;;;;;;;;;;;13205:38;13172:71;13168:396;;;13286:11;;13276:6;:21;;13268:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13168:396;;;13403:31;:35;13435:2;13403:35;;;;;;;;;;;;;;;;;;;;;;;;;13399:165;;13497:15;;13480:13;13490:2;13480:9;:13::i;:::-;13471:6;:22;;;;:::i;:::-;:41;;13463:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13399:165;13168:396;12780:784;12548:1031;12515:1075;13601:25;13629:24;13647:4;13629:9;:24::i;:::-;13601:52;;13689:20;;13669:17;:40;;:66;;;;;13719:16;;;;;;;;;;;13718:17;13669:66;:96;;;;;13752:13;;;;;;;;;;;13744:21;;:4;:21;;;;13669:96;:126;;;;;13774:21;;;;;;;;;;;13669:126;13666:352;;;13839:20;;13818:17;:41;13815:188;;13904:20;;13884:40;;13947:36;13965:17;13947;:36::i;:::-;13815:188;13666:352;14034:13;14050:4;14034:20;;14100:17;:23;14118:4;14100:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;14127:17;:21;14145:2;14127:21;;;;;;;;;;;;;;;;;;;;;;;;;14100:48;14097:159;;;14185:1;14169:13;:17;;;;14216:5;14205:16;;14097:159;14270:17;14313;14391:8;14388:1023;;;14488:4;14468:24;;:10;:16;14479:4;14468:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;:46;;;;14510:4;14494:20;;:10;:14;14505:2;14494:14;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;14468:46;14465:127;;;14538:34;;;;;;;;;;:::i;:::-;;;;;;;;14465:127;14646:25;:29;14672:2;14646:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;14693:7;;;;;;;;;;;14679:22;;:2;:22;;;;14646:55;14642:734;;;14746:1;14730:13;:17;;;;14806:3;14795:10;;14786:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14774:35;;14868:3;14857:10;;14848:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14836:35;;14952:9;14940;:21;;;;:::i;:::-;14924:13;:37;;;;14642:734;;;15036:25;:31;15062:4;15036:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;15087:7;;;;;;;;;;;15071:24;;:4;:24;;;;15036:59;15033:343;;;15158:1;15142:13;:17;;;;15213:3;15203:9;;15194:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15182:34;;15270:3;15260:9;;15251:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;15239:34;;15346:9;15334;:21;;;;:::i;:::-;15318:13;:37;;;;15033:343;14642:734;14388:1023;15461:6;15445:13;:22;;;;:::i;:::-;15427:9;:15;15437:4;15427:15;;;;;;;;;;;;;;;:40;;;;15520:9;15508;15499:6;:18;;;;:::i;:::-;:30;;;;:::i;:::-;15482:9;:13;15492:2;15482:13;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;15560:1;15547:9;:14;15544:249;;15597:13;;15569:9;:24;15587:4;15569:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15668:9;15655;;:22;;;;;;;:::i;:::-;;;;;;;;15705:9;15692;;:22;;;;;;;:::i;:::-;;;;;;;;15748:4;15725:44;;15734:4;15725:44;;;15755:13;;15725:44;;;;;;:::i;:::-;;;;;;;;15544:249;15827:2;15812:39;;15821:4;15812:39;;;15837:13;;15830:6;:20;;;;:::i;:::-;15812:39;;;;;;:::i;:::-;;;;;;;;11945:3938;;;;;11876:4007;;;:::o;5392:173::-;5448:16;5467:6;;;;;;;;;;;5448:25;;5493:8;5484:6;;:17;;;;;;;;;;;;;;;;;;5548:8;5517:40;;5538:8;5517:40;;;;;;;;;;;;5437:128;5392:173;:::o;20025:188::-;20142:5;20108:25;:31;20134:4;20108:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20199:5;20165:40;;20193:4;20165:40;;;;;;;;;;;;20025:188;;:::o;15889:262::-;7977:4;7958:16;;:23;;;;;;;;;;;;;;;;;;15969:25:::1;15984:9;;15969:14;:25::i;:::-;16005:30;16025:9;;16005:19;:30::i;:::-;16051:44;16081:13;16051:44;;;;;;:::i;:::-;;;;;;;;16118:1;16106:9;:13;;;;16142:1;16130:9;:13;;;;8011:5:::0;7992:16;;:24;;;;;;;;;;;;;;;;;;15889:262;:::o;17235:388::-;17297:12;17330:1;17312:15;:19;;;;:::i;:::-;17297:34;;17336:17;17374:4;17356:15;:22;;;;:::i;:::-;17336:42;;17383:22;17408:21;17383:46;;17436:22;17453:4;17436:16;:22::i;:::-;17463:18;17509:14;17484:21;:40;;;;:::i;:::-;17463:61;;17532:35;17545:9;17556:10;17532:12;:35::i;:::-;17577:41;17592:4;17597:10;17608:9;17577:41;;;;;;;;:::i;:::-;;;;;;;;17292:331;;;;17235:388;:::o;16287:399::-;16350:21;16388:1;16374:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16350:40;;16413:4;16395;16400:1;16395:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16433:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16423:4;16428:1;16423:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;16452:49;16469:4;16484:7;;;;;;;;;;;16494:6;16452:8;:49::i;:::-;16512:7;;;;;;;;;;;:58;;;16576:6;16588:1;16624:4;16634:16;;;;;;;;;;;16656:15;16512:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16339:347;16287:399;:::o;17631:397::-;17690:21;17728:1;17714:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17690:40;;17753:4;17735;17740:1;17735:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17773:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17763:4;17768:1;17763:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;17792:54;17809:4;17824:7;;;;;;;;;;;17834:11;17792:8;:54::i;:::-;17857:7;;;;;;;;;;;:58;;;17921:11;17938:1;17974:4;17992;18003:15;17857:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17685:343;17631:397;:::o;18040:277::-;18113:54;18130:4;18145:7;;;;;;;;;;;18155:11;18113:8;:54::i;:::-;18174:7;;;;;;;;;;;:23;;;18204:9;18228:4;18239:11;18256:1;18263;18270:11;18292:15;18174:138;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18040:277;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287: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:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:619::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:119;;;4761:79;;:::i;:::-;4723:119;4881:1;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4852:117;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;5136:2;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5107:118;4613:619;;;;;:::o;5238:118::-;5325:24;5343:5;5325:24;:::i;:::-;5320:3;5313:37;5238:118;;:::o;5362:222::-;5455:4;5493:2;5482:9;5478:18;5470:26;;5506:71;5574:1;5563:9;5559:17;5550:6;5506:71;:::i;:::-;5362:222;;;;:::o;5590:116::-;5660:21;5675:5;5660:21;:::i;:::-;5653:5;5650:32;5640:60;;5696:1;5693;5686:12;5640:60;5590:116;:::o;5712:133::-;5755:5;5793:6;5780:20;5771:29;;5809:30;5833:5;5809:30;:::i;:::-;5712:133;;;;:::o;5851:323::-;5907:6;5956:2;5944:9;5935:7;5931:23;5927:32;5924:119;;;5962:79;;:::i;:::-;5924:119;6082:1;6107:50;6149:7;6140:6;6129:9;6125:22;6107:50;:::i;:::-;6097:60;;6053:114;5851:323;;;;:::o;6180:329::-;6239:6;6288:2;6276:9;6267:7;6263:23;6259:32;6256:119;;;6294:79;;:::i;:::-;6256:119;6414:1;6439:53;6484:7;6475:6;6464:9;6460:22;6439:53;:::i;:::-;6429:63;;6385:117;6180:329;;;;:::o;6515:104::-;6560:7;6589:24;6607:5;6589:24;:::i;:::-;6578:35;;6515:104;;;:::o;6625:138::-;6706:32;6732:5;6706:32;:::i;:::-;6699:5;6696:43;6686:71;;6753:1;6750;6743:12;6686:71;6625:138;:::o;6769:155::-;6823:5;6861:6;6848:20;6839:29;;6877:41;6912:5;6877:41;:::i;:::-;6769:155;;;;:::o;6930:345::-;6997:6;7046:2;7034:9;7025:7;7021:23;7017:32;7014:119;;;7052:79;;:::i;:::-;7014:119;7172:1;7197:61;7250:7;7241:6;7230:9;7226:22;7197:61;:::i;:::-;7187:71;;7143:125;6930:345;;;;:::o;7281:468::-;7346:6;7354;7403:2;7391:9;7382:7;7378:23;7374:32;7371:119;;;7409:79;;:::i;:::-;7371:119;7529:1;7554:53;7599:7;7590:6;7579:9;7575:22;7554:53;:::i;:::-;7544:63;;7500:117;7656:2;7682:50;7724:7;7715:6;7704:9;7700:22;7682:50;:::i;:::-;7672:60;;7627:115;7281:468;;;;;:::o;7755:142::-;7858:32;7884:5;7858:32;:::i;:::-;7853:3;7846:45;7755:142;;:::o;7903:254::-;8012:4;8050:2;8039:9;8035:18;8027:26;;8063:87;8147:1;8136:9;8132:17;8123:6;8063:87;:::i;:::-;7903:254;;;;:::o;8163:484::-;8236:6;8244;8293:2;8281:9;8272:7;8268:23;8264:32;8261:119;;;8299:79;;:::i;:::-;8261:119;8419:1;8444:61;8497:7;8488:6;8477:9;8473:22;8444:61;:::i;:::-;8434:71;;8390:125;8554:2;8580:50;8622:7;8613:6;8602:9;8598:22;8580:50;:::i;:::-;8570:60;;8525:115;8163:484;;;;;:::o;8653:109::-;8703:7;8732:24;8750:5;8732:24;:::i;:::-;8721:35;;8653:109;;;:::o;8768:148::-;8854:37;8885:5;8854:37;:::i;:::-;8847:5;8844:48;8834:76;;8906:1;8903;8896:12;8834:76;8768:148;:::o;8922:165::-;8981:5;9019:6;9006:20;8997:29;;9035:46;9075:5;9035:46;:::i;:::-;8922:165;;;;:::o;9093:661::-;9191:6;9199;9207;9256:2;9244:9;9235:7;9231:23;9227:32;9224:119;;;9262:79;;:::i;:::-;9224:119;9382:1;9407:66;9465:7;9456:6;9445:9;9441:22;9407:66;:::i;:::-;9397:76;;9353:130;9522:2;9548:61;9601:7;9592:6;9581:9;9577:22;9548:61;:::i;:::-;9538:71;;9493:126;9658:2;9684:53;9729:7;9720:6;9709:9;9705:22;9684:53;:::i;:::-;9674:63;;9629:118;9093:661;;;;;:::o;9760:180::-;9808:77;9805:1;9798:88;9905:4;9902:1;9895:15;9929:4;9926:1;9919:15;9946:320;9990:6;10027:1;10021:4;10017:12;10007:22;;10074:1;10068:4;10064:12;10095:18;10085:81;;10151:4;10143:6;10139:17;10129:27;;10085:81;10213:2;10205:6;10202:14;10182:18;10179:38;10176:84;;10232:18;;:::i;:::-;10176:84;9997:269;9946:320;;;:::o;10272:182::-;10412:34;10408:1;10400:6;10396:14;10389:58;10272:182;:::o;10460:366::-;10602:3;10623:67;10687:2;10682:3;10623:67;:::i;:::-;10616:74;;10699:93;10788:3;10699:93;:::i;:::-;10817:2;10812:3;10808:12;10801:19;;10460:366;;;:::o;10832:419::-;10998:4;11036:2;11025:9;11021:18;11013:26;;11085:9;11079:4;11075:20;11071:1;11060:9;11056:17;11049:47;11113:131;11239:4;11113:131;:::i;:::-;11105:139;;10832:419;;;:::o;11257:227::-;11397:34;11393:1;11385:6;11381:14;11374:58;11466:10;11461:2;11453:6;11449:15;11442:35;11257:227;:::o;11490:366::-;11632:3;11653:67;11717:2;11712:3;11653:67;:::i;:::-;11646:74;;11729:93;11818:3;11729:93;:::i;:::-;11847:2;11842:3;11838:12;11831:19;;11490:366;;;:::o;11862:419::-;12028:4;12066:2;12055:9;12051:18;12043:26;;12115:9;12109:4;12105:20;12101:1;12090:9;12086:17;12079:47;12143:131;12269:4;12143:131;:::i;:::-;12135:139;;11862:419;;;:::o;12287:180::-;12335:77;12332:1;12325:88;12432:4;12429:1;12422:15;12456:4;12453:1;12446:15;12473:194;12513:4;12533:20;12551:1;12533:20;:::i;:::-;12528:25;;12567:20;12585:1;12567:20;:::i;:::-;12562:25;;12611:1;12608;12604:9;12596:17;;12635:1;12629:4;12626:11;12623:37;;;12640:18;;:::i;:::-;12623:37;12473:194;;;;:::o;12673:410::-;12713:7;12736:20;12754:1;12736:20;:::i;:::-;12731:25;;12770:20;12788:1;12770:20;:::i;:::-;12765:25;;12825:1;12822;12818:9;12847:30;12865:11;12847:30;:::i;:::-;12836:41;;13026:1;13017:7;13013:15;13010:1;13007:22;12987:1;12980:9;12960:83;12937:139;;13056:18;;:::i;:::-;12937:139;12721:362;12673:410;;;;:::o;13089:180::-;13137:77;13134:1;13127:88;13234:4;13231:1;13224:15;13258:4;13255:1;13248:15;13275:185;13315:1;13332:20;13350:1;13332:20;:::i;:::-;13327:25;;13366:20;13384:1;13366:20;:::i;:::-;13361:25;;13405:1;13395:35;;13410:18;;:::i;:::-;13395:35;13452:1;13449;13445:9;13440:14;;13275:185;;;;:::o;13466:244::-;13606:34;13602:1;13594:6;13590:14;13583:58;13675:27;13670:2;13662:6;13658:15;13651:52;13466:244;:::o;13716:366::-;13858:3;13879:67;13943:2;13938:3;13879:67;:::i;:::-;13872:74;;13955:93;14044:3;13955:93;:::i;:::-;14073:2;14068:3;14064:12;14057:19;;13716:366;;;:::o;14088:419::-;14254:4;14292:2;14281:9;14277:18;14269:26;;14341:9;14335:4;14331:20;14327:1;14316:9;14312:17;14305:47;14369:131;14495:4;14369:131;:::i;:::-;14361:139;;14088:419;;;:::o;14513:225::-;14653:34;14649:1;14641:6;14637:14;14630:58;14722:8;14717:2;14709:6;14705:15;14698:33;14513:225;:::o;14744:366::-;14886:3;14907:67;14971:2;14966:3;14907:67;:::i;:::-;14900:74;;14983:93;15072:3;14983:93;:::i;:::-;15101:2;15096:3;15092:12;15085:19;;14744:366;;;:::o;15116:419::-;15282:4;15320:2;15309:9;15305:18;15297:26;;15369:9;15363:4;15359:20;15355:1;15344:9;15340:17;15333:47;15397:131;15523:4;15397:131;:::i;:::-;15389:139;;15116:419;;;:::o;15541:60::-;15569:3;15590:5;15583:12;;15541:60;;;:::o;15607:142::-;15657:9;15690:53;15708:34;15717:24;15735:5;15717:24;:::i;:::-;15708:34;:::i;:::-;15690:53;:::i;:::-;15677:66;;15607:142;;;:::o;15755:126::-;15805:9;15838:37;15869:5;15838:37;:::i;:::-;15825:50;;15755:126;;;:::o;15887:134::-;15945:9;15978:37;16009:5;15978:37;:::i;:::-;15965:50;;15887:134;;;:::o;16027:147::-;16122:45;16161:5;16122:45;:::i;:::-;16117:3;16110:58;16027:147;;:::o;16180:348::-;16309:4;16347:2;16336:9;16332:18;16324:26;;16360:79;16436:1;16425:9;16421:17;16412:6;16360:79;:::i;:::-;16449:72;16517:2;16506:9;16502:18;16493:6;16449:72;:::i;:::-;16180:348;;;;;:::o;16534:137::-;16588:5;16619:6;16613:13;16604:22;;16635:30;16659:5;16635:30;:::i;:::-;16534:137;;;;:::o;16677:345::-;16744:6;16793:2;16781:9;16772:7;16768:23;16764:32;16761:119;;;16799:79;;:::i;:::-;16761:119;16919:1;16944:61;16997:7;16988:6;16977:9;16973:22;16944:61;:::i;:::-;16934:71;;16890:125;16677:345;;;;:::o;17028:223::-;17168:34;17164:1;17156:6;17152:14;17145:58;17237:6;17232:2;17224:6;17220:15;17213:31;17028:223;:::o;17257:366::-;17399:3;17420:67;17484:2;17479:3;17420:67;:::i;:::-;17413:74;;17496:93;17585:3;17496:93;:::i;:::-;17614:2;17609:3;17605:12;17598:19;;17257:366;;;:::o;17629:419::-;17795:4;17833:2;17822:9;17818:18;17810:26;;17882:9;17876:4;17872:20;17868:1;17857:9;17853:17;17846:47;17910:131;18036:4;17910:131;:::i;:::-;17902:139;;17629:419;;;:::o;18054:221::-;18194:34;18190:1;18182:6;18178:14;18171:58;18263:4;18258:2;18250:6;18246:15;18239:29;18054:221;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18281:366;;;:::o;18653:419::-;18819:4;18857:2;18846:9;18842:18;18834:26;;18906:9;18900:4;18896:20;18892:1;18881:9;18877:17;18870:47;18934:131;19060:4;18934:131;:::i;:::-;18926:139;;18653:419;;;:::o;19078:224::-;19218:34;19214:1;19206:6;19202:14;19195:58;19287:7;19282:2;19274:6;19270:15;19263:32;19078:224;:::o;19308:366::-;19450:3;19471:67;19535:2;19530:3;19471:67;:::i;:::-;19464:74;;19547:93;19636:3;19547:93;:::i;:::-;19665:2;19660:3;19656:12;19649:19;;19308:366;;;:::o;19680:419::-;19846:4;19884:2;19873:9;19869:18;19861:26;;19933:9;19927:4;19923:20;19919:1;19908:9;19904:17;19897:47;19961:131;20087:4;19961:131;:::i;:::-;19953:139;;19680:419;;;:::o;20105:222::-;20245:34;20241:1;20233:6;20229:14;20222:58;20314:5;20309:2;20301:6;20297:15;20290:30;20105:222;:::o;20333:366::-;20475:3;20496:67;20560:2;20555:3;20496:67;:::i;:::-;20489:74;;20572:93;20661:3;20572:93;:::i;:::-;20690:2;20685:3;20681:12;20674:19;;20333:366;;;:::o;20705:419::-;20871:4;20909:2;20898:9;20894:18;20886:26;;20958:9;20952:4;20948:20;20944:1;20933:9;20929:17;20922:47;20986:131;21112:4;20986:131;:::i;:::-;20978:139;;20705:419;;;:::o;21130:237::-;21270:34;21266:1;21258:6;21254:14;21247:58;21339:20;21334:2;21326:6;21322:15;21315:45;21130:237;:::o;21373:366::-;21515:3;21536:67;21600:2;21595:3;21536:67;:::i;:::-;21529:74;;21612:93;21701:3;21612:93;:::i;:::-;21730:2;21725:3;21721:12;21714:19;;21373:366;;;:::o;21745:419::-;21911:4;21949:2;21938:9;21934:18;21926:26;;21998:9;21992:4;21988:20;21984:1;21973:9;21969:17;21962:47;22026:131;22152:4;22026:131;:::i;:::-;22018:139;;21745:419;;;:::o;22170:225::-;22310:34;22306:1;22298:6;22294:14;22287:58;22379:8;22374:2;22366:6;22362:15;22355:33;22170:225;:::o;22401:366::-;22543:3;22564:67;22628:2;22623:3;22564:67;:::i;:::-;22557:74;;22640:93;22729:3;22640:93;:::i;:::-;22758:2;22753:3;22749:12;22742:19;;22401:366;;;:::o;22773:419::-;22939:4;22977:2;22966:9;22962:18;22954:26;;23026:9;23020:4;23016:20;23012:1;23001:9;22997:17;22990:47;23054:131;23180:4;23054:131;:::i;:::-;23046:139;;22773:419;;;:::o;23198:179::-;23338:31;23334:1;23326:6;23322:14;23315:55;23198:179;:::o;23383:366::-;23525:3;23546:67;23610:2;23605:3;23546:67;:::i;:::-;23539:74;;23622:93;23711:3;23622:93;:::i;:::-;23740:2;23735:3;23731:12;23724:19;;23383:366;;;:::o;23755:419::-;23921:4;23959:2;23948:9;23944:18;23936:26;;24008:9;24002:4;23998:20;23994:1;23983:9;23979:17;23972:47;24036:131;24162:4;24036:131;:::i;:::-;24028:139;;23755:419;;;:::o;24180:240::-;24320:34;24316:1;24308:6;24304:14;24297:58;24389:23;24384:2;24376:6;24372:15;24365:48;24180:240;:::o;24426:366::-;24568:3;24589:67;24653:2;24648:3;24589:67;:::i;:::-;24582:74;;24665:93;24754:3;24665:93;:::i;:::-;24783:2;24778:3;24774:12;24767:19;;24426:366;;;:::o;24798:419::-;24964:4;25002:2;24991:9;24987:18;24979:26;;25051:9;25045:4;25041:20;25037:1;25026:9;25022:17;25015:47;25079:131;25205:4;25079:131;:::i;:::-;25071:139;;24798:419;;;:::o;25223:191::-;25263:3;25282:20;25300:1;25282:20;:::i;:::-;25277:25;;25316:20;25334:1;25316:20;:::i;:::-;25311:25;;25359:1;25356;25352:9;25345:16;;25380:3;25377:1;25374:10;25371:36;;;25387:18;;:::i;:::-;25371:36;25223:191;;;;:::o;25420:177::-;25560:29;25556:1;25548:6;25544:14;25537:53;25420:177;:::o;25603:366::-;25745:3;25766:67;25830:2;25825:3;25766:67;:::i;:::-;25759:74;;25842:93;25931:3;25842:93;:::i;:::-;25960:2;25955:3;25951:12;25944:19;;25603:366;;;:::o;25975:419::-;26141:4;26179:2;26168:9;26164:18;26156:26;;26228:9;26222:4;26218:20;26214:1;26203:9;26199:17;26192:47;26256:131;26382:4;26256:131;:::i;:::-;26248:139;;25975:419;;;:::o;26400:241::-;26540:34;26536:1;26528:6;26524:14;26517:58;26609:24;26604:2;26596:6;26592:15;26585:49;26400:241;:::o;26647:366::-;26789:3;26810:67;26874:2;26869:3;26810:67;:::i;:::-;26803:74;;26886:93;26975:3;26886:93;:::i;:::-;27004:2;26999:3;26995:12;26988:19;;26647:366;;;:::o;27019:419::-;27185:4;27223:2;27212:9;27208:18;27200:26;;27272:9;27266:4;27262:20;27258:1;27247:9;27243:17;27236:47;27300:131;27426:4;27300:131;:::i;:::-;27292:139;;27019:419;;;:::o;27444:174::-;27584:26;27580:1;27572:6;27568:14;27561:50;27444:174;:::o;27624:366::-;27766:3;27787:67;27851:2;27846:3;27787:67;:::i;:::-;27780:74;;27863:93;27952:3;27863:93;:::i;:::-;27981:2;27976:3;27972:12;27965:19;;27624:366;;;:::o;27996:419::-;28162:4;28200:2;28189:9;28185:18;28177:26;;28249:9;28243:4;28239:20;28235:1;28224:9;28220:17;28213:47;28277:131;28403:4;28277:131;:::i;:::-;28269:139;;27996:419;;;:::o;28421:442::-;28570:4;28608:2;28597:9;28593:18;28585:26;;28621:71;28689:1;28678:9;28674:17;28665:6;28621:71;:::i;:::-;28702:72;28770:2;28759:9;28755:18;28746:6;28702:72;:::i;:::-;28784;28852:2;28841:9;28837:18;28828:6;28784:72;:::i;:::-;28421:442;;;;;;:::o;28869:180::-;28917:77;28914:1;28907:88;29014:4;29011:1;29004:15;29038:4;29035:1;29028:15;29055:180;29103:77;29100:1;29093:88;29200:4;29197:1;29190:15;29224:4;29221:1;29214:15;29241:143;29298:5;29329:6;29323:13;29314:22;;29345:33;29372:5;29345:33;:::i;:::-;29241:143;;;;:::o;29390:351::-;29460:6;29509:2;29497:9;29488:7;29484:23;29480:32;29477:119;;;29515:79;;:::i;:::-;29477:119;29635:1;29660:64;29716:7;29707:6;29696:9;29692:22;29660:64;:::i;:::-;29650:74;;29606:128;29390:351;;;;:::o;29747:85::-;29792:7;29821:5;29810:16;;29747:85;;;:::o;29838:158::-;29896:9;29929:61;29947:42;29956:32;29982:5;29956:32;:::i;:::-;29947:42;:::i;:::-;29929:61;:::i;:::-;29916:74;;29838:158;;;:::o;30002:147::-;30097:45;30136:5;30097:45;:::i;:::-;30092:3;30085:58;30002:147;;:::o;30155:114::-;30222:6;30256:5;30250:12;30240:22;;30155:114;;;:::o;30275:184::-;30374:11;30408:6;30403:3;30396:19;30448:4;30443:3;30439:14;30424:29;;30275:184;;;;:::o;30465:132::-;30532:4;30555:3;30547:11;;30585:4;30580:3;30576:14;30568:22;;30465:132;;;:::o;30603:108::-;30680:24;30698:5;30680:24;:::i;:::-;30675:3;30668:37;30603:108;;:::o;30717:179::-;30786:10;30807:46;30849:3;30841:6;30807:46;:::i;:::-;30885:4;30880:3;30876:14;30862:28;;30717:179;;;;:::o;30902:113::-;30972:4;31004;30999:3;30995:14;30987:22;;30902:113;;;:::o;31051:732::-;31170:3;31199:54;31247:5;31199:54;:::i;:::-;31269:86;31348:6;31343:3;31269:86;:::i;:::-;31262:93;;31379:56;31429:5;31379:56;:::i;:::-;31458:7;31489:1;31474:284;31499:6;31496:1;31493:13;31474:284;;;31575:6;31569:13;31602:63;31661:3;31646:13;31602:63;:::i;:::-;31595:70;;31688:60;31741:6;31688:60;:::i;:::-;31678:70;;31534:224;31521:1;31518;31514:9;31509:14;;31474:284;;;31478:14;31774:3;31767:10;;31175:608;;;31051:732;;;;:::o;31789:847::-;32060:4;32098:3;32087:9;32083:19;32075:27;;32112:71;32180:1;32169:9;32165:17;32156:6;32112:71;:::i;:::-;32193:80;32269:2;32258:9;32254:18;32245:6;32193:80;:::i;:::-;32320:9;32314:4;32310:20;32305:2;32294:9;32290:18;32283:48;32348:108;32451:4;32442:6;32348:108;:::i;:::-;32340:116;;32466:80;32542:2;32531:9;32527:18;32518:6;32466:80;:::i;:::-;32556:73;32624:3;32613:9;32609:19;32600:6;32556:73;:::i;:::-;31789:847;;;;;;;;:::o;32642:831::-;32905:4;32943:3;32932:9;32928:19;32920:27;;32957:71;33025:1;33014:9;33010:17;33001:6;32957:71;:::i;:::-;33038:80;33114:2;33103:9;33099:18;33090:6;33038:80;:::i;:::-;33165:9;33159:4;33155:20;33150:2;33139:9;33135:18;33128:48;33193:108;33296:4;33287:6;33193:108;:::i;:::-;33185:116;;33311:72;33379:2;33368:9;33364:18;33355:6;33311:72;:::i;:::-;33393:73;33461:3;33450:9;33446:19;33437:6;33393:73;:::i;:::-;32642:831;;;;;;;;:::o;33479:807::-;33728:4;33766:3;33755:9;33751:19;33743:27;;33780:71;33848:1;33837:9;33833:17;33824:6;33780:71;:::i;:::-;33861:72;33929:2;33918:9;33914:18;33905:6;33861:72;:::i;:::-;33943:80;34019:2;34008:9;34004:18;33995:6;33943:80;:::i;:::-;34033;34109:2;34098:9;34094:18;34085:6;34033:80;:::i;:::-;34123:73;34191:3;34180:9;34176:19;34167:6;34123:73;:::i;:::-;34206;34274:3;34263:9;34259:19;34250:6;34206:73;:::i;:::-;33479:807;;;;;;;;;:::o;34292:143::-;34349:5;34380:6;34374:13;34365:22;;34396:33;34423:5;34396:33;:::i;:::-;34292:143;;;;:::o;34441:663::-;34529:6;34537;34545;34594:2;34582:9;34573:7;34569:23;34565:32;34562:119;;;34600:79;;:::i;:::-;34562:119;34720:1;34745:64;34801:7;34792:6;34781:9;34777:22;34745:64;:::i;:::-;34735:74;;34691:128;34858:2;34884:64;34940:7;34931:6;34920:9;34916:22;34884:64;:::i;:::-;34874:74;;34829:129;34997:2;35023:64;35079:7;35070:6;35059:9;35055:22;35023:64;:::i;:::-;35013:74;;34968:129;34441:663;;;;;:::o

Swarm Source

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