ETH Price: $2,434.31 (-1.87%)

Token

Dumb & Dummer (DND)
 

Overview

Max Total Supply

1,000,000,000 DND

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,700,000.000000000114535813 DND

Value
$0.00
0x9a0ac82511dfe6837c3f55c5cde9726968bb2ca9
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:
DNDToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/**
    *Telegram - https://t.me/DumbNdummer_erc 
    *Website - https://dumbndummer.com
    *Twitter - https://twitter.com/DNDumbndummer
    *Instagram- https://www.instagram.com/dndumbndummer/
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        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 SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
  
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;  //hash address of empty contract

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

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

contract Ownable is Context {

    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

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

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

}

interface 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 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 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 DNDToken is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Dumb & Dummer";
    string private _symbol = "DND";
    uint8 private _decimals = 18;

    address public marketingWallet = 0x0FE29C3d645b6e693b678909a1126C21026b5e67;
    address public developerWallet = 0xE752CCC3185A6e740777613E88A9Db174676850D;
    address public liquidityReciever;

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable zeroAddress = 0x0000000000000000000000000000000000000000;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public blacklisted;

    uint256 _buyLiquidityFee = 0;
    uint256 _buyMarketingFee = 30;
    uint256 _buyDeveloperFee = 20;
    
    uint256 _sellLiquidityFee = 10;
    uint256 _sellMarketingFee = 10;
    uint256 _sellDeveloperFee = 20;

    uint256 totalBuy;
    uint256 totalSell;

    uint256 denominator = 1000;

    uint256 private _totalSupply = 1000_000_000 * 10**_decimals;   

    uint256 public minimumTokensBeforeSwap = 1000 * 10**_decimals;

    uint256 public _maxTxAmount =  _totalSupply.mul(10).div(denominator);     //1.0%
    uint256 public _walletMax = _totalSupply.mul(20).div(denominator);    //2.0%

    bool public burnSwitch = false;
    bool public EnableTxLimit = true;
    bool public checkWalletLimit = true;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {

        address _owner = 0x7A8F52caA794dC9e135A06971fCEadb0845889F1;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = ~uint256(0);

        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[_owner] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[developerWallet] = true;

        isMarketPair[address(uniswapPair)] = true;

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;

        totalBuy = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        totalSell = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);

        transferOwnership(_owner);

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _totalSupply);
    }

    /*====================================
    |               Getters              |
    ====================================*/

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklisted[sender] && !blacklisted[recipient],"Error: Blacklist Bots/Contracts not Allowed!!");
        

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {  
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTxLimit) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            } 

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                swapAndLiquify();
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = shouldTakeFee(sender,recipient) ? amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient]) {
                require(balanceOf(recipient).add(finalAmount) <= _walletMax,"Max Wallet Limit Exceeded!!");
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));

        if(contractBalance == 0) return;

        uint256 totalShares = totalBuy.add(totalSell);
        uint256 _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 _MarketingShare = _buyMarketingFee.add(_sellMarketingFee);

        uint256 tokensForLP = contractBalance.mul(_liquidityShare).div(totalShares).div(2);
        uint256 tokensForSwap = contractBalance.sub(tokensForLP);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance.sub(initialBalance);

        uint256 totalBNBFee = totalShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBMarketing = amountReceived.mul(_MarketingShare).div(totalBNBFee);
        uint256 amountBNBDeveloper = amountReceived.sub(amountBNBLiquidity).sub(amountBNBMarketing);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWallet, amountBNBMarketing);

        if(amountBNBDeveloper > 0)
            transferToAddressETH(developerWallet, amountBNBDeveloper);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }

    function transferToAddressETH(address recipient, uint256 amount) private {
        payable(recipient).transfer(amount);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

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

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

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if(isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
            return true;
        }
        else if (isMarketPair[sender] || isMarketPair[recipient]) {
            return false;
        }
        else {
            return false;
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint feeAmount;

        unchecked {

            if(isMarketPair[sender]) {
            
                feeAmount = amount.mul(totalBuy).div(denominator);
            }
            else if(isMarketPair[recipient]) {

                feeAmount = amount.mul(totalSell).div(denominator);
                
            }     

            if(feeAmount > 0) {
                _balances[address(this)] = _balances[address(this)].add(feeAmount);
                emit Transfer(sender, address(this), feeAmount);
            }

            return amount.sub(feeAmount);
        }
        
    }

    function burnToken(uint256 _amount) external {
        address account = msg.sender;
        require(burnSwitch,"Error: Burning is Currently Off!");
        require(balanceOf(account) >= _amount,"Error: Amount Exceeded from balance!");
        _balances[account] = _balances[account].sub(_amount);
        _totalSupply = _totalSupply.sub(_amount);
    }


    /*====================================
    |               Setters              |
    ====================================*/

    //To Block Bots to trade
    function blacklistBot(address _adr,bool _status) public onlyOwner {
        require(Address.isContract(_adr),"Error: BlackList Applicable For Bot/Contracts!!");
        blacklisted[_adr] = _status;
    }

    //To Rescue Stucked Balance
    function rescueFunds() public onlyOwner { 
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os,"Transaction Failed!!");
    }

    //To Rescue Stucked Tokens
    function rescueTokens(IERC20 adr,address recipient,uint amount) public onlyOwner {
        adr.transfer(recipient,amount);
    }

    function setBuyFee(uint _newLP , uint _newMarket , uint _newDeveloper) public onlyOwner {     
        _buyLiquidityFee = _newLP;
        _buyMarketingFee = _newMarket;
        _buyDeveloperFee = _newDeveloper;
        totalBuy = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
    }

    function setSellFee(uint _newLP , uint _newMarket , uint _newDeveloper) public onlyOwner {        
        _sellLiquidityFee = _newLP;
        _sellMarketingFee = _newMarket;
        _sellDeveloperFee = _newDeveloper;
        totalSell = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);
    }

    function setWallets(address _market,address _developer,address _liquidityRec) public onlyOwner {
        marketingWallet = _market;
        developerWallet = _developer;
        liquidityReciever = _liquidityRec;
    }

    function setExcludeFromFee(address _adr,bool _status) public onlyOwner {
        require(isExcludedFromFee[_adr] != _status,"Not Changed!!");
        isExcludedFromFee[_adr] = _status;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner {
        minimumTokensBeforeSwap = newLimit;
    }

    function enableBurn(bool _status) external onlyOwner {
        require(burnSwitch != _status,"Error: Not Change");
        burnSwitch = _status;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function excludeWalletLimit(address _adr,bool _status) public onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

    function excludeTxLimit(address _adr,bool _status) public onlyOwner {
        require(isTxLimitExempt[_adr] != _status,"Not Changed!!");
        isTxLimitExempt[_adr] = _status;
    }

    function setMarketPair(address _pair, bool _status) public onlyOwner {
        isMarketPair[_pair] = _status;
    }
	
	function ExcludeWalletLimit(address _adr,bool _status) public onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

    function ExcludeTxLimit(address _adr,bool _status) public onlyOwner {
        require(isTxLimitExempt[_adr] != _status,"Not Changed!!");
        isTxLimitExempt[_adr] = _status;
    }
	
	function enableTxLimit(bool _status) public onlyOwner {
        EnableTxLimit = _status;
    }

    function enableWalletLimit(bool _status) public onlyOwner {
        checkWalletLimit = _status;
    }
	
	function setMaxWalletLimit(uint256 newLimit) external onlyOwner() {
        _walletMax = newLimit;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner() {
        _maxTxAmount = newLimit;
    }

    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSwitch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renouncedOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"adr","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLP","type":"uint256"},{"internalType":"uint256","name":"_newMarket","type":"uint256"},{"internalType":"uint256","name":"_newDeveloper","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLP","type":"uint256"},{"internalType":"uint256","name":"_newMarket","type":"uint256"},{"internalType":"uint256","name":"_newDeveloper","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_market","type":"address"},{"internalType":"address","name":"_developer","type":"address"},{"internalType":"address","name":"_liquidityRec","type":"address"}],"name":"setWallets","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":"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600d81526020017f44756d6220262044756d6d657200000000000000000000000000000000000000815250600190805190602001906200005192919062000fa0565b506040518060400160405280600381526020017f444e440000000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000fa0565b506012600360006101000a81548160ff021916908360ff160217905550730fe29c3d645b6e693b678909a1126c21026b5e67600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e752ccc3185a6e740777613e88a9db174676850d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250600073ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600d55601e600e556014600f55600a601055600a60115560146012556103e8601555600360009054906101000a900460ff16600a62000217919062001394565b633b9aca00620002289190620014d1565b601655600360009054906101000a900460ff16600a62000249919062001394565b6103e8620002589190620014d1565b601755620002936015546200027f600a60165462000c2760201b620032eb1790919060201c565b62000cab60201b620033661790919060201c565b601855620002ce601554620002ba601460165462000c2760201b620032eb1790919060201c565b62000cab60201b620033661790919060201c565b6019556000601a60006101000a81548160ff0219169083151502179055506001601a60016101000a81548160ff0219169083151502179055506001601a60026101000a81548160ff0219169083151502179055506000601b60156101000a81548160ff0219169083151502179055503480156200034a57600080fd5b5060006200035d62000cfd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a8f52caa794dc9e135a06971fceadb0845889f190506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047457600080fd5b505afa15801562000489573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004af919062001067565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200051257600080fd5b505afa15801562000527573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054d919062001067565b6040518363ffffffff1660e01b81526004016200056c92919062001192565b602060405180830381600087803b1580156200058757600080fd5b505af11580156200059c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c2919062001067565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600019600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b19600f5462000b05600e54600d5462000d0560201b620033b01790919060201c565b62000d0560201b620033b01790919060201c565b60138190555062000b5860125462000b4460115460105462000d0560201b620033b01790919060201c565b62000d0560201b620033b01790919060201c565b60148190555062000b6f8262000d6860201b60201c565b601654600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60165460405162000c1791906200126b565b60405180910390a350506200179e565b60008083141562000c3c576000905062000ca5565b6000828462000c4c9190620014d1565b905082848262000c5d919062001301565b1462000ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c979062001227565b60405180910390fd5b809150505b92915050565b600062000cf583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000f3860201b60201c565b905092915050565b600033905090565b600080828462000d169190620012a4565b90508381101562000d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d559062001205565b60405180910390fd5b8091505092915050565b62000d7862000cfd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dff9062001249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e7290620011e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808311829062000f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f799190620011bf565b60405180910390fd5b506000838562000f93919062001301565b9050809150509392505050565b82805462000fae90620015b3565b90600052602060002090601f01602090048101928262000fd257600085556200101e565b82601f1062000fed57805160ff19168380011785556200101e565b828001600101855582156200101e579182015b828111156200101d57825182559160200191906001019062001000565b5b5090506200102d919062001031565b5090565b5b808211156200104c57600081600090555060010162001032565b5090565b600081519050620010618162001784565b92915050565b6000602082840312156200107a57600080fd5b60006200108a8482850162001050565b91505092915050565b6200109e8162001532565b82525050565b6000620010b18262001288565b620010bd818562001293565b9350620010cf8185602086016200157d565b620010da8162001676565b840191505092915050565b6000620010f460268362001293565b9150620011018262001694565b604082019050919050565b60006200111b601b8362001293565b91506200112882620016e3565b602082019050919050565b60006200114260218362001293565b91506200114f826200170c565b604082019050919050565b60006200116960208362001293565b915062001176826200175b565b602082019050919050565b6200118c8162001566565b82525050565b6000604082019050620011a9600083018562001093565b620011b8602083018462001093565b9392505050565b60006020820190508181036000830152620011db8184620010a4565b905092915050565b60006020820190508181036000830152620011fe81620010e5565b9050919050565b6000602082019050818103600083015262001220816200110c565b9050919050565b60006020820190508181036000830152620012428162001133565b9050919050565b6000602082019050818103600083015262001264816200115a565b9050919050565b600060208201905062001282600083018462001181565b92915050565b600081519050919050565b600082825260208201905092915050565b6000620012b18262001566565b9150620012be8362001566565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012f657620012f5620015e9565b5b828201905092915050565b60006200130e8262001566565b91506200131b8362001566565b9250826200132e576200132d62001618565b5b828204905092915050565b6000808291508390505b60018511156200138b57808604811115620013635762001362620015e9565b5b6001851615620013735780820291505b8081029050620013838562001687565b945062001343565b94509492505050565b6000620013a18262001566565b9150620013ae8362001570565b9250620013dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013e5565b905092915050565b600082620013f75760019050620014ca565b81620014075760009050620014ca565b81600181146200142057600281146200142b5762001461565b6001915050620014ca565b60ff84111562001440576200143f620015e9565b5b8360020a9150848211156200145a5762001459620015e9565b5b50620014ca565b5060208310610133831016604e8410600b84101617156200149b5782820a905083811115620014955762001494620015e9565b5b620014ca565b620014aa848484600162001339565b92509050818404811115620014c457620014c3620015e9565b5b81810290505b9392505050565b6000620014de8262001566565b9150620014eb8362001566565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620015275762001526620015e9565b5b828202905092915050565b60006200153f8262001546565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200159d57808201518184015260208101905062001580565b83811115620015ad576000848401525b50505050565b60006002820490506001821680620015cc57607f821691505b60208210811415620015e357620015e262001647565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200178f8162001532565b81146200179b57600080fd5b50565b60805160601c60a05160601c615e11620017d860003960008181610e11015261144701526000818161141b01526114730152615e116000f3fe60806040526004361061036f5760003560e01c806375f0a874116101c6578063b6970204116100f7578063dbac26e911610095578063ee828db31161006f578063ee828db314610cd7578063f229abbd14610d00578063f2fde38b14610d29578063f872858a14610d5257610376565b8063dbac26e914610c46578063dd62ed3e14610c83578063e6b2603b14610cc057610376565b8063c816841b116100d1578063c816841b14610b8a578063c867d60b14610bb5578063cea9d26f14610bf2578063d2d7ad8314610c1b57610376565b8063b697020414610b0d578063c16dd4a414610b38578063c49b9a8014610b6157610376565b80638f32d59b11610164578063a457c2d71161013e578063a457c2d714610a41578063a9059cbb14610a7e578063ae85ade614610abb578063af9549e014610ae457610376565b80638f32d59b146109c057806395d89b41146109eb57806398e944c814610a1657610376565b8063807c2d9c116101a0578063807c2d9c146109045780638236802e1461092f5780638b42507f146109585780638da5cb5b1461099557610376565b806375f0a874146108855780637b47ec1a146108b05780637d1db4a5146108d957610376565b806338ec0b11116102a05780635881f3ef1161023e578063651a898711610218578063651a8987146107cd57806370a08231146107f6578063728d41c91461083357806375cb1bd11461085c57610376565b80635881f3ef1461073c5780635c85974f146107795780635e42358c146107a257610376565b80633ecad2711161027a5780633ecad2711461066e5780634974d88f146106ab5780634a74bb02146106d45780635342acb4146106ff57610376565b806338ec0b11146105df57806339509351146106085780633b97084a1461064557610376565b80631d865c301161030d57806325519cf2116102e757806325519cf21461053557806327c8f8351461055e5780632b112e4914610589578063313ce567146105b457610376565b80631d865c30146104b857806320365d5f146104e157806323b872dd146104f857610376565b806313ea1d891161034957806313ea1d891461040e5780631694505e1461043757806318160ddd14610462578063185870f91461048d57610376565b806306fdde031461037b5780630930907b146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7d565b60405161039d9190615274565b60405180910390f35b3480156103b257600080fd5b506103bb610e0f565b6040516103c89190615170565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190614c06565b610e33565b604051610405919061523e565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614bca565b610e51565b005b34801561044357600080fd5b5061044c610fd4565b6040516104599190615259565b60405180910390f35b34801561046e57600080fd5b50610477610ffa565b60405161048491906154d6565b60405180910390f35b34801561049957600080fd5b506104a2611004565b6040516104af9190615170565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190614d0c565b61102a565b005b3480156104ed57600080fd5b506104f661110a565b005b34801561050457600080fd5b5061051f600480360381019061051a9190614b7b565b61125f565b60405161052c919061523e565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614d0c565b611339565b005b34801561056a57600080fd5b50610573611419565b6040516105809190615170565b60405180910390f35b34801561059557600080fd5b5061059e61143d565b6040516105ab91906154d6565b60405180910390f35b3480156105c057600080fd5b506105c96114bb565b6040516105d6919061557b565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614bca565b6114d2565b005b34801561061457600080fd5b5061062f600480360381019061062a9190614c06565b611655565b60405161063c919061523e565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190614ce3565b611708565b005b34801561067a57600080fd5b5061069560048036038101906106909190614a9e565b6117a7565b6040516106a2919061523e565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614c42565b6117c7565b005b3480156106e057600080fd5b506106e9611879565b6040516106f6919061523e565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614a9e565b61188c565b604051610733919061523e565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190614a9e565b6118ac565b6040516107709190615170565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190614ce3565b611d90565b005b3480156107ae57600080fd5b506107b7611e2f565b6040516107c4919061523e565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190614bca565b611e42565b005b34801561080257600080fd5b5061081d60048036038101906108189190614a9e565b611fc5565b60405161082a91906154d6565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614ce3565b61200e565b005b34801561086857600080fd5b50610883600480360381019061087e9190614b2c565b6120ad565b005b34801561089157600080fd5b5061089a61220a565b6040516108a79190615170565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614ce3565b612230565b005b3480156108e557600080fd5b506108ee612383565b6040516108fb91906154d6565b60405180910390f35b34801561091057600080fd5b50610919612389565b60405161092691906154d6565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614bca565b61238f565b005b34801561096457600080fd5b5061097f600480360381019061097a9190614a9e565b6124c7565b60405161098c919061523e565b60405180910390f35b3480156109a157600080fd5b506109aa6124e7565b6040516109b79190615170565b60405180910390f35b3480156109cc57600080fd5b506109d5612510565b6040516109e2919061523e565b60405180910390f35b3480156109f757600080fd5b50610a00612567565b604051610a0d9190615274565b60405180910390f35b348015610a2257600080fd5b50610a2b6125f9565b604051610a389190615170565b60405180910390f35b348015610a4d57600080fd5b50610a686004803603810190610a639190614c06565b61261f565b604051610a75919061523e565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190614c06565b6126ec565b604051610ab2919061523e565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614bca565b61270b565b005b348015610af057600080fd5b50610b0b6004803603810190610b069190614bca565b61288e565b005b348015610b1957600080fd5b50610b22612a11565b604051610b2f919061523e565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614bca565b612a24565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190614c42565b612b14565b005b348015610b9657600080fd5b50610b9f612bfd565b604051610bac9190615170565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190614a9e565b612c23565b604051610be9919061523e565b60405180910390f35b348015610bfe57600080fd5b50610c196004803603810190610c149190614c94565b612c43565b005b348015610c2757600080fd5b50610c30612d6b565b604051610c3d91906154d6565b60405180910390f35b348015610c5257600080fd5b50610c6d6004803603810190610c689190614a9e565b612d71565b604051610c7a919061523e565b60405180910390f35b348015610c8f57600080fd5b50610caa6004803603810190610ca59190614af0565b612d91565b604051610cb791906154d6565b60405180910390f35b348015610ccc57600080fd5b50610cd5612e18565b005b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614c42565b612f5c565b005b348015610d0c57600080fd5b50610d276004803603810190610d229190614c42565b61300e565b005b348015610d3557600080fd5b50610d506004803603810190610d4b9190614a9e565b613116565b005b348015610d5e57600080fd5b50610d676132d8565b604051610d74919061523e565b60405180910390f35b606060018054610d8c906157db565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906157db565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e47610e4061340e565b8484613416565b6001905092915050565b610e5961340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906153d6565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090615376565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61103261340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906153d6565b60405180910390fd5b8260108190555081601181905550806012819055506110ff6012546110f16011546010546133b090919063ffffffff16565b6133b090919063ffffffff16565b601481905550505050565b61111261340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611196906153d6565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061126c8484846135e1565b5061132e8461127961340e565b61132985604051806060016040528060288152602001615d8f60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112df61340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b613416565b600190509392505050565b61134161340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906153d6565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061140e600f54611400600e54600d546133b090919063ffffffff16565b6133b090919063ffffffff16565b601381905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006114b661146b7f0000000000000000000000000000000000000000000000000000000000000000611fc5565b6114a86114977f0000000000000000000000000000000000000000000000000000000000000000611fc5565b601654613ceb90919063ffffffff16565b613ceb90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b6114da61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906153d6565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190615376565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116fe61166261340e565b846116f9856007600061167361340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b613416565b6001905092915050565b61171061340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611794906153d6565b60405180910390fd5b8060178190555050565b60096020528060005260406000206000915054906101000a900460ff1681565b6117cf61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611853906153d6565b60405180910390fd5b80601a60026101000a81548160ff02191690831515021790555050565b601b60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60006118b661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a906153d6565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561198e57600080fd5b505afa1580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190614ac7565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190614ac7565b6040518363ffffffff1660e01b8152600401611a7d92919061518b565b60206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd9190614ac7565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c8e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190614ac7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190614ac7565b6040518363ffffffff1660e01b8152600401611c3992919061518b565b602060405180830381600087803b158015611c5357600080fd5b505af1158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b9190614ac7565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d9861340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c906153d6565b60405180910390fd5b8060188190555050565b601a60019054906101000a900460ff1681565b611e4a61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906153d6565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190615376565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61201661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a906153d6565b60405180910390fd5b8060198190555050565b6120b561340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906153d6565b60405180910390fd5b82600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050601a60009054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b906152b6565b60405180910390fd5b8161228e82611fc5565b10156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690615356565b60405180910390fd5b61232182600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ceb90919063ffffffff16565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061237982601654613ceb90919063ffffffff16565b6016819055505050565b60185481565b60195481565b61239761340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b906153d6565b60405180910390fd5b61242d82613d35565b61246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246390615496565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060028054612576906157db565b80601f01602080910402602001604051908101604052809291908181526020018280546125a2906157db565b80156125ef5780601f106125c4576101008083540402835291602001916125ef565b820191906000526020600020905b8154815290600101906020018083116125d257829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126e261262c61340e565b846126dd85604051806060016040528060258152602001615db7602591396007600061265661340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b613416565b6001905092915050565b60006127006126f961340e565b84846135e1565b506001905092915050565b61271361340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906153d6565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90615376565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61289661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a906153d6565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615376565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900460ff1681565b612a2c61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab0906153d6565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b1c61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba0906153d6565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612bf2919061523e565b60405180910390a150565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b612c4b61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf906153d6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612d139291906151b4565b602060405180830381600087803b158015612d2d57600080fd5b505af1158015612d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d659190614c6b565b50505050565b60175481565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612e2061340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea4906153d6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612ed39061515b565b60006040518083038185875af1925050503d8060008114612f10576040519150601f19603f3d011682016040523d82523d6000602084013e612f15565b606091505b5050905080612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f50906154b6565b60405180910390fd5b50565b612f6461340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe8906153d6565b60405180910390fd5b80601a60016101000a81548160ff02191690831515021790555050565b61301661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309a906153d6565b60405180910390fd5b801515601a60009054906101000a900460ff16151514156130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090615476565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b61311e61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a2906153d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906152f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60029054906101000a900460ff1681565b6000808314156132fe5760009050613360565b6000828461330c919061567d565b905082848261331b919061564c565b1461335b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613352906153b6565b60405180910390fd5b809150505b92915050565b60006133a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d80565b905092915050565b60008082846133bf91906155f6565b905083811015613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb90615336565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347d90615436565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ed90615316565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516135d491906154d6565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364990615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b990615296565b60405180910390fd5b60008211613705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fc906153f6565b60405180910390fd5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137a95750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90615456565b60405180910390fd5b601b60149054906101000a900460ff161561380f57613808848484613de3565b9050613c80565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138b35750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138cb5750601a60019054906101000a900460ff165b1561391657601854821115613915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390c90615396565b60405180910390fd5b5b600061392130611fc5565b9050600060175482101590508080156139475750601b60149054906101000a900460ff16155b801561399d5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139b55750601b60159054906101000a900460ff165b156139c3576139c2613fb6565b5b613a4c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000613a9b8787614224565b613aaf57613aaa87878761438f565b613ab1565b845b9050601a60029054906101000a900460ff168015613b195750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b7e57601954613b3c82613b2e89611fc5565b6133b090919063ffffffff16565b1115613b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b74906152d6565b60405180910390fd5b5b613bd081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c7091906154d6565b60405180910390a3600193505050505b9392505050565b6000838311158290613ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc69190615274565b60405180910390fd5b5060008385613cde91906156d7565b9050809150509392505050565b6000613d2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c87565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613d7757506000801b8214155b92505050919050565b60008083118290613dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbe9190615274565b60405180910390fd5b5060008385613dd6919061564c565b9050809150509392505050565b6000613e6e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fa391906154d6565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff0219169083151502179055506000613fdc30611fc5565b90506000811415613fed5750614207565b60006140066014546013546133b090919063ffffffff16565b90506000614021601054600d546133b090919063ffffffff16565b9050600061403c601154600e546133b090919063ffffffff16565b90506000614078600261406a8661405c878a6132eb90919063ffffffff16565b61336690919063ffffffff16565b61336690919063ffffffff16565b9050600061408f8287613ceb90919063ffffffff16565b9050600047905061409f826145b4565b60006140b48247613ceb90919063ffffffff16565b905060006140de6140cf60028961336690919063ffffffff16565b89613ceb90919063ffffffff16565b9050600061411a600261410c846140fe8c886132eb90919063ffffffff16565b61336690919063ffffffff16565b61336690919063ffffffff16565b90506000614143836141358a876132eb90919063ffffffff16565b61336690919063ffffffff16565b9050600061416c8261415e8588613ceb90919063ffffffff16565b613ceb90919063ffffffff16565b905060008211156141a4576141a3600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836148b1565b5b60008111156141da576141d9600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826148b1565b5b6000831180156141ea5750600088115b156141fa576141f988846148fc565b5b5050505050505050505050505b6000601b60146101000a81548160ff021916908315150217905550565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806142c75750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156142d55760019050614389565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806143765750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156143845760009050614389565b600090505b92915050565b600080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144145761440d6015546143ff601354866132eb90919063ffffffff16565b61336690919063ffffffff16565b9050614493565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144925761448f601554614481601454866132eb90919063ffffffff16565b61336690919063ffffffff16565b90505b5b6000811115614597576144ee81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161458e91906154d6565b60405180910390a35b6145aa8184613ceb90919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff8111156145f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156146255781602001602082028036833780820191505090505b5090503081600081518110614663577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561470557600080fd5b505afa158015614719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473d9190614ac7565b81600181518110614777577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506147de30601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613416565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614842959493929190615521565b600060405180830381600087803b15801561485c57600080fd5b505af1158015614870573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516148a59291906154f1565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156148f7573d6000803e3d6000fd5b505050565b61492930601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613416565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016149b2969594939291906151dd565b6060604051808303818588803b1580156149cb57600080fd5b505af11580156149df573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614a049190614d5b565b5050505050565b600081359050614a1a81615d32565b92915050565b600081519050614a2f81615d32565b92915050565b600081359050614a4481615d49565b92915050565b600081519050614a5981615d49565b92915050565b600081359050614a6e81615d60565b92915050565b600081359050614a8381615d77565b92915050565b600081519050614a9881615d77565b92915050565b600060208284031215614ab057600080fd5b6000614abe84828501614a0b565b91505092915050565b600060208284031215614ad957600080fd5b6000614ae784828501614a20565b91505092915050565b60008060408385031215614b0357600080fd5b6000614b1185828601614a0b565b9250506020614b2285828601614a0b565b9150509250929050565b600080600060608486031215614b4157600080fd5b6000614b4f86828701614a0b565b9350506020614b6086828701614a0b565b9250506040614b7186828701614a0b565b9150509250925092565b600080600060608486031215614b9057600080fd5b6000614b9e86828701614a0b565b9350506020614baf86828701614a0b565b9250506040614bc086828701614a74565b9150509250925092565b60008060408385031215614bdd57600080fd5b6000614beb85828601614a0b565b9250506020614bfc85828601614a35565b9150509250929050565b60008060408385031215614c1957600080fd5b6000614c2785828601614a0b565b9250506020614c3885828601614a74565b9150509250929050565b600060208284031215614c5457600080fd5b6000614c6284828501614a35565b91505092915050565b600060208284031215614c7d57600080fd5b6000614c8b84828501614a4a565b91505092915050565b600080600060608486031215614ca957600080fd5b6000614cb786828701614a5f565b9350506020614cc886828701614a0b565b9250506040614cd986828701614a74565b9150509250925092565b600060208284031215614cf557600080fd5b6000614d0384828501614a74565b91505092915050565b600080600060608486031215614d2157600080fd5b6000614d2f86828701614a74565b9350506020614d4086828701614a74565b9250506040614d5186828701614a74565b9150509250925092565b600080600060608486031215614d7057600080fd5b6000614d7e86828701614a89565b9350506020614d8f86828701614a89565b9250506040614da086828701614a89565b9150509250925092565b6000614db68383614dc2565b60208301905092915050565b614dcb8161570b565b82525050565b614dda8161570b565b82525050565b6000614deb826155a6565b614df581856155c9565b9350614e0083615596565b8060005b83811015614e31578151614e188882614daa565b9750614e23836155bc565b925050600181019050614e04565b5085935050505092915050565b614e478161571d565b82525050565b614e5681615772565b82525050565b614e6581615796565b82525050565b6000614e76826155b1565b614e8081856155e5565b9350614e908185602086016157a8565b614e998161589a565b840191505092915050565b6000614eb16023836155e5565b9150614ebc826158ab565b604082019050919050565b6000614ed46020836155e5565b9150614edf826158fa565b602082019050919050565b6000614ef7601b836155e5565b9150614f0282615923565b602082019050919050565b6000614f1a6026836155e5565b9150614f258261594c565b604082019050919050565b6000614f3d6022836155e5565b9150614f488261599b565b604082019050919050565b6000614f60601b836155e5565b9150614f6b826159ea565b602082019050919050565b6000614f836024836155e5565b9150614f8e82615a13565b604082019050919050565b6000614fa6600d836155e5565b9150614fb182615a62565b602082019050919050565b6000614fc96028836155e5565b9150614fd482615a8b565b604082019050919050565b6000614fec6021836155e5565b9150614ff782615ada565b604082019050919050565b600061500f6020836155e5565b915061501a82615b29565b602082019050919050565b60006150326029836155e5565b915061503d82615b52565b604082019050919050565b60006150556025836155e5565b915061506082615ba1565b604082019050919050565b60006150786000836155da565b915061508382615bf0565b600082019050919050565b600061509b6024836155e5565b91506150a682615bf3565b604082019050919050565b60006150be602d836155e5565b91506150c982615c42565b604082019050919050565b60006150e16011836155e5565b91506150ec82615c91565b602082019050919050565b6000615104602f836155e5565b915061510f82615cba565b604082019050919050565b60006151276014836155e5565b915061513282615d09565b602082019050919050565b6151468161575b565b82525050565b61515581615765565b82525050565b60006151668261506b565b9150819050919050565b60006020820190506151856000830184614dd1565b92915050565b60006040820190506151a06000830185614dd1565b6151ad6020830184614dd1565b9392505050565b60006040820190506151c96000830185614dd1565b6151d6602083018461513d565b9392505050565b600060c0820190506151f26000830189614dd1565b6151ff602083018861513d565b61520c6040830187614e5c565b6152196060830186614e5c565b6152266080830185614dd1565b61523360a083018461513d565b979650505050505050565b60006020820190506152536000830184614e3e565b92915050565b600060208201905061526e6000830184614e4d565b92915050565b6000602082019050818103600083015261528e8184614e6b565b905092915050565b600060208201905081810360008301526152af81614ea4565b9050919050565b600060208201905081810360008301526152cf81614ec7565b9050919050565b600060208201905081810360008301526152ef81614eea565b9050919050565b6000602082019050818103600083015261530f81614f0d565b9050919050565b6000602082019050818103600083015261532f81614f30565b9050919050565b6000602082019050818103600083015261534f81614f53565b9050919050565b6000602082019050818103600083015261536f81614f76565b9050919050565b6000602082019050818103600083015261538f81614f99565b9050919050565b600060208201905081810360008301526153af81614fbc565b9050919050565b600060208201905081810360008301526153cf81614fdf565b9050919050565b600060208201905081810360008301526153ef81615002565b9050919050565b6000602082019050818103600083015261540f81615025565b9050919050565b6000602082019050818103600083015261542f81615048565b9050919050565b6000602082019050818103600083015261544f8161508e565b9050919050565b6000602082019050818103600083015261546f816150b1565b9050919050565b6000602082019050818103600083015261548f816150d4565b9050919050565b600060208201905081810360008301526154af816150f7565b9050919050565b600060208201905081810360008301526154cf8161511a565b9050919050565b60006020820190506154eb600083018461513d565b92915050565b6000604082019050615506600083018561513d565b81810360208301526155188184614de0565b90509392505050565b600060a082019050615536600083018861513d565b6155436020830187614e5c565b81810360408301526155558186614de0565b90506155646060830185614dd1565b615571608083018461513d565b9695505050505050565b6000602082019050615590600083018461514c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006156018261575b565b915061560c8361575b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156415761564061580d565b5b828201905092915050565b60006156578261575b565b91506156628361575b565b9250826156725761567161583c565b5b828204905092915050565b60006156888261575b565b91506156938361575b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156cc576156cb61580d565b5b828202905092915050565b60006156e28261575b565b91506156ed8361575b565b925082821015615700576156ff61580d565b5b828203905092915050565b60006157168261573b565b9050919050565b60008115159050919050565b60006157348261570b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061577d82615784565b9050919050565b600061578f8261573b565b9050919050565b60006157a18261575b565b9050919050565b60005b838110156157c65780820151818401526020810190506157ab565b838111156157d5576000848401525b50505050565b600060028204905060018216806157f357607f821691505b602082108114156158075761580661586b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204275726e696e672069732043757272656e746c79204f666621600082015250565b7f4d61782057616c6c6574204c696d697420457863656564656421210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4572726f723a20416d6f756e742045786365656465642066726f6d2062616c6160008201527f6e63652100000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74204368616e676564212100000000000000000000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060008201527f6e6f7420416c6c6f776564212100000000000000000000000000000000000000602082015250565b7f4572726f723a204e6f74204368616e6765000000000000000000000000000000600082015250565b7f4572726f723a20426c61636b4c697374204170706c696361626c6520466f722060008201527f426f742f436f6e74726163747321210000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e204661696c65642121000000000000000000000000600082015250565b615d3b8161570b565b8114615d4657600080fd5b50565b615d528161571d565b8114615d5d57600080fd5b50565b615d6981615729565b8114615d7457600080fd5b50565b615d808161575b565b8114615d8b57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220751245ed98278815fb510c8458d69a4904d33d7b92fba8dabf3a4bc981ced91f64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806375f0a874116101c6578063b6970204116100f7578063dbac26e911610095578063ee828db31161006f578063ee828db314610cd7578063f229abbd14610d00578063f2fde38b14610d29578063f872858a14610d5257610376565b8063dbac26e914610c46578063dd62ed3e14610c83578063e6b2603b14610cc057610376565b8063c816841b116100d1578063c816841b14610b8a578063c867d60b14610bb5578063cea9d26f14610bf2578063d2d7ad8314610c1b57610376565b8063b697020414610b0d578063c16dd4a414610b38578063c49b9a8014610b6157610376565b80638f32d59b11610164578063a457c2d71161013e578063a457c2d714610a41578063a9059cbb14610a7e578063ae85ade614610abb578063af9549e014610ae457610376565b80638f32d59b146109c057806395d89b41146109eb57806398e944c814610a1657610376565b8063807c2d9c116101a0578063807c2d9c146109045780638236802e1461092f5780638b42507f146109585780638da5cb5b1461099557610376565b806375f0a874146108855780637b47ec1a146108b05780637d1db4a5146108d957610376565b806338ec0b11116102a05780635881f3ef1161023e578063651a898711610218578063651a8987146107cd57806370a08231146107f6578063728d41c91461083357806375cb1bd11461085c57610376565b80635881f3ef1461073c5780635c85974f146107795780635e42358c146107a257610376565b80633ecad2711161027a5780633ecad2711461066e5780634974d88f146106ab5780634a74bb02146106d45780635342acb4146106ff57610376565b806338ec0b11146105df57806339509351146106085780633b97084a1461064557610376565b80631d865c301161030d57806325519cf2116102e757806325519cf21461053557806327c8f8351461055e5780632b112e4914610589578063313ce567146105b457610376565b80631d865c30146104b857806320365d5f146104e157806323b872dd146104f857610376565b806313ea1d891161034957806313ea1d891461040e5780631694505e1461043757806318160ddd14610462578063185870f91461048d57610376565b806306fdde031461037b5780630930907b146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7d565b60405161039d9190615274565b60405180910390f35b3480156103b257600080fd5b506103bb610e0f565b6040516103c89190615170565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190614c06565b610e33565b604051610405919061523e565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614bca565b610e51565b005b34801561044357600080fd5b5061044c610fd4565b6040516104599190615259565b60405180910390f35b34801561046e57600080fd5b50610477610ffa565b60405161048491906154d6565b60405180910390f35b34801561049957600080fd5b506104a2611004565b6040516104af9190615170565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190614d0c565b61102a565b005b3480156104ed57600080fd5b506104f661110a565b005b34801561050457600080fd5b5061051f600480360381019061051a9190614b7b565b61125f565b60405161052c919061523e565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614d0c565b611339565b005b34801561056a57600080fd5b50610573611419565b6040516105809190615170565b60405180910390f35b34801561059557600080fd5b5061059e61143d565b6040516105ab91906154d6565b60405180910390f35b3480156105c057600080fd5b506105c96114bb565b6040516105d6919061557b565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614bca565b6114d2565b005b34801561061457600080fd5b5061062f600480360381019061062a9190614c06565b611655565b60405161063c919061523e565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190614ce3565b611708565b005b34801561067a57600080fd5b5061069560048036038101906106909190614a9e565b6117a7565b6040516106a2919061523e565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614c42565b6117c7565b005b3480156106e057600080fd5b506106e9611879565b6040516106f6919061523e565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614a9e565b61188c565b604051610733919061523e565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190614a9e565b6118ac565b6040516107709190615170565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190614ce3565b611d90565b005b3480156107ae57600080fd5b506107b7611e2f565b6040516107c4919061523e565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190614bca565b611e42565b005b34801561080257600080fd5b5061081d60048036038101906108189190614a9e565b611fc5565b60405161082a91906154d6565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614ce3565b61200e565b005b34801561086857600080fd5b50610883600480360381019061087e9190614b2c565b6120ad565b005b34801561089157600080fd5b5061089a61220a565b6040516108a79190615170565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614ce3565b612230565b005b3480156108e557600080fd5b506108ee612383565b6040516108fb91906154d6565b60405180910390f35b34801561091057600080fd5b50610919612389565b60405161092691906154d6565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614bca565b61238f565b005b34801561096457600080fd5b5061097f600480360381019061097a9190614a9e565b6124c7565b60405161098c919061523e565b60405180910390f35b3480156109a157600080fd5b506109aa6124e7565b6040516109b79190615170565b60405180910390f35b3480156109cc57600080fd5b506109d5612510565b6040516109e2919061523e565b60405180910390f35b3480156109f757600080fd5b50610a00612567565b604051610a0d9190615274565b60405180910390f35b348015610a2257600080fd5b50610a2b6125f9565b604051610a389190615170565b60405180910390f35b348015610a4d57600080fd5b50610a686004803603810190610a639190614c06565b61261f565b604051610a75919061523e565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190614c06565b6126ec565b604051610ab2919061523e565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614bca565b61270b565b005b348015610af057600080fd5b50610b0b6004803603810190610b069190614bca565b61288e565b005b348015610b1957600080fd5b50610b22612a11565b604051610b2f919061523e565b60405180910390f35b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190614bca565b612a24565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190614c42565b612b14565b005b348015610b9657600080fd5b50610b9f612bfd565b604051610bac9190615170565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190614a9e565b612c23565b604051610be9919061523e565b60405180910390f35b348015610bfe57600080fd5b50610c196004803603810190610c149190614c94565b612c43565b005b348015610c2757600080fd5b50610c30612d6b565b604051610c3d91906154d6565b60405180910390f35b348015610c5257600080fd5b50610c6d6004803603810190610c689190614a9e565b612d71565b604051610c7a919061523e565b60405180910390f35b348015610c8f57600080fd5b50610caa6004803603810190610ca59190614af0565b612d91565b604051610cb791906154d6565b60405180910390f35b348015610ccc57600080fd5b50610cd5612e18565b005b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614c42565b612f5c565b005b348015610d0c57600080fd5b50610d276004803603810190610d229190614c42565b61300e565b005b348015610d3557600080fd5b50610d506004803603810190610d4b9190614a9e565b613116565b005b348015610d5e57600080fd5b50610d676132d8565b604051610d74919061523e565b60405180910390f35b606060018054610d8c906157db565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906157db565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e47610e4061340e565b8484613416565b6001905092915050565b610e5961340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906153d6565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090615376565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61103261340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906153d6565b60405180910390fd5b8260108190555081601181905550806012819055506110ff6012546110f16011546010546133b090919063ffffffff16565b6133b090919063ffffffff16565b601481905550505050565b61111261340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611196906153d6565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061126c8484846135e1565b5061132e8461127961340e565b61132985604051806060016040528060288152602001615d8f60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112df61340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b613416565b600190509392505050565b61134161340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906153d6565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061140e600f54611400600e54600d546133b090919063ffffffff16565b6133b090919063ffffffff16565b601381905550505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006114b661146b7f0000000000000000000000000000000000000000000000000000000000000000611fc5565b6114a86114977f000000000000000000000000000000000000000000000000000000000000dead611fc5565b601654613ceb90919063ffffffff16565b613ceb90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b6114da61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906153d6565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190615376565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116fe61166261340e565b846116f9856007600061167361340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b613416565b6001905092915050565b61171061340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611794906153d6565b60405180910390fd5b8060178190555050565b60096020528060005260406000206000915054906101000a900460ff1681565b6117cf61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611853906153d6565b60405180910390fd5b80601a60026101000a81548160ff02191690831515021790555050565b601b60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60006118b661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a906153d6565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561198e57600080fd5b505afa1580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190614ac7565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190614ac7565b6040518363ffffffff1660e01b8152600401611a7d92919061518b565b60206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd9190614ac7565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c8e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4a57600080fd5b505afa158015611b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b829190614ac7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190614ac7565b6040518363ffffffff1660e01b8152600401611c3992919061518b565b602060405180830381600087803b158015611c5357600080fd5b505af1158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b9190614ac7565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d9861340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c906153d6565b60405180910390fd5b8060188190555050565b601a60019054906101000a900460ff1681565b611e4a61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906153d6565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190615376565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61201661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a906153d6565b60405180910390fd5b8060198190555050565b6120b561340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612139906153d6565b60405180910390fd5b82600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000339050601a60009054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b906152b6565b60405180910390fd5b8161228e82611fc5565b10156122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690615356565b60405180910390fd5b61232182600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ceb90919063ffffffff16565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061237982601654613ceb90919063ffffffff16565b6016819055505050565b60185481565b60195481565b61239761340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b906153d6565b60405180910390fd5b61242d82613d35565b61246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246390615496565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060028054612576906157db565b80601f01602080910402602001604051908101604052809291908181526020018280546125a2906157db565b80156125ef5780601f106125c4576101008083540402835291602001916125ef565b820191906000526020600020905b8154815290600101906020018083116125d257829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126e261262c61340e565b846126dd85604051806060016040528060258152602001615db7602591396007600061265661340e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b613416565b6001905092915050565b60006127006126f961340e565b84846135e1565b506001905092915050565b61271361340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906153d6565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90615376565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61289661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a906153d6565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615376565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900460ff1681565b612a2c61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab0906153d6565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b1c61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba0906153d6565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612bf2919061523e565b60405180910390a150565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b612c4b61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf906153d6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612d139291906151b4565b602060405180830381600087803b158015612d2d57600080fd5b505af1158015612d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d659190614c6b565b50505050565b60175481565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612e2061340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea4906153d6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612ed39061515b565b60006040518083038185875af1925050503d8060008114612f10576040519150601f19603f3d011682016040523d82523d6000602084013e612f15565b606091505b5050905080612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f50906154b6565b60405180910390fd5b50565b612f6461340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe8906153d6565b60405180910390fd5b80601a60016101000a81548160ff02191690831515021790555050565b61301661340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309a906153d6565b60405180910390fd5b801515601a60009054906101000a900460ff16151514156130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f090615476565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b61311e61340e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a2906153d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906152f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60029054906101000a900460ff1681565b6000808314156132fe5760009050613360565b6000828461330c919061567d565b905082848261331b919061564c565b1461335b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613352906153b6565b60405180910390fd5b809150505b92915050565b60006133a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d80565b905092915050565b60008082846133bf91906155f6565b905083811015613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb90615336565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347d90615436565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ed90615316565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516135d491906154d6565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364990615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b990615296565b60405180910390fd5b60008211613705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fc906153f6565b60405180910390fd5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137a95750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90615456565b60405180910390fd5b601b60149054906101000a900460ff161561380f57613808848484613de3565b9050613c80565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138b35750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138cb5750601a60019054906101000a900460ff165b1561391657601854821115613915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390c90615396565b60405180910390fd5b5b600061392130611fc5565b9050600060175482101590508080156139475750601b60149054906101000a900460ff16155b801561399d5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139b55750601b60159054906101000a900460ff165b156139c3576139c2613fb6565b5b613a4c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000613a9b8787614224565b613aaf57613aaa87878761438f565b613ab1565b845b9050601a60029054906101000a900460ff168015613b195750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b7e57601954613b3c82613b2e89611fc5565b6133b090919063ffffffff16565b1115613b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b74906152d6565b60405180910390fd5b5b613bd081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c7091906154d6565b60405180910390a3600193505050505b9392505050565b6000838311158290613ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc69190615274565b60405180910390fd5b5060008385613cde91906156d7565b9050809150509392505050565b6000613d2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c87565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613d7757506000801b8214155b92505050919050565b60008083118290613dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbe9190615274565b60405180910390fd5b5060008385613dd6919061564c565b9050809150509392505050565b6000613e6e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fa391906154d6565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff0219169083151502179055506000613fdc30611fc5565b90506000811415613fed5750614207565b60006140066014546013546133b090919063ffffffff16565b90506000614021601054600d546133b090919063ffffffff16565b9050600061403c601154600e546133b090919063ffffffff16565b90506000614078600261406a8661405c878a6132eb90919063ffffffff16565b61336690919063ffffffff16565b61336690919063ffffffff16565b9050600061408f8287613ceb90919063ffffffff16565b9050600047905061409f826145b4565b60006140b48247613ceb90919063ffffffff16565b905060006140de6140cf60028961336690919063ffffffff16565b89613ceb90919063ffffffff16565b9050600061411a600261410c846140fe8c886132eb90919063ffffffff16565b61336690919063ffffffff16565b61336690919063ffffffff16565b90506000614143836141358a876132eb90919063ffffffff16565b61336690919063ffffffff16565b9050600061416c8261415e8588613ceb90919063ffffffff16565b613ceb90919063ffffffff16565b905060008211156141a4576141a3600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836148b1565b5b60008111156141da576141d9600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826148b1565b5b6000831180156141ea5750600088115b156141fa576141f988846148fc565b5b5050505050505050505050505b6000601b60146101000a81548160ff021916908315150217905550565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806142c75750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156142d55760019050614389565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806143765750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156143845760009050614389565b600090505b92915050565b600080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144145761440d6015546143ff601354866132eb90919063ffffffff16565b61336690919063ffffffff16565b9050614493565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144925761448f601554614481601454866132eb90919063ffffffff16565b61336690919063ffffffff16565b90505b5b6000811115614597576144ee81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133b090919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161458e91906154d6565b60405180910390a35b6145aa8184613ceb90919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff8111156145f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156146255781602001602082028036833780820191505090505b5090503081600081518110614663577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561470557600080fd5b505afa158015614719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473d9190614ac7565b81600181518110614777577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506147de30601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613416565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614842959493929190615521565b600060405180830381600087803b15801561485c57600080fd5b505af1158015614870573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516148a59291906154f1565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156148f7573d6000803e3d6000fd5b505050565b61492930601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613416565b601a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016149b2969594939291906151dd565b6060604051808303818588803b1580156149cb57600080fd5b505af11580156149df573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614a049190614d5b565b5050505050565b600081359050614a1a81615d32565b92915050565b600081519050614a2f81615d32565b92915050565b600081359050614a4481615d49565b92915050565b600081519050614a5981615d49565b92915050565b600081359050614a6e81615d60565b92915050565b600081359050614a8381615d77565b92915050565b600081519050614a9881615d77565b92915050565b600060208284031215614ab057600080fd5b6000614abe84828501614a0b565b91505092915050565b600060208284031215614ad957600080fd5b6000614ae784828501614a20565b91505092915050565b60008060408385031215614b0357600080fd5b6000614b1185828601614a0b565b9250506020614b2285828601614a0b565b9150509250929050565b600080600060608486031215614b4157600080fd5b6000614b4f86828701614a0b565b9350506020614b6086828701614a0b565b9250506040614b7186828701614a0b565b9150509250925092565b600080600060608486031215614b9057600080fd5b6000614b9e86828701614a0b565b9350506020614baf86828701614a0b565b9250506040614bc086828701614a74565b9150509250925092565b60008060408385031215614bdd57600080fd5b6000614beb85828601614a0b565b9250506020614bfc85828601614a35565b9150509250929050565b60008060408385031215614c1957600080fd5b6000614c2785828601614a0b565b9250506020614c3885828601614a74565b9150509250929050565b600060208284031215614c5457600080fd5b6000614c6284828501614a35565b91505092915050565b600060208284031215614c7d57600080fd5b6000614c8b84828501614a4a565b91505092915050565b600080600060608486031215614ca957600080fd5b6000614cb786828701614a5f565b9350506020614cc886828701614a0b565b9250506040614cd986828701614a74565b9150509250925092565b600060208284031215614cf557600080fd5b6000614d0384828501614a74565b91505092915050565b600080600060608486031215614d2157600080fd5b6000614d2f86828701614a74565b9350506020614d4086828701614a74565b9250506040614d5186828701614a74565b9150509250925092565b600080600060608486031215614d7057600080fd5b6000614d7e86828701614a89565b9350506020614d8f86828701614a89565b9250506040614da086828701614a89565b9150509250925092565b6000614db68383614dc2565b60208301905092915050565b614dcb8161570b565b82525050565b614dda8161570b565b82525050565b6000614deb826155a6565b614df581856155c9565b9350614e0083615596565b8060005b83811015614e31578151614e188882614daa565b9750614e23836155bc565b925050600181019050614e04565b5085935050505092915050565b614e478161571d565b82525050565b614e5681615772565b82525050565b614e6581615796565b82525050565b6000614e76826155b1565b614e8081856155e5565b9350614e908185602086016157a8565b614e998161589a565b840191505092915050565b6000614eb16023836155e5565b9150614ebc826158ab565b604082019050919050565b6000614ed46020836155e5565b9150614edf826158fa565b602082019050919050565b6000614ef7601b836155e5565b9150614f0282615923565b602082019050919050565b6000614f1a6026836155e5565b9150614f258261594c565b604082019050919050565b6000614f3d6022836155e5565b9150614f488261599b565b604082019050919050565b6000614f60601b836155e5565b9150614f6b826159ea565b602082019050919050565b6000614f836024836155e5565b9150614f8e82615a13565b604082019050919050565b6000614fa6600d836155e5565b9150614fb182615a62565b602082019050919050565b6000614fc96028836155e5565b9150614fd482615a8b565b604082019050919050565b6000614fec6021836155e5565b9150614ff782615ada565b604082019050919050565b600061500f6020836155e5565b915061501a82615b29565b602082019050919050565b60006150326029836155e5565b915061503d82615b52565b604082019050919050565b60006150556025836155e5565b915061506082615ba1565b604082019050919050565b60006150786000836155da565b915061508382615bf0565b600082019050919050565b600061509b6024836155e5565b91506150a682615bf3565b604082019050919050565b60006150be602d836155e5565b91506150c982615c42565b604082019050919050565b60006150e16011836155e5565b91506150ec82615c91565b602082019050919050565b6000615104602f836155e5565b915061510f82615cba565b604082019050919050565b60006151276014836155e5565b915061513282615d09565b602082019050919050565b6151468161575b565b82525050565b61515581615765565b82525050565b60006151668261506b565b9150819050919050565b60006020820190506151856000830184614dd1565b92915050565b60006040820190506151a06000830185614dd1565b6151ad6020830184614dd1565b9392505050565b60006040820190506151c96000830185614dd1565b6151d6602083018461513d565b9392505050565b600060c0820190506151f26000830189614dd1565b6151ff602083018861513d565b61520c6040830187614e5c565b6152196060830186614e5c565b6152266080830185614dd1565b61523360a083018461513d565b979650505050505050565b60006020820190506152536000830184614e3e565b92915050565b600060208201905061526e6000830184614e4d565b92915050565b6000602082019050818103600083015261528e8184614e6b565b905092915050565b600060208201905081810360008301526152af81614ea4565b9050919050565b600060208201905081810360008301526152cf81614ec7565b9050919050565b600060208201905081810360008301526152ef81614eea565b9050919050565b6000602082019050818103600083015261530f81614f0d565b9050919050565b6000602082019050818103600083015261532f81614f30565b9050919050565b6000602082019050818103600083015261534f81614f53565b9050919050565b6000602082019050818103600083015261536f81614f76565b9050919050565b6000602082019050818103600083015261538f81614f99565b9050919050565b600060208201905081810360008301526153af81614fbc565b9050919050565b600060208201905081810360008301526153cf81614fdf565b9050919050565b600060208201905081810360008301526153ef81615002565b9050919050565b6000602082019050818103600083015261540f81615025565b9050919050565b6000602082019050818103600083015261542f81615048565b9050919050565b6000602082019050818103600083015261544f8161508e565b9050919050565b6000602082019050818103600083015261546f816150b1565b9050919050565b6000602082019050818103600083015261548f816150d4565b9050919050565b600060208201905081810360008301526154af816150f7565b9050919050565b600060208201905081810360008301526154cf8161511a565b9050919050565b60006020820190506154eb600083018461513d565b92915050565b6000604082019050615506600083018561513d565b81810360208301526155188184614de0565b90509392505050565b600060a082019050615536600083018861513d565b6155436020830187614e5c565b81810360408301526155558186614de0565b90506155646060830185614dd1565b615571608083018461513d565b9695505050505050565b6000602082019050615590600083018461514c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006156018261575b565b915061560c8361575b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156415761564061580d565b5b828201905092915050565b60006156578261575b565b91506156628361575b565b9250826156725761567161583c565b5b828204905092915050565b60006156888261575b565b91506156938361575b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156cc576156cb61580d565b5b828202905092915050565b60006156e28261575b565b91506156ed8361575b565b925082821015615700576156ff61580d565b5b828203905092915050565b60006157168261573b565b9050919050565b60008115159050919050565b60006157348261570b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061577d82615784565b9050919050565b600061578f8261573b565b9050919050565b60006157a18261575b565b9050919050565b60005b838110156157c65780820151818401526020810190506157ab565b838111156157d5576000848401525b50505050565b600060028204905060018216806157f357607f821691505b602082108114156158075761580661586b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204275726e696e672069732043757272656e746c79204f666621600082015250565b7f4d61782057616c6c6574204c696d697420457863656564656421210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4572726f723a20416d6f756e742045786365656465642066726f6d2062616c6160008201527f6e63652100000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74204368616e676564212100000000000000000000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060008201527f6e6f7420416c6c6f776564212100000000000000000000000000000000000000602082015250565b7f4572726f723a204e6f74204368616e6765000000000000000000000000000000600082015250565b7f4572726f723a20426c61636b4c697374204170706c696361626c6520466f722060008201527f426f742f436f6e74726163747321210000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e204661696c65642121000000000000000000000000600082015250565b615d3b8161570b565b8114615d4657600080fd5b50565b615d528161571d565b8114615d5d57600080fd5b50565b615d6981615729565b8114615d7457600080fd5b50565b615d808161575b565b8114615d8b57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220751245ed98278815fb510c8458d69a4904d33d7b92fba8dabf3a4bc981ced91f64736f6c63430008040033

Deployed Bytecode Sourcemap

14195:17090:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14737:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19257:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15975:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18364:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14526:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5871:231;;;;;;;;;;;;;:::i;:::-;;20208:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27643:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14649:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19775:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18273:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29698:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18754:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28705:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15015:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30200:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16090:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14958:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30532:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30423:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15892:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29175:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18472:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30309:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28274:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14444:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26509:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15685:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15771:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27042:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15126:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5546:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5771:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18178:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14608:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18980:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20033:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29381:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28504:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15855:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29575:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28996:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16023:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15067:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27505:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15615:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15181:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18603:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27289:176;;;;;;;;;;;;;:::i;:::-;;30096:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28835:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6110:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15931:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18087:83;18124:13;18157:5;18150:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18087:83;:::o;14737:81::-;;;:::o;19257:161::-;19332:4;19349:39;19358:12;:10;:12::i;:::-;19372:7;19381:6;19349:8;:39::i;:::-;19406:4;19399:11;;19257:161;;;;:::o;29904:186::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30016:7:::1;29991:32;;:15;:21;30007:4;29991:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;29983:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30075:7;30051:15;:21;30067:4;30051:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29904:186:::0;;:::o;15975:41::-;;;;;;;;;;;;;:::o;18364:100::-;18417:7;18444:12;;18437:19;;18364:100;:::o;14526:75::-;;;;;;;;;;;;;:::o;27953:313::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28081:6:::1;28061:17;:26;;;;28118:10;28098:17;:30;;;;28159:13;28139:17;:33;;;;28195:63;28240:17;;28195:40;28217:17;;28195;;:21;;:40;;;;:::i;:::-;:44;;:63;;;;:::i;:::-;28183:9;:75;;;;27953:313:::0;;;:::o;5871:231::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5979:42:::1;5942:81;;5963:6;::::0;::::1;;;;;;;;5942:81;;;;;;;;;;;;6051:42;6034:6;::::0;:60:::1;;;;;;;;;;;;;;;;;;5871:231::o:0;20208:313::-;20306:4;20323:36;20333:6;20341:9;20352:6;20323:9;:36::i;:::-;;20370:121;20379:6;20387:12;:10;:12::i;:::-;20401:89;20439:6;20401:89;;;;;;;;;;;;;;;;;:11;:19;20413:6;20401:19;;;;;;;;;;;;;;;:33;20421:12;:10;:12::i;:::-;20401:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20370:8;:121::i;:::-;20509:4;20502:11;;20208:313;;;;;:::o;27643:302::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27766:6:::1;27747:16;:25;;;;27802:10;27783:16;:29;;;;27842:13;27823:16;:32;;;;27877:60;27920:16;;27877:38;27898:16;;27877;;:20;;:38;;;;:::i;:::-;:42;;:60;;;;:::i;:::-;27866:8;:71;;;;27643:302:::0;;;:::o;14649:81::-;;;:::o;19775:156::-;19828:7;19855:68;19900:22;19910:11;19900:9;:22::i;:::-;19855:40;19872:22;19882:11;19872:9;:22::i;:::-;19855:12;;:16;;:40;;;;:::i;:::-;:44;;:68;;;;:::i;:::-;19848:75;;19775:156;:::o;18273:83::-;18314:5;18339:9;;;;;;;;;;;18332:16;;18273:83;:::o;29698:198::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29818:7:::1;29789:36;;:19;:25;29809:4;29789:25;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;29781:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29881:7;29853:19;:25;29873:4;29853:25;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29698:198:::0;;:::o;18754:218::-;18842:4;18859:83;18868:12;:10;:12::i;:::-;18882:7;18891:50;18930:10;18891:11;:25;18903:12;:10;:12::i;:::-;18891:25;;;;;;;;;;;;;;;:34;18917:7;18891:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18859:8;:83::i;:::-;18960:4;18953:11;;18754:218;;;;:::o;28705:122::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28811:8:::1;28785:23;:34;;;;28705:122:::0;:::o;15015:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;30200:103::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30288:7:::1;30269:16;;:26;;;;;;;;;;;;;;;;;;30200:103:::0;:::o;16090:41::-;;;;;;;;;;;;;:::o;14958:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;30532:748::-;30612:22;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30649:35:::1;30706:16;30649:74;;30772:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30754:53;;;30816:4;30823:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30754:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30737:110;;30889:1;30863:28;;:14;:28;;;30860:225;;;30977:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30959:74;;;31042:4;31049:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30959:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30942:131;;30860:225;31111:14;31097:11;;:28;;;;;;;;;;;;;;;;;;31177:16;31159:15;;:34;;;;;;;;;;;;;;;;;;31268:4;31231:12;:34;31252:11;;;;;;;;;;;31231:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;5750:1;30532:748:::0;;;:::o;30423:101::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30508:8:::1;30493:12;:23;;;;30423:101:::0;:::o;15892:32::-;;;;;;;;;;;;;:::o;29175:198::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29295:7:::1;29266:36;;:19;:25;29286:4;29266:25;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;29258:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29358:7;29330:19;:25;29350:4;29330:25;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29175:198:::0;;:::o;18472:123::-;18538:7;18564:9;:18;18574:7;18564:18;;;;;;;;;;;;;;;;18557:25;;18472:123;;;:::o;30309:106::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30399:8:::1;30386:10;:21;;;;30309:106:::0;:::o;28274:222::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28398:7:::1;28380:15;;:25;;;;;;;;;;;;;;;;;;28434:10;28416:15;;:28;;;;;;;;;;;;;;;;;;28475:13;28455:17;;:33;;;;;;;;;;;;;;;;;;28274:222:::0;;;:::o;14444:75::-;;;;;;;;;;;;;:::o;26509:359::-;26565:15;26583:10;26565:28;;26612:10;;;;;;;;;;;26604:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26699:7;26677:18;26687:7;26677:9;:18::i;:::-;:29;;26669:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:31;26801:7;26778:9;:18;26788:7;26778:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;26757:9;:18;26767:7;26757:18;;;;;;;;;;;;;;;:52;;;;26835:25;26852:7;26835:12;;:16;;:25;;;;:::i;:::-;26820:12;:40;;;;26509:359;;:::o;15685:68::-;;;;:::o;15771:65::-;;;;:::o;27042:206::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27127:24:::1;27146:4;27127:18;:24::i;:::-;27119:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27233:7;27213:11;:17;27225:4;27213:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27042:206:::0;;:::o;15126:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5546:79::-;5584:7;5611:6;;;;;;;;;;;5604:13;;5546:79;:::o;5771:92::-;5811:4;5849:6;;;;;;;;;;;5835:20;;:10;:20;;;5828:27;;5771:92;:::o;18178:87::-;18217:13;18250:7;18243:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18178:87;:::o;14608:32::-;;;;;;;;;;;;;:::o;18980:269::-;19073:4;19090:129;19099:12;:10;:12::i;:::-;19113:7;19122:96;19161:15;19122:96;;;;;;;;;;;;;;;;;:11;:25;19134:12;:10;:12::i;:::-;19122:25;;;;;;;;;;;;;;;:34;19148:7;19122:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19090:8;:129::i;:::-;19237:4;19230:11;;18980:269;;;;:::o;20033:167::-;20111:4;20128:42;20138:12;:10;:12::i;:::-;20152:9;20163:6;20128:9;:42::i;:::-;;20188:4;20181:11;;20033:167;;;;:::o;29381:186::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29493:7:::1;29468:32;;:15;:21;29484:4;29468:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;29460:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29552:7;29528:15;:21;29544:4;29528:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29381:186:::0;;:::o;28504:193::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28621:7:::1;28594:34;;:17;:23;28612:4;28594:23;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;28586:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28682:7;28656:17;:23;28674:4;28656:23;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;28504:193:::0;;:::o;15855:30::-;;;;;;;;;;;;;:::o;29575:117::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29677:7:::1;29655:12;:19;29668:5;29655:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29575:117:::0;;:::o;28996:171::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29097:8:::1;29073:21;;:32;;;;;;;;;;;;;;;;;;29121:38;29150:8;29121:38;;;;;;:::i;:::-;;;;;;;;28996:171:::0;:::o;16023:26::-;;;;;;;;;;;;;:::o;15067:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;27505:130::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27597:3:::1;:12;;;27610:9;27620:6;27597:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27505:130:::0;;;:::o;15615:61::-;;;;:::o;15181:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18603:143::-;18684:7;18711:11;:18;18723:5;18711:18;;;;;;;;;;;;;;;:27;18730:7;18711:27;;;;;;;;;;;;;;;;18704:34;;18603:143;;;;:::o;27289:176::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27342:7:::1;27362:10;27354:24;;27386:21;27354:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27341:71;;;27431:2;27423:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;5750:1;27289:176::o:0;30096:96::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30177:7:::1;30161:13;;:23;;;;;;;;;;;;;;;;;;30096:96:::0;:::o;28835:153::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28921:7:::1;28907:21;;:10;;;;;;;;;;;:21;;;;28899:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28973:7;28960:10;;:20;;;;;;;;;;;;;;;;;;28835:153:::0;:::o;6110:244::-;5690:12;:10;:12::i;:::-;5680:22;;:6;;;;;;;;;;:22;;;5672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6219:1:::1;6199:22;;:8;:22;;;;6191:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6309:8;6280:38;;6301:6;::::0;::::1;;;;;;;;6280:38;;;;;;;;;;;;6338:8;6329:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6110:244:::0;:::o;15931:35::-;;;;;;;;;;;;;:::o;1856:250::-;1914:7;1943:1;1938;:6;1934:47;;;1968:1;1961:8;;;;1934:47;1993:9;2009:1;2005;:5;;;;:::i;:::-;1993:17;;2038:1;2033;2029;:5;;;;:::i;:::-;:10;2021:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2097:1;2090:8;;;1856:250;;;;;:::o;2114:132::-;2172:7;2199:39;2203:1;2206;2199:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2192:46;;2114:132;;;;:::o;1323:181::-;1381:7;1401:9;1417:1;1413;:5;;;;:::i;:::-;1401:17;;1442:1;1437;:6;;1429:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1495:1;1488:8;;;1323:181;;;;:::o;374:115::-;427:15;470:10;455:26;;374:115;:::o;19426:337::-;19536:1;19519:19;;:5;:19;;;;19511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19617:1;19598:21;;:7;:21;;;;19590:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19701:6;19671:11;:18;19683:5;19671:18;;;;;;;;;;;;;;;:27;19690:7;19671:27;;;;;;;;;;;;;;;:36;;;;19739:7;19723:32;;19732:5;19723:32;;;19748:6;19723:32;;;;;;:::i;:::-;;;;;;;;19426:337;;;:::o;20529:1751::-;20616:4;20661:1;20643:20;;:6;:20;;;;20635:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20745:1;20724:23;;:9;:23;;;;20716:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20815:1;20806:6;:10;20798:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20882:11;:19;20894:6;20882:19;;;;;;;;;;;;;;;;;;;;;;;;;20881:20;:47;;;;;20906:11;:22;20918:9;20906:22;;;;;;;;;;;;;;;;;;;;;;;;;20905:23;20881:47;20873:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21003:16;;;;;;;;;;;21000:1273;;;21053:41;21068:6;21076:9;21087:6;21053:14;:41::i;:::-;21046:48;;;;21000:1273;21152:15;:23;21168:6;21152:23;;;;;;;;;;;;;;;;;;;;;;;;;21151:24;:55;;;;;21180:15;:26;21196:9;21180:26;;;;;;;;;;;;;;;;;;;;;;;;;21179:27;21151:55;:72;;;;;21210:13;;;;;;;;;;;21151:72;21148:187;;;21262:12;;21252:6;:22;;21244:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:187;21352:28;21383:24;21401:4;21383:9;:24::i;:::-;21352:55;;21422:28;21477:23;;21453:20;:47;;21422:78;;21533:23;:44;;;;;21561:16;;;;;;;;;;;21560:17;21533:44;:69;;;;;21582:12;:20;21595:6;21582:20;;;;;;;;;;;;;;;;;;;;;;;;;21581:21;21533:69;:94;;;;;21606:21;;;;;;;;;;;21533:94;21529:165;;;21662:16;:14;:16::i;:::-;21529:165;21730:53;21752:6;21730:53;;;;;;;;;;;;;;;;;:9;:17;21740:6;21730:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;21710:9;:17;21720:6;21710:17;;;;;;;;;;;;;;;:73;;;;21800:19;21822:31;21836:6;21843:9;21822:13;:31::i;:::-;:77;;21865:34;21873:6;21881:9;21892:6;21865:7;:34::i;:::-;21822:77;;;21856:6;21822:77;21800:99;;21919:16;;;;;;;;;;;:51;;;;;21940:19;:30;21960:9;21940:30;;;;;;;;;;;;;;;;;;;;;;;;;21939:31;21919:51;21916:181;;;22040:10;;21999:37;22024:11;21999:20;22009:9;21999;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;21991:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;21916:181;22136:37;22161:11;22136:9;:20;22146:9;22136:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;22113:9;:20;22123:9;22113:20;;;;;;;;;;;;;;;:60;;;;22212:9;22195:40;;22204:6;22195:40;;;22223:11;22195:40;;;;;;:::i;:::-;;;;;;;;22257:4;22250:11;;;;;20529:1751;;;;;;:::o;1656:192::-;1742:7;1775:1;1770;:6;;1778:12;1762:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1802:9;1818:1;1814;:5;;;;:::i;:::-;1802:17;;1839:1;1832:8;;;1656:192;;;;;:::o;1512:136::-;1570:7;1597:43;1601:1;1604;1597:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1590:50;;1512:136;;;;:::o;2876:357::-;2936:4;2957:16;2984:19;3006:66;2984:88;;;;3154:7;3142:20;3130:32;;3194:11;3182:8;:23;;:42;;;;;3221:3;3209:15;;:8;:15;;3182:42;3174:51;;;;2876:357;;;:::o;2254:278::-;2340:7;2372:1;2368;:5;2375:12;2360:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2399:9;2415:1;2411;:5;;;;:::i;:::-;2399:17;;2523:1;2516:8;;;2254:278;;;;;:::o;22288:330::-;22381:4;22418:53;22440:6;22418:53;;;;;;;;;;;;;;;;;:9;:17;22428:6;22418:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;22398:9;:17;22408:6;22398:17;;;;;;;;;;;;;;;:73;;;;22505:32;22530:6;22505:9;:20;22515:9;22505:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22482:9;:20;22492:9;22482:20;;;;;;;;;;;;;;;:55;;;;22570:9;22553:35;;22562:6;22553:35;;;22581:6;22553:35;;;;;;:::i;:::-;;;;;;;;22606:4;22599:11;;22288:330;;;;;:::o;22626:1425::-;16575:4;16556:16;;:23;;;;;;;;;;;;;;;;;;22685::::1;22711:24;22729:4;22711:9;:24::i;:::-;22685:50;;22770:1;22751:15;:20;22748:32;;;22773:7;;;22748:32;22792:19;22814:23;22827:9;;22814:8;;:12;;:23;;;;:::i;:::-;22792:45;;22848:23;22874:39;22895:17;;22874:16;;:20;;:39;;;;:::i;:::-;22848:65;;22924:23;22950:39;22971:17;;22950:16;;:20;;:39;;;;:::i;:::-;22924:65;;23002:19;23024:60;23082:1;23024:53;23065:11;23024:36;23044:15;23024;:19;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;23002:82;;23095:21;23119:32;23139:11;23119:15;:19;;:32;;;;:::i;:::-;23095:56;;23164:22;23189:21;23164:46;;23221:31;23238:13;23221:16;:31::i;:::-;23263:22;23288:41;23314:14;23288:21;:25;;:41;;;;:::i;:::-;23263:66;;23342:19;23364:39;23380:22;23400:1;23380:15;:19;;:22;;;;:::i;:::-;23364:11;:15;;:39;;;;:::i;:::-;23342:61;;23424:26;23453:59;23510:1;23453:52;23493:11;23453:35;23472:15;23453:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;23424:88;;23523:26;23552:52;23592:11;23552:35;23571:15;23552:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;23523:81;;23615:26;23644:62;23687:18;23644:38;23663:18;23644:14;:18;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;23615:91;;23743:1;23722:18;:22;23719:97;;;23759:57;23780:15;;;;;;;;;;;23797:18;23759:20;:57::i;:::-;23719:97;23853:1;23832:18;:22;23829:97;;;23869:57;23890:15;;;;;;;;;;;23907:18;23869:20;:57::i;:::-;23829:97;23963:1;23942:18;:22;:41;;;;;23982:1;23968:11;:15;23942:41;23939:104;;;23998:45;24011:11;24024:18;23998:12;:45::i;:::-;23939:104;16590:1;;;;;;;;;;;;;16621:5:::0;16602:16;;:24;;;;;;;;;;;;;;;;;;22626:1425::o;25403:366::-;25484:4;25504:17;:25;25522:6;25504:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25533:17;:28;25551:9;25533:28;;;;;;;;;;;;;;;;;;;;;;;;;25504:57;25501:261;;;25585:4;25578:11;;;;25501:261;25620:12;:20;25633:6;25620:20;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;25644:12;:23;25657:9;25644:23;;;;;;;;;;;;;;;;;;;;;;;;;25620:47;25616:146;;;25691:5;25684:12;;;;25616:146;25745:5;25738:12;;25403:366;;;;;:::o;25777:724::-;25863:7;25893:14;25950:12;:20;25963:6;25950:20;;;;;;;;;;;;;;;;;;;;;;;;;25947:275;;;26017:37;26042:11;;26017:20;26028:8;;26017:6;:10;;:20;;;;:::i;:::-;:24;;:37;;;;:::i;:::-;26005:49;;25947:275;;;26092:12;:23;26105:9;26092:23;;;;;;;;;;;;;;;;;;;;;;;;;26089:133;;;26150:38;26176:11;;26150:21;26161:9;;26150:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;26138:50;;26089:133;25947:275;26258:1;26246:9;:13;26243:185;;;26307:39;26336:9;26307;:24;26325:4;26307:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26280:9;:24;26298:4;26280:24;;;;;;;;;;;;;;;:66;;;;26395:4;26370:42;;26379:6;26370:42;;;26402:9;26370:42;;;;;;:::i;:::-;;;;;;;;26243:185;26451:21;26462:9;26451:6;:10;;:21;;;;:::i;:::-;26444:28;;;25777:724;;;;;:::o;24198:666::-;24324:21;24362:1;24348:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24324:40;;24393:4;24375;24380:1;24375:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24419:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24409:4;24414:1;24409:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;24454:62;24471:4;24486:15;;;;;;;;;;;24504:11;24454:8;:62::i;:::-;24555:15;;;;;;;;;;;:66;;;24636:11;24662:1;24706:4;24733;24769:15;24555:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24821:35;24838:11;24851:4;24821:35;;;;;;;:::i;:::-;;;;;;;;24198:666;;:::o;24059:127::-;24151:9;24143:27;;:35;24171:6;24143:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24059:127;;:::o;24872:523::-;25020:62;25037:4;25052:15;;;;;;;;;;;25070:11;25020:8;:62::i;:::-;25125:15;;;;;;;;;;;:31;;;25164:9;25197:4;25217:11;25243:1;25286;25329:17;;;;;;;;;;;25361:15;25125:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24872:523;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:165::-;642:5;680:6;667:20;658:29;;696:46;736:5;696:46;:::i;:::-;648:100;;;;:::o;754:139::-;800:5;838:6;825:20;816:29;;854:33;881:5;854:33;:::i;:::-;806:87;;;;:::o;899:143::-;956:5;987:6;981:13;972:22;;1003:33;1030:5;1003:33;:::i;:::-;962:80;;;;:::o;1048:262::-;1107:6;1156:2;1144:9;1135:7;1131:23;1127:32;1124:2;;;1172:1;1169;1162:12;1124:2;1215:1;1240:53;1285:7;1276:6;1265:9;1261:22;1240:53;:::i;:::-;1230:63;;1186:117;1114:196;;;;:::o;1316:284::-;1386:6;1435:2;1423:9;1414:7;1410:23;1406:32;1403:2;;;1451:1;1448;1441:12;1403:2;1494:1;1519:64;1575:7;1566:6;1555:9;1551:22;1519:64;:::i;:::-;1509:74;;1465:128;1393:207;;;;:::o;1606:407::-;1674:6;1682;1731:2;1719:9;1710:7;1706:23;1702:32;1699:2;;;1747:1;1744;1737:12;1699:2;1790:1;1815:53;1860:7;1851:6;1840:9;1836:22;1815:53;:::i;:::-;1805:63;;1761:117;1917:2;1943:53;1988:7;1979:6;1968:9;1964:22;1943:53;:::i;:::-;1933:63;;1888:118;1689:324;;;;;:::o;2019:552::-;2096:6;2104;2112;2161:2;2149:9;2140:7;2136:23;2132:32;2129:2;;;2177:1;2174;2167:12;2129:2;2220:1;2245:53;2290:7;2281:6;2270:9;2266:22;2245:53;:::i;:::-;2235:63;;2191:117;2347:2;2373:53;2418:7;2409:6;2398:9;2394:22;2373:53;:::i;:::-;2363:63;;2318:118;2475:2;2501:53;2546:7;2537:6;2526:9;2522:22;2501:53;:::i;:::-;2491:63;;2446:118;2119:452;;;;;:::o;2577:552::-;2654:6;2662;2670;2719:2;2707:9;2698:7;2694:23;2690:32;2687:2;;;2735:1;2732;2725:12;2687:2;2778:1;2803:53;2848:7;2839:6;2828:9;2824:22;2803:53;:::i;:::-;2793:63;;2749:117;2905:2;2931:53;2976:7;2967:6;2956:9;2952:22;2931:53;:::i;:::-;2921:63;;2876:118;3033:2;3059:53;3104:7;3095:6;3084:9;3080:22;3059:53;:::i;:::-;3049:63;;3004:118;2677:452;;;;;:::o;3135:401::-;3200:6;3208;3257:2;3245:9;3236:7;3232:23;3228:32;3225:2;;;3273:1;3270;3263:12;3225:2;3316:1;3341:53;3386:7;3377:6;3366:9;3362:22;3341:53;:::i;:::-;3331:63;;3287:117;3443:2;3469:50;3511:7;3502:6;3491:9;3487:22;3469:50;:::i;:::-;3459:60;;3414:115;3215:321;;;;;:::o;3542:407::-;3610:6;3618;3667:2;3655:9;3646:7;3642:23;3638:32;3635:2;;;3683:1;3680;3673:12;3635:2;3726:1;3751:53;3796:7;3787:6;3776:9;3772:22;3751:53;:::i;:::-;3741:63;;3697:117;3853:2;3879:53;3924:7;3915:6;3904:9;3900:22;3879:53;:::i;:::-;3869:63;;3824:118;3625:324;;;;;:::o;3955:256::-;4011:6;4060:2;4048:9;4039:7;4035:23;4031:32;4028:2;;;4076:1;4073;4066:12;4028:2;4119:1;4144:50;4186:7;4177:6;4166:9;4162:22;4144:50;:::i;:::-;4134:60;;4090:114;4018:193;;;;:::o;4217:278::-;4284:6;4333:2;4321:9;4312:7;4308:23;4304:32;4301:2;;;4349:1;4346;4339:12;4301:2;4392:1;4417:61;4470:7;4461:6;4450:9;4446:22;4417:61;:::i;:::-;4407:71;;4363:125;4291:204;;;;:::o;4501:578::-;4591:6;4599;4607;4656:2;4644:9;4635:7;4631:23;4627:32;4624:2;;;4672:1;4669;4662:12;4624:2;4715:1;4740:66;4798:7;4789:6;4778:9;4774:22;4740:66;:::i;:::-;4730:76;;4686:130;4855:2;4881:53;4926:7;4917:6;4906:9;4902:22;4881:53;:::i;:::-;4871:63;;4826:118;4983:2;5009:53;5054:7;5045:6;5034:9;5030:22;5009:53;:::i;:::-;4999:63;;4954:118;4614:465;;;;;:::o;5085:262::-;5144:6;5193:2;5181:9;5172:7;5168:23;5164:32;5161:2;;;5209:1;5206;5199:12;5161:2;5252:1;5277:53;5322:7;5313:6;5302:9;5298:22;5277:53;:::i;:::-;5267:63;;5223:117;5151:196;;;;:::o;5353:552::-;5430:6;5438;5446;5495:2;5483:9;5474:7;5470:23;5466:32;5463:2;;;5511:1;5508;5501:12;5463:2;5554:1;5579:53;5624:7;5615:6;5604:9;5600:22;5579:53;:::i;:::-;5569:63;;5525:117;5681:2;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5652:118;5809:2;5835:53;5880:7;5871:6;5860:9;5856:22;5835:53;:::i;:::-;5825:63;;5780:118;5453:452;;;;;:::o;5911:596::-;5999:6;6007;6015;6064:2;6052:9;6043:7;6039:23;6035:32;6032:2;;;6080:1;6077;6070:12;6032:2;6123:1;6148:64;6204:7;6195:6;6184:9;6180:22;6148:64;:::i;:::-;6138:74;;6094:128;6261:2;6287:64;6343:7;6334:6;6323:9;6319:22;6287:64;:::i;:::-;6277:74;;6232:129;6400:2;6426:64;6482:7;6473:6;6462:9;6458:22;6426:64;:::i;:::-;6416:74;;6371:129;6022:485;;;;;:::o;6513:179::-;6582:10;6603:46;6645:3;6637:6;6603:46;:::i;:::-;6681:4;6676:3;6672:14;6658:28;;6593:99;;;;:::o;6698:108::-;6775:24;6793:5;6775:24;:::i;:::-;6770:3;6763:37;6753:53;;:::o;6812:118::-;6899:24;6917:5;6899:24;:::i;:::-;6894:3;6887:37;6877:53;;:::o;6966:732::-;7085:3;7114:54;7162:5;7114:54;:::i;:::-;7184:86;7263:6;7258:3;7184:86;:::i;:::-;7177:93;;7294:56;7344:5;7294:56;:::i;:::-;7373:7;7404:1;7389:284;7414:6;7411:1;7408:13;7389:284;;;7490:6;7484:13;7517:63;7576:3;7561:13;7517:63;:::i;:::-;7510:70;;7603:60;7656:6;7603:60;:::i;:::-;7593:70;;7449:224;7436:1;7433;7429:9;7424:14;;7389:284;;;7393:14;7689:3;7682:10;;7090:608;;;;;;;:::o;7704:109::-;7785:21;7800:5;7785:21;:::i;:::-;7780:3;7773:34;7763:50;;:::o;7819:185::-;7933:64;7991:5;7933:64;:::i;:::-;7928:3;7921:77;7911:93;;:::o;8010:147::-;8105:45;8144:5;8105:45;:::i;:::-;8100:3;8093:58;8083:74;;:::o;8163:364::-;8251:3;8279:39;8312:5;8279:39;:::i;:::-;8334:71;8398:6;8393:3;8334:71;:::i;:::-;8327:78;;8414:52;8459:6;8454:3;8447:4;8440:5;8436:16;8414:52;:::i;:::-;8491:29;8513:6;8491:29;:::i;:::-;8486:3;8482:39;8475:46;;8255:272;;;;;:::o;8533:366::-;8675:3;8696:67;8760:2;8755:3;8696:67;:::i;:::-;8689:74;;8772:93;8861:3;8772:93;:::i;:::-;8890:2;8885:3;8881:12;8874:19;;8679:220;;;:::o;8905:366::-;9047:3;9068:67;9132:2;9127:3;9068:67;:::i;:::-;9061:74;;9144:93;9233:3;9144:93;:::i;:::-;9262:2;9257:3;9253:12;9246:19;;9051:220;;;:::o;9277:366::-;9419:3;9440:67;9504:2;9499:3;9440:67;:::i;:::-;9433:74;;9516:93;9605:3;9516:93;:::i;:::-;9634:2;9629:3;9625:12;9618:19;;9423:220;;;:::o;9649:366::-;9791:3;9812:67;9876:2;9871:3;9812:67;:::i;:::-;9805:74;;9888:93;9977:3;9888:93;:::i;:::-;10006:2;10001:3;9997:12;9990:19;;9795:220;;;:::o;10021:366::-;10163:3;10184:67;10248:2;10243:3;10184:67;:::i;:::-;10177:74;;10260:93;10349:3;10260:93;:::i;:::-;10378:2;10373:3;10369:12;10362:19;;10167:220;;;:::o;10393:366::-;10535:3;10556:67;10620:2;10615:3;10556:67;:::i;:::-;10549:74;;10632:93;10721:3;10632:93;:::i;:::-;10750:2;10745:3;10741:12;10734:19;;10539:220;;;:::o;10765:366::-;10907:3;10928:67;10992:2;10987:3;10928:67;:::i;:::-;10921:74;;11004:93;11093:3;11004:93;:::i;:::-;11122:2;11117:3;11113:12;11106:19;;10911:220;;;:::o;11137:366::-;11279:3;11300:67;11364:2;11359:3;11300:67;:::i;:::-;11293:74;;11376:93;11465:3;11376:93;:::i;:::-;11494:2;11489:3;11485:12;11478:19;;11283:220;;;:::o;11509:366::-;11651:3;11672:67;11736:2;11731:3;11672:67;:::i;:::-;11665:74;;11748:93;11837:3;11748:93;:::i;:::-;11866:2;11861:3;11857:12;11850:19;;11655:220;;;:::o;11881:366::-;12023:3;12044:67;12108:2;12103:3;12044:67;:::i;:::-;12037:74;;12120:93;12209:3;12120:93;:::i;:::-;12238:2;12233:3;12229:12;12222:19;;12027:220;;;:::o;12253:366::-;12395:3;12416:67;12480:2;12475:3;12416:67;:::i;:::-;12409:74;;12492:93;12581:3;12492:93;:::i;:::-;12610:2;12605:3;12601:12;12594:19;;12399:220;;;:::o;12625:366::-;12767:3;12788:67;12852:2;12847:3;12788:67;:::i;:::-;12781:74;;12864:93;12953:3;12864:93;:::i;:::-;12982:2;12977:3;12973:12;12966:19;;12771:220;;;:::o;12997:366::-;13139:3;13160:67;13224:2;13219:3;13160:67;:::i;:::-;13153:74;;13236:93;13325:3;13236:93;:::i;:::-;13354:2;13349:3;13345:12;13338:19;;13143:220;;;:::o;13369:398::-;13528:3;13549:83;13630:1;13625:3;13549:83;:::i;:::-;13542:90;;13641:93;13730:3;13641:93;:::i;:::-;13759:1;13754:3;13750:11;13743:18;;13532:235;;;:::o;13773:366::-;13915:3;13936:67;14000:2;13995:3;13936:67;:::i;:::-;13929:74;;14012:93;14101:3;14012:93;:::i;:::-;14130:2;14125:3;14121:12;14114:19;;13919:220;;;:::o;14145:366::-;14287:3;14308:67;14372:2;14367:3;14308:67;:::i;:::-;14301:74;;14384:93;14473:3;14384:93;:::i;:::-;14502:2;14497:3;14493:12;14486:19;;14291:220;;;:::o;14517:366::-;14659:3;14680:67;14744:2;14739:3;14680:67;:::i;:::-;14673:74;;14756:93;14845:3;14756:93;:::i;:::-;14874:2;14869:3;14865:12;14858:19;;14663:220;;;:::o;14889:366::-;15031:3;15052:67;15116:2;15111:3;15052:67;:::i;:::-;15045:74;;15128:93;15217:3;15128:93;:::i;:::-;15246:2;15241:3;15237:12;15230:19;;15035:220;;;:::o;15261:366::-;15403:3;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15500:93;15589:3;15500:93;:::i;:::-;15618:2;15613:3;15609:12;15602:19;;15407:220;;;:::o;15633:118::-;15720:24;15738:5;15720:24;:::i;:::-;15715:3;15708:37;15698:53;;:::o;15757:112::-;15840:22;15856:5;15840:22;:::i;:::-;15835:3;15828:35;15818:51;;:::o;15875:379::-;16059:3;16081:147;16224:3;16081:147;:::i;:::-;16074:154;;16245:3;16238:10;;16063:191;;;:::o;16260:222::-;16353:4;16391:2;16380:9;16376:18;16368:26;;16404:71;16472:1;16461:9;16457:17;16448:6;16404:71;:::i;:::-;16358:124;;;;:::o;16488:332::-;16609:4;16647:2;16636:9;16632:18;16624:26;;16660:71;16728:1;16717:9;16713:17;16704:6;16660:71;:::i;:::-;16741:72;16809:2;16798:9;16794:18;16785:6;16741:72;:::i;:::-;16614:206;;;;;:::o;16826:332::-;16947:4;16985:2;16974:9;16970:18;16962:26;;16998:71;17066:1;17055:9;17051:17;17042:6;16998:71;:::i;:::-;17079:72;17147:2;17136:9;17132:18;17123:6;17079:72;:::i;:::-;16952:206;;;;;:::o;17164:807::-;17413:4;17451:3;17440:9;17436:19;17428:27;;17465:71;17533:1;17522:9;17518:17;17509:6;17465:71;:::i;:::-;17546:72;17614:2;17603:9;17599:18;17590:6;17546:72;:::i;:::-;17628:80;17704:2;17693:9;17689:18;17680:6;17628:80;:::i;:::-;17718;17794:2;17783:9;17779:18;17770:6;17718:80;:::i;:::-;17808:73;17876:3;17865:9;17861:19;17852:6;17808:73;:::i;:::-;17891;17959:3;17948:9;17944:19;17935:6;17891:73;:::i;:::-;17418:553;;;;;;;;;:::o;17977:210::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18115:65;18177:1;18166:9;18162:17;18153:6;18115:65;:::i;:::-;18069:118;;;;:::o;18193:276::-;18313:4;18351:2;18340:9;18336:18;18328:26;;18364:98;18459:1;18448:9;18444:17;18435:6;18364:98;:::i;:::-;18318:151;;;;:::o;18475:313::-;18588:4;18626:2;18615:9;18611:18;18603:26;;18675:9;18669:4;18665:20;18661:1;18650:9;18646:17;18639:47;18703:78;18776:4;18767:6;18703:78;:::i;:::-;18695:86;;18593:195;;;;:::o;18794:419::-;18960:4;18998:2;18987:9;18983:18;18975:26;;19047:9;19041:4;19037:20;19033:1;19022:9;19018:17;19011:47;19075:131;19201:4;19075:131;:::i;:::-;19067:139;;18965:248;;;:::o;19219:419::-;19385:4;19423:2;19412:9;19408:18;19400:26;;19472:9;19466:4;19462:20;19458:1;19447:9;19443:17;19436:47;19500:131;19626:4;19500:131;:::i;:::-;19492:139;;19390:248;;;:::o;19644:419::-;19810:4;19848:2;19837:9;19833:18;19825:26;;19897:9;19891:4;19887:20;19883:1;19872:9;19868:17;19861:47;19925:131;20051:4;19925:131;:::i;:::-;19917:139;;19815:248;;;:::o;20069:419::-;20235:4;20273:2;20262:9;20258:18;20250:26;;20322:9;20316:4;20312:20;20308:1;20297:9;20293:17;20286:47;20350:131;20476:4;20350:131;:::i;:::-;20342:139;;20240:248;;;:::o;20494:419::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20665:248;;;:::o;20919:419::-;21085:4;21123:2;21112:9;21108:18;21100:26;;21172:9;21166:4;21162:20;21158:1;21147:9;21143:17;21136:47;21200:131;21326:4;21200:131;:::i;:::-;21192:139;;21090:248;;;:::o;21344:419::-;21510:4;21548:2;21537:9;21533:18;21525:26;;21597:9;21591:4;21587:20;21583:1;21572:9;21568:17;21561:47;21625:131;21751:4;21625:131;:::i;:::-;21617:139;;21515:248;;;:::o;21769:419::-;21935:4;21973:2;21962:9;21958:18;21950:26;;22022:9;22016:4;22012:20;22008:1;21997:9;21993:17;21986:47;22050:131;22176:4;22050:131;:::i;:::-;22042:139;;21940:248;;;:::o;22194:419::-;22360:4;22398:2;22387:9;22383:18;22375:26;;22447:9;22441:4;22437:20;22433:1;22422:9;22418:17;22411:47;22475:131;22601:4;22475:131;:::i;:::-;22467:139;;22365:248;;;:::o;22619:419::-;22785:4;22823:2;22812:9;22808:18;22800:26;;22872:9;22866:4;22862:20;22858:1;22847:9;22843:17;22836:47;22900:131;23026:4;22900:131;:::i;:::-;22892:139;;22790:248;;;:::o;23044:419::-;23210:4;23248:2;23237:9;23233:18;23225:26;;23297:9;23291:4;23287:20;23283:1;23272:9;23268:17;23261:47;23325:131;23451:4;23325:131;:::i;:::-;23317:139;;23215:248;;;:::o;23469:419::-;23635:4;23673:2;23662:9;23658:18;23650:26;;23722:9;23716:4;23712:20;23708:1;23697:9;23693:17;23686:47;23750:131;23876:4;23750:131;:::i;:::-;23742:139;;23640:248;;;:::o;23894:419::-;24060:4;24098:2;24087:9;24083:18;24075:26;;24147:9;24141:4;24137:20;24133:1;24122:9;24118:17;24111:47;24175:131;24301:4;24175:131;:::i;:::-;24167:139;;24065:248;;;:::o;24319:419::-;24485:4;24523:2;24512:9;24508:18;24500:26;;24572:9;24566:4;24562:20;24558:1;24547:9;24543:17;24536:47;24600:131;24726:4;24600:131;:::i;:::-;24592:139;;24490:248;;;:::o;24744:419::-;24910:4;24948:2;24937:9;24933:18;24925:26;;24997:9;24991:4;24987:20;24983:1;24972:9;24968:17;24961:47;25025:131;25151:4;25025:131;:::i;:::-;25017:139;;24915:248;;;:::o;25169:419::-;25335:4;25373:2;25362:9;25358:18;25350:26;;25422:9;25416:4;25412:20;25408:1;25397:9;25393:17;25386:47;25450:131;25576:4;25450:131;:::i;:::-;25442:139;;25340:248;;;:::o;25594:419::-;25760:4;25798:2;25787:9;25783:18;25775:26;;25847:9;25841:4;25837:20;25833:1;25822:9;25818:17;25811:47;25875:131;26001:4;25875:131;:::i;:::-;25867:139;;25765:248;;;:::o;26019:419::-;26185:4;26223:2;26212:9;26208:18;26200:26;;26272:9;26266:4;26262:20;26258:1;26247:9;26243:17;26236:47;26300:131;26426:4;26300:131;:::i;:::-;26292:139;;26190:248;;;:::o;26444:222::-;26537:4;26575:2;26564:9;26560:18;26552:26;;26588:71;26656:1;26645:9;26641:17;26632:6;26588:71;:::i;:::-;26542:124;;;;:::o;26672:483::-;26843:4;26881:2;26870:9;26866:18;26858:26;;26894:71;26962:1;26951:9;26947:17;26938:6;26894:71;:::i;:::-;27012:9;27006:4;27002:20;26997:2;26986:9;26982:18;26975:48;27040:108;27143:4;27134:6;27040:108;:::i;:::-;27032:116;;26848:307;;;;;:::o;27161:831::-;27424:4;27462:3;27451:9;27447:19;27439:27;;27476:71;27544:1;27533:9;27529:17;27520:6;27476:71;:::i;:::-;27557:80;27633:2;27622:9;27618:18;27609:6;27557:80;:::i;:::-;27684:9;27678:4;27674:20;27669:2;27658:9;27654:18;27647:48;27712:108;27815:4;27806:6;27712:108;:::i;:::-;27704:116;;27830:72;27898:2;27887:9;27883:18;27874:6;27830:72;:::i;:::-;27912:73;27980:3;27969:9;27965:19;27956:6;27912:73;:::i;:::-;27429:563;;;;;;;;:::o;27998:214::-;28087:4;28125:2;28114:9;28110:18;28102:26;;28138:67;28202:1;28191:9;28187:17;28178:6;28138:67;:::i;:::-;28092:120;;;;:::o;28218:132::-;28285:4;28308:3;28300:11;;28338:4;28333:3;28329:14;28321:22;;28290:60;;;:::o;28356:114::-;28423:6;28457:5;28451:12;28441:22;;28430:40;;;:::o;28476:99::-;28528:6;28562:5;28556:12;28546:22;;28535:40;;;:::o;28581:113::-;28651:4;28683;28678:3;28674:14;28666:22;;28656:38;;;:::o;28700:184::-;28799:11;28833:6;28828:3;28821:19;28873:4;28868:3;28864:14;28849:29;;28811:73;;;;:::o;28890:147::-;28991:11;29028:3;29013:18;;29003:34;;;;:::o;29043:169::-;29127:11;29161:6;29156:3;29149:19;29201:4;29196:3;29192:14;29177:29;;29139:73;;;;:::o;29218:305::-;29258:3;29277:20;29295:1;29277:20;:::i;:::-;29272:25;;29311:20;29329:1;29311:20;:::i;:::-;29306:25;;29465:1;29397:66;29393:74;29390:1;29387:81;29384:2;;;29471:18;;:::i;:::-;29384:2;29515:1;29512;29508:9;29501:16;;29262:261;;;;:::o;29529:185::-;29569:1;29586:20;29604:1;29586:20;:::i;:::-;29581:25;;29620:20;29638:1;29620:20;:::i;:::-;29615:25;;29659:1;29649:2;;29664:18;;:::i;:::-;29649:2;29706:1;29703;29699:9;29694:14;;29571:143;;;;:::o;29720:348::-;29760:7;29783:20;29801:1;29783:20;:::i;:::-;29778:25;;29817:20;29835:1;29817:20;:::i;:::-;29812:25;;30005:1;29937:66;29933:74;29930:1;29927:81;29922:1;29915:9;29908:17;29904:105;29901:2;;;30012:18;;:::i;:::-;29901:2;30060:1;30057;30053:9;30042:20;;29768:300;;;;:::o;30074:191::-;30114:4;30134:20;30152:1;30134:20;:::i;:::-;30129:25;;30168:20;30186:1;30168:20;:::i;:::-;30163:25;;30207:1;30204;30201:8;30198:2;;;30212:18;;:::i;:::-;30198:2;30257:1;30254;30250:9;30242:17;;30119:146;;;;:::o;30271:96::-;30308:7;30337:24;30355:5;30337:24;:::i;:::-;30326:35;;30316:51;;;:::o;30373:90::-;30407:7;30450:5;30443:13;30436:21;30425:32;;30415:48;;;:::o;30469:109::-;30519:7;30548:24;30566:5;30548:24;:::i;:::-;30537:35;;30527:51;;;:::o;30584:126::-;30621:7;30661:42;30654:5;30650:54;30639:65;;30629:81;;;:::o;30716:77::-;30753:7;30782:5;30771:16;;30761:32;;;:::o;30799:86::-;30834:7;30874:4;30867:5;30863:16;30852:27;;30842:43;;;:::o;30891:180::-;30968:9;31001:64;31059:5;31001:64;:::i;:::-;30988:77;;30978:93;;;:::o;31077:140::-;31154:9;31187:24;31205:5;31187:24;:::i;:::-;31174:37;;31164:53;;;:::o;31223:121::-;31281:9;31314:24;31332:5;31314:24;:::i;:::-;31301:37;;31291:53;;;:::o;31350:307::-;31418:1;31428:113;31442:6;31439:1;31436:13;31428:113;;;31527:1;31522:3;31518:11;31512:18;31508:1;31503:3;31499:11;31492:39;31464:2;31461:1;31457:10;31452:15;;31428:113;;;31559:6;31556:1;31553:13;31550:2;;;31639:1;31630:6;31625:3;31621:16;31614:27;31550:2;31399:258;;;;:::o;31663:320::-;31707:6;31744:1;31738:4;31734:12;31724:22;;31791:1;31785:4;31781:12;31812:18;31802:2;;31868:4;31860:6;31856:17;31846:27;;31802:2;31930;31922:6;31919:14;31899:18;31896:38;31893:2;;;31949:18;;:::i;:::-;31893:2;31714:269;;;;:::o;31989:180::-;32037:77;32034:1;32027:88;32134:4;32131:1;32124:15;32158:4;32155:1;32148:15;32175:180;32223:77;32220:1;32213:88;32320:4;32317:1;32310:15;32344:4;32341:1;32334:15;32361:180;32409:77;32406:1;32399:88;32506:4;32503:1;32496:15;32530:4;32527:1;32520:15;32547:102;32588:6;32639:2;32635:7;32630:2;32623:5;32619:14;32615:28;32605:38;;32595:54;;;:::o;32655:222::-;32795:34;32791:1;32783:6;32779:14;32772:58;32864:5;32859:2;32851:6;32847:15;32840:30;32761:116;:::o;32883:182::-;33023:34;33019:1;33011:6;33007:14;33000:58;32989:76;:::o;33071:177::-;33211:29;33207:1;33199:6;33195:14;33188:53;33177:71;:::o;33254:225::-;33394:34;33390:1;33382:6;33378:14;33371:58;33463:8;33458:2;33450:6;33446:15;33439:33;33360:119;:::o;33485:221::-;33625:34;33621:1;33613:6;33609:14;33602:58;33694:4;33689:2;33681:6;33677:15;33670:29;33591:115;:::o;33712:177::-;33852:29;33848:1;33840:6;33836:14;33829:53;33818:71;:::o;33895:223::-;34035:34;34031:1;34023:6;34019:14;34012:58;34104:6;34099:2;34091:6;34087:15;34080:31;34001:117;:::o;34124:163::-;34264:15;34260:1;34252:6;34248:14;34241:39;34230:57;:::o;34293:227::-;34433:34;34429:1;34421:6;34417:14;34410:58;34502:10;34497:2;34489:6;34485:15;34478:35;34399:121;:::o;34526:220::-;34666:34;34662:1;34654:6;34650:14;34643:58;34735:3;34730:2;34722:6;34718:15;34711:28;34632:114;:::o;34752:182::-;34892:34;34888:1;34880:6;34876:14;34869:58;34858:76;:::o;34940:228::-;35080:34;35076:1;35068:6;35064:14;35057:58;35149:11;35144:2;35136:6;35132:15;35125:36;35046:122;:::o;35174:224::-;35314:34;35310:1;35302:6;35298:14;35291:58;35383:7;35378:2;35370:6;35366:15;35359:32;35280:118;:::o;35404:114::-;35510:8;:::o;35524:223::-;35664:34;35660:1;35652:6;35648:14;35641:58;35733:6;35728:2;35720:6;35716:15;35709:31;35630:117;:::o;35753:232::-;35893:34;35889:1;35881:6;35877:14;35870:58;35962:15;35957:2;35949:6;35945:15;35938:40;35859:126;:::o;35991:167::-;36131:19;36127:1;36119:6;36115:14;36108:43;36097:61;:::o;36164:234::-;36304:34;36300:1;36292:6;36288:14;36281:58;36373:17;36368:2;36360:6;36356:15;36349:42;36270:128;:::o;36404:170::-;36544:22;36540:1;36532:6;36528:14;36521:46;36510:64;:::o;36580:122::-;36653:24;36671:5;36653:24;:::i;:::-;36646:5;36643:35;36633:2;;36692:1;36689;36682:12;36633:2;36623:79;:::o;36708:116::-;36778:21;36793:5;36778:21;:::i;:::-;36771:5;36768:32;36758:2;;36814:1;36811;36804:12;36758:2;36748:76;:::o;36830:148::-;36916:37;36947:5;36916:37;:::i;:::-;36909:5;36906:48;36896:2;;36968:1;36965;36958:12;36896:2;36886:92;:::o;36984:122::-;37057:24;37075:5;37057:24;:::i;:::-;37050:5;37047:35;37037:2;;37096:1;37093;37086:12;37037:2;37027:79;:::o

Swarm Source

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