ETH Price: $2,638.09 (+1.83%)

Token

Shiba Onigiri (SHIBAONI🍙)
 

Overview

Max Total Supply

1,000,000,000,000,000 SHIBAONI🍙

Holders

419

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
780,942.908260977 SHIBAONI🍙

Value
$0.00
0x7576876e73265ab493a35511e3fe41b6a3e0523c
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:
ShibaOni

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-17
*/

/**
 *Submitted for verification at BscScan.com on 2021-06-17
*/

/*

 t.me/shibaoni
 Shiba Onigri
 $SHIBAONI
 
 
 ______      # ___   ___     # ________     #  _______      # ________      # ______      # ___   __      # ________     #
/_____/\     #/__/\ /__/\    #/_______/\    #/_______/\     #/_______/\     #/_____/\     #/__/\ /__/\    #/_______/\    #
\::::_\/_    #\::\ \\  \ \   #\__.::._\/    #\::: _  \ \    #\::: _  \ \    #\:::_ \ \    #\::\_\\  \ \   #\__.::._\/    #
 \:\/___/\   # \::\/_\ .\ \  #   \::\ \     # \::(_)  \/_   # \::(_)  \ \   # \:\ \ \ \   # \:. `-\  \ \  #   \::\ \     #
  \_::._\:\  #  \:: ___::\ \ #   _\::\ \__  #  \::  _  \ \  #  \:: __  \ \  #  \:\ \ \ \  #  \:. _    \ \ #   _\::\ \__  #
    /____\:\ #   \: \ \\::\ \#  /__\::\__/\ #   \::(_)  \ \ #   \:.\ \  \ \ #   \:\_\ \ \ #   \. \`-\  \ \#  /__\::\__/\ #
    \_____\/ #    \__\/ \::\/#  \________\/ #    \_______\/ #    \__\/\__\/ #    \_____\/ #    \__\/ \__\/#  \________\/ #
             ##               ##              ##               ##               ##             ##               ##              ##

 ShibaOni is built upon the fundamentals of Buyback and increasing the investor's value
 
 - v2 Contract
 
 - No devwallets | No pre-sale | No private sale
 
 - From the founders of ShibaRamen (listed on coingecko in under 48 hours)

 - Main features are
   1) 2% tax is collected and distributed to holders for HODLing
   2) 9% buyback* and marketing tax
   
   - Buyback?
   As part of Buy-Back process, contract takes care of buying back some of the tokens and burn them whenever a sell happens. In a nutshell, 98% of the time, you will not see 2 sell transactions at any time and there will never be three sell transactions continuously at any time.

*/

// SPDX-License-Identifier: Unlicensed

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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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


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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 ShibaOni is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xa8FB832AfdB227B33359Fd625f09Ef5681e2608F);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Shiba Onigiri";
    string private _symbol = unicode'SHIBAONI🍙';
    uint8 private _decimals = 9;


    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public standardDivisor = 8;
    
    uint256 public _maxTxAmount = 1000000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    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 () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(standardDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(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 swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, 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
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setStandardDivisor(uint256 divisor) external onlyOwner() {
        standardDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function enableTrading() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 2;
        _liquidityFee = 9;
        _maxTxAmount = 10000000 * 10**6 * 10**9;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setStandardDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standardDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405273a8fb832afdb227b33359fd625f09ef5681e2608f600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525069d3c21bcecceda1000000600a55600a54600019620000b191906200089f565b600019620000c09190620007f0565b600b556040518060400160405280600d81526020017f5368696261204f6e696769726900000000000000000000000000000000000000815250600d90805190602001906200011092919062000691565b506040518060400160405280600c81526020017f53484942414f4e49f09f8d990000000000000000000000000000000000000000815250600e90805190602001906200015e92919062000691565b506009600f60006101000a81548160ff021916908360ff16021790555060026010556010546011556009601255601254601355600860145569d3c21bcecceda1000000601555680ad78ebc5ac6200000601655670de0b6b3a76400006017556001601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff0219169083151502179055503480156200020057600080fd5b506000620002136200066060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460046000620002c86200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036657600080fd5b505afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000758565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040457600080fd5b505afa15801562000419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043f919062000758565b6040518363ffffffff1660e01b81526004016200045e929190620007a6565b602060405180830381600087803b1580156200047957600080fd5b505af11580156200048e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b4919062000758565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160076000620005376200066860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005f06200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620006519190620007d3565b60405180910390a3506200097e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200069f9062000869565b90600052602060002090601f016020900481019282620006c357600085556200070f565b82601f10620006de57805160ff19168380011785556200070f565b828001600101855582156200070f579182015b828111156200070e578251825591602001919060010190620006f1565b5b5090506200071e919062000722565b5090565b5b808211156200073d57600081600090555060010162000723565b5090565b600081519050620007528162000964565b92915050565b6000602082840312156200076b57600080fd5b60006200077b8482850162000741565b91505092915050565b6200078f816200082b565b82525050565b620007a0816200085f565b82525050565b6000604082019050620007bd600083018562000784565b620007cc602083018462000784565b9392505050565b6000602082019050620007ea600083018462000795565b92915050565b6000620007fd826200085f565b91506200080a836200085f565b92508282101562000820576200081f620008d7565b5b828203905092915050565b600062000838826200083f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200088257607f821691505b6020821081141562000899576200089862000935565b5b50919050565b6000620008ac826200085f565b9150620008b9836200085f565b925082620008cc57620008cb62000906565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200096f816200082b565b81146200097b57600080fd5b50565b60805160601c60a05160601c60c05160601c615ef7620009e86000396000818161172c0152612f9c015260008181610d0401528181613bd501528181613ceb01528181613d1201528181613f1d01526140a4015260008181610e0b01526140e40152615ef76000f3fe6080604052600436106102cd5760003560e01c806370a0823111610175578063a073d37f116100dc578063c49b9a8011610095578063ea2f0b371161006f578063ea2f0b3714610b05578063ec28438a14610b2e578063f0f165af14610b57578063f2fde38b14610b80576102d4565b8063c49b9a8014610a76578063dd46706414610a9f578063dd62ed3e14610ac8576102d4565b8063a073d37f14610964578063a457c2d71461098f578063a5ece941146109cc578063a69df4b5146109f7578063a9059cbb14610a0e578063bdc653ef14610a4b576102d4565b80638a8c523c1161012e5780638a8c523c1461087c5780638d74dc5c146108935780638da5cb5b146108bc5780638ee88c53146108e7578063906e9dd01461091057806395d89b4114610939576102d4565b806370a082311461076c578063715018a6146107a95780637d1db4a5146107c057806382d2a4bb146107eb57806388f8202014610814578063898ffa5914610851576102d4565b806339509351116102345780634a74bb02116101ed578063557ed1ba116101c7578063557ed1ba146106c0578063602bc62b146106eb5780636053a0e3146107165780636bc87c3a14610741576102d4565b80634a74bb021461062f57806352390c021461065a5780635342acb414610683576102d4565b8063395093511461050d5780633b124fe71461054a5780633bd5d17314610575578063437823ec1461059e5780634549b039146105c757806349bd5a5e14610604576102d4565b806323b872dd1161028657806323b872dd146103eb57806327c8f8351461042857806329370cc6146104535780632d8381191461047c578063313ce567146104b95780633685d419146104e4576102d4565b8063061c82d0146102d957806306fdde0314610302578063095ea7b31461032d57806313114a9d1461036a5780631694505e1461039557806318160ddd146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190614f54565b610ba9565b005b34801561030e57600080fd5b50610317610c48565b60405161032491906153c8565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190614eef565b610cda565b6040516103619190615346565b60405180910390f35b34801561037657600080fd5b5061037f610cf8565b60405161038c91906155ea565b60405180910390f35b3480156103a157600080fd5b506103aa610d02565b6040516103b79190615361565b60405180910390f35b3480156103cc57600080fd5b506103d5610d26565b6040516103e291906155ea565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190614ea0565b610d30565b60405161041f9190615346565b60405180910390f35b34801561043457600080fd5b5061043d610e09565b60405161044a9190615310565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190614f2b565b610e2d565b005b34801561048857600080fd5b506104a3600480360381019061049e9190614f54565b610f16565b6040516104b091906155ea565b60405180910390f35b3480156104c557600080fd5b506104ce610f84565b6040516104db919061568f565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614e12565b610f9b565b005b34801561051957600080fd5b50610534600480360381019061052f9190614eef565b611382565b6040516105419190615346565b60405180910390f35b34801561055657600080fd5b5061055f611435565b60405161056c91906155ea565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614f54565b61143b565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190614e12565b6115b6565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190614f7d565b6116a6565b6040516105fb91906155ea565b60405180910390f35b34801561061057600080fd5b5061061961172a565b6040516106269190615310565b60405180910390f35b34801561063b57600080fd5b5061064461174e565b6040516106519190615346565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190614e12565b611761565b005b34801561068f57600080fd5b506106aa60048036038101906106a59190614e12565b611a15565b6040516106b79190615346565b60405180910390f35b3480156106cc57600080fd5b506106d5611a6b565b6040516106e291906155ea565b60405180910390f35b3480156106f757600080fd5b50610700611a73565b60405161070d91906155ea565b60405180910390f35b34801561072257600080fd5b5061072b611a7d565b6040516107389190615346565b60405180910390f35b34801561074d57600080fd5b50610756611a90565b60405161076391906155ea565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614e12565b611a96565b6040516107a091906155ea565b60405180910390f35b3480156107b557600080fd5b506107be611b81565b005b3480156107cc57600080fd5b506107d5611cd4565b6040516107e291906155ea565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190614f54565b611cda565b005b34801561082057600080fd5b5061083b60048036038101906108369190614e12565b611d8c565b6040516108489190615346565b60405180910390f35b34801561085d57600080fd5b50610866611de2565b60405161087391906155ea565b60405180910390f35b34801561088857600080fd5b50610891611de8565b005b34801561089f57600080fd5b506108ba60048036038101906108b59190614f54565b611eaa565b005b3480156108c857600080fd5b506108d1611f49565b6040516108de9190615310565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614f54565b611f72565b005b34801561091c57600080fd5b5061093760048036038101906109329190614e12565b612011565b005b34801561094557600080fd5b5061094e6120ea565b60405161095b91906153c8565b60405180910390f35b34801561097057600080fd5b5061097961217c565b60405161098691906155ea565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190614eef565b612186565b6040516109c39190615346565b60405180910390f35b3480156109d857600080fd5b506109e1612253565b6040516109ee919061532b565b60405180910390f35b348015610a0357600080fd5b50610a0c612279565b005b348015610a1a57600080fd5b50610a356004803603810190610a309190614eef565b61244d565b604051610a429190615346565b60405180910390f35b348015610a5757600080fd5b50610a6061246b565b604051610a6d91906155ea565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614f2b565b612475565b005b348015610aab57600080fd5b50610ac66004803603810190610ac19190614f54565b61255e565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614e64565b612725565b604051610afc91906155ea565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b279190614e12565b6127ac565b005b348015610b3a57600080fd5b50610b556004803603810190610b509190614f54565b61289c565b005b348015610b6357600080fd5b50610b7e6004803603810190610b799190614f54565b61293b565b005b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614e12565b6129da565b005b610bb1612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359061550a565b60405180910390fd5b8060108190555050565b6060600d8054610c57906158e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c83906158e4565b8015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b5050505050905090565b6000610cee610ce7612b9c565b8484612ba4565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610d3d848484612d6f565b610dfe84610d49612b9c565b610df985604051806060016040528060288152602001615e7560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610daf612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131259092919063ffffffff16565b612ba4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e35612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061550a565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610f0b9190615346565b60405180910390a150565b6000600b54821115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061540a565b60405180910390fd5b6000610f67613189565b9050610f7c81846131b490919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610fa3612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061550a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b39061548a565b60405180910390fd5b60005b60098054905081101561137e578173ffffffffffffffffffffffffffffffffffffffff166009828154811061111d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561136b576009600160098054905061117891906157e0565b815481106111af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611331577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561137e565b808061137690615916565b9150506110bf565b5050565b600061142b61138f612b9c565b8461142685600660006113a0612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b612ba4565b6001905092915050565b60105481565b6000611445612b9c565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb906155aa565b60405180910390fd5b60006114df8361325c565b5050505050905061153881600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061159081600b546132b890919063ffffffff16565b600b819055506115ab83600c546131fe90919063ffffffff16565b600c81905550505050565b6115be612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061550a565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e4906154aa565b60405180910390fd5b8161170d5760006116fd8461325c565b5050505050905080915050611724565b60006117188461325c565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b611769612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed9061550a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a9061548a565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195757611913600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f16565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b3157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b7c565b611b79600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f16565b90505b919050565b611b89612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d9061550a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611ce2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d669061550a565b60405180910390fd5b670de0b6b3a764000081611d839190615786565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611df0612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e749061550a565b60405180910390fd5b611e876001612475565b6002601081905550600960128190555069021e19e0c9bab2400000601581905550565b611eb2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f369061550a565b60405180910390fd5b8060148190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f7a612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe9061550a565b60405180910390fd5b8060128190555050565b612019612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d9061550a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e80546120f9906158e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612125906158e4565b80156121725780601f1061214757610100808354040283529160200191612172565b820191906000526020600020905b81548152906001019060200180831161215557829003601f168201915b5050505050905090565b6000601654905090565b6000612249612193612b9c565b8461224485604051806060016040528060258152602001615e9d60259139600660006121bd612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131259092919063ffffffff16565b612ba4565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612300906155ca565b60405180910390fd5b600254421161234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123449061558a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061246161245a612b9c565b8484612d6f565b6001905092915050565b6000601754905090565b61247d612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125019061550a565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125539190615346565b60405180910390a150565b612566612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea9061550a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426126a191906156ff565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6127b4612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128389061550a565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6128a4612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129289061550a565b60405180910390fd5b8060158190555050565b612943612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c79061550a565b60405180910390fd5b8060168190555050565b6129e2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061550a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061542a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b9061556a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b9061544a565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d6291906155ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd69061554a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e46906153ea565b60405180910390fd5b60008111612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e899061552a565b60405180910390fd5b612e9a611f49565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f085750612ed8611f49565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f5357601554811115612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f49906154ca565b60405180910390fd5b5b6000612f5e30611a96565b905060006016548210159050601860009054906101000a900460ff16158015612f935750601860019054906101000a900460ff165b8015612fea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b1561306057801561300457601654915061300382613302565b5b6000479050601860029054906101000a900460ff16801561302c5750670de0b6b3a764000081115b1561305e576017548111156130415760175490505b61305d6130586064836131b490919063ffffffff16565b6133b6565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131075750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311157600090505b61311d86868684613402565b505050505050565b600083831115829061316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316491906153c8565b60405180910390fd5b506000838561317c91906157e0565b9050809150509392505050565b6000806000613196613659565b915091506131ad81836131b490919063ffffffff16565b9250505090565b60006131f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a4565b905092915050565b600080828461320d91906156ff565b905083811015613252576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132499061546a565b60405180910390fd5b8091505092915050565b60008060008060008060008060006132738a613a07565b92509250925060008060006132918d868661328c613189565b613a61565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006132fa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613125565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061332b82613aea565b600061334082476132b890919063ffffffff16565b9050613396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613391601454613383601254866131b490919063ffffffff16565b613de190919063ffffffff16565b613e5c565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156133e4576133e381613ea7565b5b6000601860006101000a81548160ff02191690831515021790555050565b806134105761340f6141a6565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c8576134c38484846141e9565b613645565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356b5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135805761357b848484614449565b613644565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136225750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613637576136328484846146a9565b613643565b61364284848461499e565b5b5b5b8061365357613652614b69565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613967578260046000600984815481106136b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137cd5750816005600060098481548110613765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137e457600b54600a54945094505050506139a0565b61389a6004600060098481548110613825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132b890919063ffffffff16565b925061395260056000600984815481106138dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132b890919063ffffffff16565b9150808061395f90615916565b91505061366d565b5061397f600a54600b546131b490919063ffffffff16565b82101561399757600b54600a549350935050506139a0565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e291906153c8565b60405180910390fd5b50600083856139fa9190615755565b9050809150509392505050565b600080600080613a1685614b7d565b90506000613a2386614bae565b90506000613a4c82613a3e858a6132b890919063ffffffff16565b6132b890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613a7a8589613de190919063ffffffff16565b90506000613a918689613de190919063ffffffff16565b90506000613aa88789613de190919063ffffffff16565b90506000613ad182613ac385876132b890919063ffffffff16565b6132b890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613b5b5781602001602082028036833780820191505090505b5090503081600081518110613b99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3957600080fd5b505afa158015613c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c719190614e3b565b81600181518110613cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d10307f000000000000000000000000000000000000000000000000000000000000000084612ba4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d72959493929190615635565b600060405180830381600087803b158015613d8c57600080fd5b505af1158015613da0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613dd5929190615605565b60405180910390a15050565b600080831415613df45760009050613e56565b60008284613e029190615786565b9050828482613e119190615755565b14613e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e48906154ea565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ea2573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f185781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8157600080fd5b505afa158015613f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb99190614e3b565b81600081518110613ff3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110614068577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061411861012c426131fe90919063ffffffff16565b6040518663ffffffff1660e01b8152600401614137949392919061537c565b6000604051808303818588803b15801561415057600080fd5b505af1158015614164573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161419a929190615605565b60405180910390a15050565b60006010541480156141ba57506000601254145b156141c4576141e7565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806141fb8761325c565b95509550955095509550955061425987600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142ee86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061438385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143cf81614bdf565b6143d98483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161443691906155ea565b60405180910390a3505050505050505050565b60008060008060008061445b8761325c565b9550955095509550955095506144b986600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061454e83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145e385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061462f81614bdf565b6146398483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161469691906155ea565b60405180910390a3505050505050505050565b6000806000806000806146bb8761325c565b95509550955095509550955061471987600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ae86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061484383600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148d885600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492481614bdf565b61492e8483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161498b91906155ea565b60405180910390a3505050505050505050565b6000806000806000806149b08761325c565b955095509550955095509550614a0e86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aa385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aef81614bdf565b614af98483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614b5691906155ea565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614ba76064614b9960105485613de190919063ffffffff16565b6131b490919063ffffffff16565b9050919050565b6000614bd86064614bca60125485613de190919063ffffffff16565b6131b490919063ffffffff16565b9050919050565b6000614be9613189565b90506000614c008284613de190919063ffffffff16565b9050614c5481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614d7f57614d3b83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614d9982600b546132b890919063ffffffff16565b600b81905550614db481600c546131fe90919063ffffffff16565b600c819055505050565b600081359050614dcd81615e2f565b92915050565b600081519050614de281615e2f565b92915050565b600081359050614df781615e46565b92915050565b600081359050614e0c81615e5d565b92915050565b600060208284031215614e2457600080fd5b6000614e3284828501614dbe565b91505092915050565b600060208284031215614e4d57600080fd5b6000614e5b84828501614dd3565b91505092915050565b60008060408385031215614e7757600080fd5b6000614e8585828601614dbe565b9250506020614e9685828601614dbe565b9150509250929050565b600080600060608486031215614eb557600080fd5b6000614ec386828701614dbe565b9350506020614ed486828701614dbe565b9250506040614ee586828701614dfd565b9150509250925092565b60008060408385031215614f0257600080fd5b6000614f1085828601614dbe565b9250506020614f2185828601614dfd565b9150509250929050565b600060208284031215614f3d57600080fd5b6000614f4b84828501614de8565b91505092915050565b600060208284031215614f6657600080fd5b6000614f7484828501614dfd565b91505092915050565b60008060408385031215614f9057600080fd5b6000614f9e85828601614dfd565b9250506020614faf85828601614de8565b9150509250929050565b6000614fc58383614fe0565b60208301905092915050565b614fda81615826565b82525050565b614fe981615814565b82525050565b614ff881615814565b82525050565b6000615009826156ba565b61501381856156dd565b935061501e836156aa565b8060005b8381101561504f5781516150368882614fb9565b9750615041836156d0565b925050600181019050615022565b5085935050505092915050565b61506581615838565b82525050565b6150748161587b565b82525050565b6150838161589f565b82525050565b6000615094826156c5565b61509e81856156ee565b93506150ae8185602086016158b1565b6150b7816159ec565b840191505092915050565b60006150cf6023836156ee565b91506150da826159fd565b604082019050919050565b60006150f2602a836156ee565b91506150fd82615a4c565b604082019050919050565b60006151156026836156ee565b915061512082615a9b565b604082019050919050565b60006151386022836156ee565b915061514382615aea565b604082019050919050565b600061515b601b836156ee565b915061516682615b39565b602082019050919050565b600061517e601b836156ee565b915061518982615b62565b602082019050919050565b60006151a1601f836156ee565b91506151ac82615b8b565b602082019050919050565b60006151c46028836156ee565b91506151cf82615bb4565b604082019050919050565b60006151e76021836156ee565b91506151f282615c03565b604082019050919050565b600061520a6020836156ee565b915061521582615c52565b602082019050919050565b600061522d6029836156ee565b915061523882615c7b565b604082019050919050565b60006152506025836156ee565b915061525b82615cca565b604082019050919050565b60006152736024836156ee565b915061527e82615d19565b604082019050919050565b6000615296601f836156ee565b91506152a182615d68565b602082019050919050565b60006152b9602c836156ee565b91506152c482615d91565b604082019050919050565b60006152dc6023836156ee565b91506152e782615de0565b604082019050919050565b6152fb81615864565b82525050565b61530a8161586e565b82525050565b60006020820190506153256000830184614fef565b92915050565b60006020820190506153406000830184614fd1565b92915050565b600060208201905061535b600083018461505c565b92915050565b6000602082019050615376600083018461506b565b92915050565b6000608082019050615391600083018761507a565b81810360208301526153a38186614ffe565b90506153b26040830185614fef565b6153bf60608301846152f2565b95945050505050565b600060208201905081810360008301526153e28184615089565b905092915050565b60006020820190508181036000830152615403816150c2565b9050919050565b60006020820190508181036000830152615423816150e5565b9050919050565b6000602082019050818103600083015261544381615108565b9050919050565b600060208201905081810360008301526154638161512b565b9050919050565b600060208201905081810360008301526154838161514e565b9050919050565b600060208201905081810360008301526154a381615171565b9050919050565b600060208201905081810360008301526154c381615194565b9050919050565b600060208201905081810360008301526154e3816151b7565b9050919050565b60006020820190508181036000830152615503816151da565b9050919050565b60006020820190508181036000830152615523816151fd565b9050919050565b6000602082019050818103600083015261554381615220565b9050919050565b6000602082019050818103600083015261556381615243565b9050919050565b6000602082019050818103600083015261558381615266565b9050919050565b600060208201905081810360008301526155a381615289565b9050919050565b600060208201905081810360008301526155c3816152ac565b9050919050565b600060208201905081810360008301526155e3816152cf565b9050919050565b60006020820190506155ff60008301846152f2565b92915050565b600060408201905061561a60008301856152f2565b818103602083015261562c8184614ffe565b90509392505050565b600060a08201905061564a60008301886152f2565b615657602083018761507a565b81810360408301526156698186614ffe565b90506156786060830185614fef565b61568560808301846152f2565b9695505050505050565b60006020820190506156a46000830184615301565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061570a82615864565b915061571583615864565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561574a5761574961595f565b5b828201905092915050565b600061576082615864565b915061576b83615864565b92508261577b5761577a61598e565b5b828204905092915050565b600061579182615864565b915061579c83615864565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157d5576157d461595f565b5b828202905092915050565b60006157eb82615864565b91506157f683615864565b9250828210156158095761580861595f565b5b828203905092915050565b600061581f82615844565b9050919050565b600061583182615844565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006158868261588d565b9050919050565b600061589882615844565b9050919050565b60006158aa82615864565b9050919050565b60005b838110156158cf5780820151818401526020810190506158b4565b838111156158de576000848401525b50505050565b600060028204905060018216806158fc57607f821691505b602082108114156159105761590f6159bd565b5b50919050565b600061592182615864565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156159545761595361595f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615e3881615814565b8114615e4357600080fd5b50565b615e4f81615838565b8114615e5a57600080fd5b50565b615e6681615864565b8114615e7157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e906cb46614e8800d3b3aaeea99f0fdf291d92a82b3c1913aa5caffc53269c064736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806370a0823111610175578063a073d37f116100dc578063c49b9a8011610095578063ea2f0b371161006f578063ea2f0b3714610b05578063ec28438a14610b2e578063f0f165af14610b57578063f2fde38b14610b80576102d4565b8063c49b9a8014610a76578063dd46706414610a9f578063dd62ed3e14610ac8576102d4565b8063a073d37f14610964578063a457c2d71461098f578063a5ece941146109cc578063a69df4b5146109f7578063a9059cbb14610a0e578063bdc653ef14610a4b576102d4565b80638a8c523c1161012e5780638a8c523c1461087c5780638d74dc5c146108935780638da5cb5b146108bc5780638ee88c53146108e7578063906e9dd01461091057806395d89b4114610939576102d4565b806370a082311461076c578063715018a6146107a95780637d1db4a5146107c057806382d2a4bb146107eb57806388f8202014610814578063898ffa5914610851576102d4565b806339509351116102345780634a74bb02116101ed578063557ed1ba116101c7578063557ed1ba146106c0578063602bc62b146106eb5780636053a0e3146107165780636bc87c3a14610741576102d4565b80634a74bb021461062f57806352390c021461065a5780635342acb414610683576102d4565b8063395093511461050d5780633b124fe71461054a5780633bd5d17314610575578063437823ec1461059e5780634549b039146105c757806349bd5a5e14610604576102d4565b806323b872dd1161028657806323b872dd146103eb57806327c8f8351461042857806329370cc6146104535780632d8381191461047c578063313ce567146104b95780633685d419146104e4576102d4565b8063061c82d0146102d957806306fdde0314610302578063095ea7b31461032d57806313114a9d1461036a5780631694505e1461039557806318160ddd146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190614f54565b610ba9565b005b34801561030e57600080fd5b50610317610c48565b60405161032491906153c8565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190614eef565b610cda565b6040516103619190615346565b60405180910390f35b34801561037657600080fd5b5061037f610cf8565b60405161038c91906155ea565b60405180910390f35b3480156103a157600080fd5b506103aa610d02565b6040516103b79190615361565b60405180910390f35b3480156103cc57600080fd5b506103d5610d26565b6040516103e291906155ea565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190614ea0565b610d30565b60405161041f9190615346565b60405180910390f35b34801561043457600080fd5b5061043d610e09565b60405161044a9190615310565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190614f2b565b610e2d565b005b34801561048857600080fd5b506104a3600480360381019061049e9190614f54565b610f16565b6040516104b091906155ea565b60405180910390f35b3480156104c557600080fd5b506104ce610f84565b6040516104db919061568f565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614e12565b610f9b565b005b34801561051957600080fd5b50610534600480360381019061052f9190614eef565b611382565b6040516105419190615346565b60405180910390f35b34801561055657600080fd5b5061055f611435565b60405161056c91906155ea565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614f54565b61143b565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190614e12565b6115b6565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190614f7d565b6116a6565b6040516105fb91906155ea565b60405180910390f35b34801561061057600080fd5b5061061961172a565b6040516106269190615310565b60405180910390f35b34801561063b57600080fd5b5061064461174e565b6040516106519190615346565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190614e12565b611761565b005b34801561068f57600080fd5b506106aa60048036038101906106a59190614e12565b611a15565b6040516106b79190615346565b60405180910390f35b3480156106cc57600080fd5b506106d5611a6b565b6040516106e291906155ea565b60405180910390f35b3480156106f757600080fd5b50610700611a73565b60405161070d91906155ea565b60405180910390f35b34801561072257600080fd5b5061072b611a7d565b6040516107389190615346565b60405180910390f35b34801561074d57600080fd5b50610756611a90565b60405161076391906155ea565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614e12565b611a96565b6040516107a091906155ea565b60405180910390f35b3480156107b557600080fd5b506107be611b81565b005b3480156107cc57600080fd5b506107d5611cd4565b6040516107e291906155ea565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190614f54565b611cda565b005b34801561082057600080fd5b5061083b60048036038101906108369190614e12565b611d8c565b6040516108489190615346565b60405180910390f35b34801561085d57600080fd5b50610866611de2565b60405161087391906155ea565b60405180910390f35b34801561088857600080fd5b50610891611de8565b005b34801561089f57600080fd5b506108ba60048036038101906108b59190614f54565b611eaa565b005b3480156108c857600080fd5b506108d1611f49565b6040516108de9190615310565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190614f54565b611f72565b005b34801561091c57600080fd5b5061093760048036038101906109329190614e12565b612011565b005b34801561094557600080fd5b5061094e6120ea565b60405161095b91906153c8565b60405180910390f35b34801561097057600080fd5b5061097961217c565b60405161098691906155ea565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b19190614eef565b612186565b6040516109c39190615346565b60405180910390f35b3480156109d857600080fd5b506109e1612253565b6040516109ee919061532b565b60405180910390f35b348015610a0357600080fd5b50610a0c612279565b005b348015610a1a57600080fd5b50610a356004803603810190610a309190614eef565b61244d565b604051610a429190615346565b60405180910390f35b348015610a5757600080fd5b50610a6061246b565b604051610a6d91906155ea565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614f2b565b612475565b005b348015610aab57600080fd5b50610ac66004803603810190610ac19190614f54565b61255e565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614e64565b612725565b604051610afc91906155ea565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b279190614e12565b6127ac565b005b348015610b3a57600080fd5b50610b556004803603810190610b509190614f54565b61289c565b005b348015610b6357600080fd5b50610b7e6004803603810190610b799190614f54565b61293b565b005b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614e12565b6129da565b005b610bb1612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359061550a565b60405180910390fd5b8060108190555050565b6060600d8054610c57906158e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c83906158e4565b8015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b5050505050905090565b6000610cee610ce7612b9c565b8484612ba4565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610d3d848484612d6f565b610dfe84610d49612b9c565b610df985604051806060016040528060288152602001615e7560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610daf612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131259092919063ffffffff16565b612ba4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610e35612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061550a565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610f0b9190615346565b60405180910390a150565b6000600b54821115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061540a565b60405180910390fd5b6000610f67613189565b9050610f7c81846131b490919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610fa3612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061550a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b39061548a565b60405180910390fd5b60005b60098054905081101561137e578173ffffffffffffffffffffffffffffffffffffffff166009828154811061111d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561136b576009600160098054905061117891906157e0565b815481106111af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611331577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561137e565b808061137690615916565b9150506110bf565b5050565b600061142b61138f612b9c565b8461142685600660006113a0612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b612ba4565b6001905092915050565b60105481565b6000611445612b9c565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb906155aa565b60405180910390fd5b60006114df8361325c565b5050505050905061153881600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061159081600b546132b890919063ffffffff16565b600b819055506115ab83600c546131fe90919063ffffffff16565b600c81905550505050565b6115be612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061550a565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e4906154aa565b60405180910390fd5b8161170d5760006116fd8461325c565b5050505050905080915050611724565b60006117188461325c565b50505050915050809150505b92915050565b7f0000000000000000000000004b4e8855dc4992ac6710a094b4b33acdbeb19f5c81565b601860019054906101000a900460ff1681565b611769612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed9061550a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a9061548a565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195757611913600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f16565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b3157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b7c565b611b79600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f16565b90505b919050565b611b89612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d9061550a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611ce2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d669061550a565b60405180910390fd5b670de0b6b3a764000081611d839190615786565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611df0612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e749061550a565b60405180910390fd5b611e876001612475565b6002601081905550600960128190555069021e19e0c9bab2400000601581905550565b611eb2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f369061550a565b60405180910390fd5b8060148190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f7a612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe9061550a565b60405180910390fd5b8060128190555050565b612019612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d9061550a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e80546120f9906158e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612125906158e4565b80156121725780601f1061214757610100808354040283529160200191612172565b820191906000526020600020905b81548152906001019060200180831161215557829003601f168201915b5050505050905090565b6000601654905090565b6000612249612193612b9c565b8461224485604051806060016040528060258152602001615e9d60259139600660006121bd612b9c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131259092919063ffffffff16565b612ba4565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612300906155ca565b60405180910390fd5b600254421161234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123449061558a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061246161245a612b9c565b8484612d6f565b6001905092915050565b6000601754905090565b61247d612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125019061550a565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125539190615346565b60405180910390a150565b612566612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea9061550a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426126a191906156ff565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6127b4612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128389061550a565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6128a4612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129289061550a565b60405180910390fd5b8060158190555050565b612943612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c79061550a565b60405180910390fd5b8060168190555050565b6129e2612b9c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061550a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061542a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b9061556a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b9061544a565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d6291906155ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd69061554a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e46906153ea565b60405180910390fd5b60008111612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e899061552a565b60405180910390fd5b612e9a611f49565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f085750612ed8611f49565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f5357601554811115612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f49906154ca565b60405180910390fd5b5b6000612f5e30611a96565b905060006016548210159050601860009054906101000a900460ff16158015612f935750601860019054906101000a900460ff165b8015612fea57507f0000000000000000000000004b4e8855dc4992ac6710a094b4b33acdbeb19f5c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b1561306057801561300457601654915061300382613302565b5b6000479050601860029054906101000a900460ff16801561302c5750670de0b6b3a764000081115b1561305e576017548111156130415760175490505b61305d6130586064836131b490919063ffffffff16565b6133b6565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131075750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311157600090505b61311d86868684613402565b505050505050565b600083831115829061316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316491906153c8565b60405180910390fd5b506000838561317c91906157e0565b9050809150509392505050565b6000806000613196613659565b915091506131ad81836131b490919063ffffffff16565b9250505090565b60006131f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a4565b905092915050565b600080828461320d91906156ff565b905083811015613252576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132499061546a565b60405180910390fd5b8091505092915050565b60008060008060008060008060006132738a613a07565b92509250925060008060006132918d868661328c613189565b613a61565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006132fa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613125565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061332b82613aea565b600061334082476132b890919063ffffffff16565b9050613396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613391601454613383601254866131b490919063ffffffff16565b613de190919063ffffffff16565b613e5c565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156133e4576133e381613ea7565b5b6000601860006101000a81548160ff02191690831515021790555050565b806134105761340f6141a6565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c8576134c38484846141e9565b613645565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356b5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135805761357b848484614449565b613644565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136225750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613637576136328484846146a9565b613643565b61364284848461499e565b5b5b5b8061365357613652614b69565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613967578260046000600984815481106136b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137cd5750816005600060098481548110613765577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137e457600b54600a54945094505050506139a0565b61389a6004600060098481548110613825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132b890919063ffffffff16565b925061395260056000600984815481106138dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132b890919063ffffffff16565b9150808061395f90615916565b91505061366d565b5061397f600a54600b546131b490919063ffffffff16565b82101561399757600b54600a549350935050506139a0565b81819350935050505b9091565b600080831182906139eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e291906153c8565b60405180910390fd5b50600083856139fa9190615755565b9050809150509392505050565b600080600080613a1685614b7d565b90506000613a2386614bae565b90506000613a4c82613a3e858a6132b890919063ffffffff16565b6132b890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613a7a8589613de190919063ffffffff16565b90506000613a918689613de190919063ffffffff16565b90506000613aa88789613de190919063ffffffff16565b90506000613ad182613ac385876132b890919063ffffffff16565b6132b890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613b5b5781602001602082028036833780820191505090505b5090503081600081518110613b99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3957600080fd5b505afa158015613c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c719190614e3b565b81600181518110613cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d10307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ba4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d72959493929190615635565b600060405180830381600087803b158015613d8c57600080fd5b505af1158015613da0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613dd5929190615605565b60405180910390a15050565b600080831415613df45760009050613e56565b60008284613e029190615786565b9050828482613e119190615755565b14613e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e48906154ea565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ea2573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f185781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8157600080fd5b505afa158015613f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb99190614e3b565b81600081518110613ff3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110614068577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61411861012c426131fe90919063ffffffff16565b6040518663ffffffff1660e01b8152600401614137949392919061537c565b6000604051808303818588803b15801561415057600080fd5b505af1158015614164573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161419a929190615605565b60405180910390a15050565b60006010541480156141ba57506000601254145b156141c4576141e7565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806141fb8761325c565b95509550955095509550955061425987600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142ee86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061438385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143cf81614bdf565b6143d98483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161443691906155ea565b60405180910390a3505050505050505050565b60008060008060008061445b8761325c565b9550955095509550955095506144b986600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061454e83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145e385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061462f81614bdf565b6146398483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161469691906155ea565b60405180910390a3505050505050505050565b6000806000806000806146bb8761325c565b95509550955095509550955061471987600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ae86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061484383600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148d885600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492481614bdf565b61492e8483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161498b91906155ea565b60405180910390a3505050505050505050565b6000806000806000806149b08761325c565b955095509550955095509550614a0e86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132b890919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aa385600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aef81614bdf565b614af98483614d84565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614b5691906155ea565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614ba76064614b9960105485613de190919063ffffffff16565b6131b490919063ffffffff16565b9050919050565b6000614bd86064614bca60125485613de190919063ffffffff16565b6131b490919063ffffffff16565b9050919050565b6000614be9613189565b90506000614c008284613de190919063ffffffff16565b9050614c5481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614d7f57614d3b83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fe90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614d9982600b546132b890919063ffffffff16565b600b81905550614db481600c546131fe90919063ffffffff16565b600c819055505050565b600081359050614dcd81615e2f565b92915050565b600081519050614de281615e2f565b92915050565b600081359050614df781615e46565b92915050565b600081359050614e0c81615e5d565b92915050565b600060208284031215614e2457600080fd5b6000614e3284828501614dbe565b91505092915050565b600060208284031215614e4d57600080fd5b6000614e5b84828501614dd3565b91505092915050565b60008060408385031215614e7757600080fd5b6000614e8585828601614dbe565b9250506020614e9685828601614dbe565b9150509250929050565b600080600060608486031215614eb557600080fd5b6000614ec386828701614dbe565b9350506020614ed486828701614dbe565b9250506040614ee586828701614dfd565b9150509250925092565b60008060408385031215614f0257600080fd5b6000614f1085828601614dbe565b9250506020614f2185828601614dfd565b9150509250929050565b600060208284031215614f3d57600080fd5b6000614f4b84828501614de8565b91505092915050565b600060208284031215614f6657600080fd5b6000614f7484828501614dfd565b91505092915050565b60008060408385031215614f9057600080fd5b6000614f9e85828601614dfd565b9250506020614faf85828601614de8565b9150509250929050565b6000614fc58383614fe0565b60208301905092915050565b614fda81615826565b82525050565b614fe981615814565b82525050565b614ff881615814565b82525050565b6000615009826156ba565b61501381856156dd565b935061501e836156aa565b8060005b8381101561504f5781516150368882614fb9565b9750615041836156d0565b925050600181019050615022565b5085935050505092915050565b61506581615838565b82525050565b6150748161587b565b82525050565b6150838161589f565b82525050565b6000615094826156c5565b61509e81856156ee565b93506150ae8185602086016158b1565b6150b7816159ec565b840191505092915050565b60006150cf6023836156ee565b91506150da826159fd565b604082019050919050565b60006150f2602a836156ee565b91506150fd82615a4c565b604082019050919050565b60006151156026836156ee565b915061512082615a9b565b604082019050919050565b60006151386022836156ee565b915061514382615aea565b604082019050919050565b600061515b601b836156ee565b915061516682615b39565b602082019050919050565b600061517e601b836156ee565b915061518982615b62565b602082019050919050565b60006151a1601f836156ee565b91506151ac82615b8b565b602082019050919050565b60006151c46028836156ee565b91506151cf82615bb4565b604082019050919050565b60006151e76021836156ee565b91506151f282615c03565b604082019050919050565b600061520a6020836156ee565b915061521582615c52565b602082019050919050565b600061522d6029836156ee565b915061523882615c7b565b604082019050919050565b60006152506025836156ee565b915061525b82615cca565b604082019050919050565b60006152736024836156ee565b915061527e82615d19565b604082019050919050565b6000615296601f836156ee565b91506152a182615d68565b602082019050919050565b60006152b9602c836156ee565b91506152c482615d91565b604082019050919050565b60006152dc6023836156ee565b91506152e782615de0565b604082019050919050565b6152fb81615864565b82525050565b61530a8161586e565b82525050565b60006020820190506153256000830184614fef565b92915050565b60006020820190506153406000830184614fd1565b92915050565b600060208201905061535b600083018461505c565b92915050565b6000602082019050615376600083018461506b565b92915050565b6000608082019050615391600083018761507a565b81810360208301526153a38186614ffe565b90506153b26040830185614fef565b6153bf60608301846152f2565b95945050505050565b600060208201905081810360008301526153e28184615089565b905092915050565b60006020820190508181036000830152615403816150c2565b9050919050565b60006020820190508181036000830152615423816150e5565b9050919050565b6000602082019050818103600083015261544381615108565b9050919050565b600060208201905081810360008301526154638161512b565b9050919050565b600060208201905081810360008301526154838161514e565b9050919050565b600060208201905081810360008301526154a381615171565b9050919050565b600060208201905081810360008301526154c381615194565b9050919050565b600060208201905081810360008301526154e3816151b7565b9050919050565b60006020820190508181036000830152615503816151da565b9050919050565b60006020820190508181036000830152615523816151fd565b9050919050565b6000602082019050818103600083015261554381615220565b9050919050565b6000602082019050818103600083015261556381615243565b9050919050565b6000602082019050818103600083015261558381615266565b9050919050565b600060208201905081810360008301526155a381615289565b9050919050565b600060208201905081810360008301526155c3816152ac565b9050919050565b600060208201905081810360008301526155e3816152cf565b9050919050565b60006020820190506155ff60008301846152f2565b92915050565b600060408201905061561a60008301856152f2565b818103602083015261562c8184614ffe565b90509392505050565b600060a08201905061564a60008301886152f2565b615657602083018761507a565b81810360408301526156698186614ffe565b90506156786060830185614fef565b61568560808301846152f2565b9695505050505050565b60006020820190506156a46000830184615301565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061570a82615864565b915061571583615864565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561574a5761574961595f565b5b828201905092915050565b600061576082615864565b915061576b83615864565b92508261577b5761577a61598e565b5b828204905092915050565b600061579182615864565b915061579c83615864565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157d5576157d461595f565b5b828202905092915050565b60006157eb82615864565b91506157f683615864565b9250828210156158095761580861595f565b5b828203905092915050565b600061581f82615844565b9050919050565b600061583182615844565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006158868261588d565b9050919050565b600061589882615844565b9050919050565b60006158aa82615864565b9050919050565b60005b838110156158cf5780820151818401526020810190506158b4565b838111156158de576000848401525b50505050565b600060028204905060018216806158fc57607f821691505b602082108114156159105761590f6159bd565b5b50919050565b600061592182615864565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156159545761595361595f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615e3881615814565b8114615e4357600080fd5b50565b615e4f81615838565b8114615e5a57600080fd5b50565b615e6681615864565b8114615e7157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e906cb46614e8800d3b3aaeea99f0fdf291d92a82b3c1913aa5caffc53269c064736f6c63430008040033

Deployed Bytecode Sourcemap

16962:19744:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34975:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19767:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20679:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21800:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18370:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20044:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20848:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17186:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36112:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22984:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19953:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23588:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21169:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17941:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22151:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34730:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22540:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18428:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18507:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23245:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34595:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8352:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8250;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18554:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20147:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7842:148;;;;;;;;;;;;;:::i;:::-;;18180:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35639:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21672:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18133:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36274:193;;;;;;;;;;;;;:::i;:::-;;35342:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7617:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35085:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35780:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19858:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21899:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17086:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8688:305;;;;;;;;;;;;;:::i;:::-;;20353:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22031:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35929:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8450:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20528:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34853:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35219:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35460:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7998:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34975:98;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35059:6:::1;35049:7;:16;;;;34975:98:::0;:::o;19767:83::-;19804:13;19837:5;19830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19767:83;:::o;20679:161::-;20754:4;20771:39;20780:12;:10;:12::i;:::-;20794:7;20803:6;20771:8;:39::i;:::-;20828:4;20821:11;;20679:161;;;;:::o;21800:87::-;21842:7;21869:10;;21862:17;;21800:87;:::o;18370:51::-;;;:::o;20044:95::-;20097:7;20124;;20117:14;;20044:95;:::o;20848:313::-;20946:4;20963:36;20973:6;20981:9;20992:6;20963:9;:36::i;:::-;21010:121;21019:6;21027:12;:10;:12::i;:::-;21041:89;21079:6;21041:89;;;;;;;;;;;;;;;;;:11;:19;21053:6;21041:19;;;;;;;;;;;;;;;:33;21061:12;:10;:12::i;:::-;21041:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21010:8;:121::i;:::-;21149:4;21142:11;;20848:313;;;;;:::o;17186:81::-;;;:::o;36112:150::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36199:8:::1;36182:14;;:25;;;;;;;;;;;;;;;;;;36223:31;36245:8;36223:31;;;;;;:::i;:::-;;;;;;;;36112:150:::0;:::o;22984:253::-;23050:7;23089;;23078;:18;;23070:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23154:19;23177:10;:8;:10::i;:::-;23154:33;;23205:24;23217:11;23205:7;:11;;:24;;;;:::i;:::-;23198:31;;;22984:253;;;:::o;19953:83::-;19994:5;20019:9;;;;;;;;;;;20012:16;;19953:83;:::o;23588:479::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23670:11:::1;:20;23682:7;23670:20;;;;;;;;;;;;;;;;;;;;;;;;;23662:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23738:9;23733:327;23757:9;:16;;;;23753:1;:20;23733:327;;;23815:7;23799:23;;:9;23809:1;23799:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23795:254;;;23858:9;23887:1;23868:9;:16;;;;:20;;;;:::i;:::-;23858:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23843:9;23853:1;23843:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23927:1;23908:7;:16;23916:7;23908:16;;;;;;;;;;;;;;;:20;;;;23970:5;23947:11;:20;23959:7;23947:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23994:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24028:5;;23795:254;23775:3;;;;;:::i;:::-;;;;23733:327;;;;23588:479:::0;:::o;21169:218::-;21257:4;21274:83;21283:12;:10;:12::i;:::-;21297:7;21306:50;21345:10;21306:11;:25;21318:12;:10;:12::i;:::-;21306:25;;;;;;;;;;;;;;;:34;21332:7;21306:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21274:8;:83::i;:::-;21375:4;21368:11;;21169:218;;;;:::o;17941:26::-;;;;:::o;22151:377::-;22203:14;22220:12;:10;:12::i;:::-;22203:29;;22252:11;:19;22264:6;22252:19;;;;;;;;;;;;;;;;;;;;;;;;;22251:20;22243:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22332:15;22356:19;22367:7;22356:10;:19::i;:::-;22331:44;;;;;;;22404:28;22424:7;22404;:15;22412:6;22404:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22386:7;:15;22394:6;22386:15;;;;;;;;;;;;;;;:46;;;;22453:20;22465:7;22453;;:11;;:20;;;;:::i;:::-;22443:7;:30;;;;22497:23;22512:7;22497:10;;:14;;:23;;;;:::i;:::-;22484:10;:36;;;;22151:377;;;:::o;34730:111::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34829:4:::1;34799:18;:27;34818:7;34799:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34730:111:::0;:::o;22540:436::-;22630:7;22669;;22658;:18;;22650:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22728:17;22723:246;;22763:15;22787:19;22798:7;22787:10;:19::i;:::-;22762:44;;;;;;;22828:7;22821:14;;;;;22723:246;22870:23;22901:19;22912:7;22901:10;:19::i;:::-;22868:52;;;;;;;22942:15;22935:22;;;22540:436;;;;;:::o;18428:38::-;;;:::o;18507:40::-;;;;;;;;;;;;;:::o;23245:335::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23330:11:::1;:20;23342:7;23330:20;;;;;;;;;;;;;;;;;;;;;;;;;23329:21;23321:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23415:1;23396:7;:16;23404:7;23396:16;;;;;;;;;;;;;;;;:20;23393:108;;;23452:37;23472:7;:16;23480:7;23472:16;;;;;;;;;;;;;;;;23452:19;:37::i;:::-;23433:7;:16;23441:7;23433:16;;;;;;;;;;;;;;;:56;;;;23393:108;23534:4;23511:11;:20;23523:7;23511:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23549:9;23564:7;23549:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23245:335:::0;:::o;34595:123::-;34659:4;34683:18;:27;34702:7;34683:27;;;;;;;;;;;;;;;;;;;;;;;;;34676:34;;34595:123;;;:::o;8352:90::-;8392:7;8419:15;8412:22;;8352:90;:::o;8250:::-;8296:7;8323:9;;8316:16;;8250:90;:::o;18554:33::-;;;;;;;;;;;;;:::o;18028:32::-;;;;:::o;20147:198::-;20213:7;20237:11;:20;20249:7;20237:20;;;;;;;;;;;;;;;;;;;;;;;;;20233:49;;;20266:7;:16;20274:7;20266:16;;;;;;;;;;;;;;;;20259:23;;;;20233:49;20300:37;20320:7;:16;20328:7;20320:16;;;;;;;;;;;;;;;;20300:19;:37::i;:::-;20293:44;;20147:198;;;;:::o;7842:148::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7949:1:::1;7912:40;;7933:6;::::0;::::1;;;;;;;;7912:40;;;;;;;;;;;;7980:1;7963:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7842:148::o:0;18180:56::-;;;;:::o;35639:133::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35758:6:::1;35743:12;:21;;;;:::i;:::-;35723:17;:41;;;;35639:133:::0;:::o;21672:120::-;21740:4;21764:11;:20;21776:7;21764:20;;;;;;;;;;;;;;;;;;;;;;;;;21757:27;;21672:120;;;:::o;18133:34::-;;;;:::o;36274:193::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36329:30:::1;36354:4;36329:24;:30::i;:::-;36380:1;36370:7;:11;;;;36408:1;36392:13;:17;;;;36435:24;36420:12;:39;;;;36274:193::o:0;35342:110::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35437:7:::1;35419:15;:25;;;;35342:110:::0;:::o;7617:79::-;7655:7;7682:6;;;;;;;;;;;7675:13;;7617:79;:::o;35085:122::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35187:12:::1;35171:13;:28;;;;35085:122:::0;:::o;35780:141::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35895:17:::1;35868:16;;:45;;;;;;;;;;;;;;;;;;35780:141:::0;:::o;19858:87::-;19897:13;19930:7;19923:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19858:87;:::o;21899:120::-;21961:7;21988:23;;21981:30;;21899:120;:::o;21395:269::-;21488:4;21505:129;21514:12;:10;:12::i;:::-;21528:7;21537:96;21576:15;21537:96;;;;;;;;;;;;;;;;;:11;:25;21549:12;:10;:12::i;:::-;21537:25;;;;;;;;;;;;;;;:34;21563:7;21537:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21505:8;:129::i;:::-;21652:4;21645:11;;21395:269;;;;:::o;17086:93::-;;;;;;;;;;;;;:::o;8688:305::-;8758:10;8740:28;;:14;;;;;;;;;;;:28;;;8732:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8845:9;;8827:15;:27;8819:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8936:14;;;;;;;;;;;8907:44;;8928:6;;;;;;;;;;8907:44;;;;;;;;;;;;8971:14;;;;;;;;;;;8962:6;;:23;;;;;;;;;;;;;;;;;;8688:305::o;20353:167::-;20431:4;20448:42;20458:12;:10;:12::i;:::-;20472:9;20483:6;20448:9;:42::i;:::-;20508:4;20501:11;;20353:167;;;;:::o;22031:108::-;22087:7;22114:17;;22107:24;;22031:108;:::o;35929:171::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36030:8:::1;36006:21;;:32;;;;;;;;;;;;;;;;;;36054:38;36083:8;36054:38;;;;;;:::i;:::-;;;;;;;;35929:171:::0;:::o;8450:226::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8531:6:::1;::::0;::::1;;;;;;;;8514:14;;:23;;;;;;;;;;;;;;;;;;8565:1;8548:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8608:4;8590:15;:22;;;;:::i;:::-;8578:9;:34;;;;8665:1;8628:40;;8649:6;::::0;::::1;;;;;;;;8628:40;;;;;;;;;;;;8450:226:::0;:::o;20528:143::-;20609:7;20636:11;:18;20648:5;20636:18;;;;;;;;;;;;;;;:27;20655:7;20636:27;;;;;;;;;;;;;;;;20629:34;;20528:143;;;;:::o;34853:110::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34950:5:::1;34920:18;:27;34939:7;34920:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34853:110:::0;:::o;35219:111::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35311:11:::1;35296:12;:26;;;;35219:111:::0;:::o;35460:166::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35594:24:::1;35568:23;:50;;;;35460:166:::0;:::o;7998:244::-;7761:12;:10;:12::i;:::-;7751:22;;:6;;;;;;;;;;:22;;;7743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8107:1:::1;8087:22;;:8;:22;;;;8079:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8197:8;8168:38;;8189:6;::::0;::::1;;;;;;;;8168:38;;;;;;;;;;;;8226:8;8217:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7998:244:::0;:::o;1905:115::-;1958:15;2001:10;1986:26;;1905:115;:::o;24075:337::-;24185:1;24168:19;;:5;:19;;;;24160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24266:1;24247:21;;:7;:21;;;;24239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24350:6;24320:11;:18;24332:5;24320:18;;;;;;;;;;;;;;;:27;24339:7;24320:27;;;;;;;;;;;;;;;:36;;;;24388:7;24372:32;;24381:5;24372:32;;;24397:6;24372:32;;;;;;:::i;:::-;;;;;;;;24075:337;;;:::o;24420:1547::-;24558:1;24542:18;;:4;:18;;;;24534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24635:1;24621:16;;:2;:16;;;;24613:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24705:1;24696:6;:10;24688:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24774:7;:5;:7::i;:::-;24766:15;;:4;:15;;;;:32;;;;;24791:7;:5;:7::i;:::-;24785:13;;:2;:13;;;;24766:32;24763:139;;;24833:12;;24823:6;:22;;24815:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24763:139;24914:28;24945:24;24963:4;24945:9;:24::i;:::-;24914:55;;24980:28;25035:23;;25011:20;:47;;24980:78;;25084:16;;;;;;;;;;;25083:17;:42;;;;;25104:21;;;;;;;;;;;25083:42;:65;;;;;25135:13;25129:19;;:2;:19;;;25083:65;25079:582;;;25169:23;25165:165;;;25236:23;;25213:46;;25278:32;25289:20;25278:10;:32::i;:::-;25165:165;25341:15;25359:21;25341:39;;25399:14;;;;;;;;;;;:47;;;;;25435:10;25417:7;:29;25399:47;25395:255;;;25499:17;;25489:7;:27;25485:81;;;25549:17;;25539:27;;25485:81;25603:31;25617:16;25629:3;25617:7;:11;;:16;;;;:::i;:::-;25603:13;:31::i;:::-;25395:255;25079:582;;25681:12;25696:4;25681:19;;25808:18;:24;25827:4;25808:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25836:18;:22;25855:2;25836:22;;;;;;;;;;;;;;;;;;;;;;;;;25808:50;25805:96;;;25884:5;25874:15;;25805:96;25921:38;25936:4;25941:2;25944:6;25951:7;25921:14;:38::i;:::-;24420:1547;;;;;;:::o;3316:192::-;3402:7;3435:1;3430;:6;;3438:12;3422:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3462:9;3478:1;3474;:5;;;;:::i;:::-;3462:17;;3499:1;3492:8;;;3316:192;;;;;:::o;32745:163::-;32786:7;32807:15;32824;32843:19;:17;:19::i;:::-;32806:56;;;;32880:20;32892:7;32880;:11;;:20;;;;:::i;:::-;32873:27;;;;32745:163;:::o;3776:132::-;3834:7;3861:39;3865:1;3868;3861:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3854:46;;3776:132;;;;:::o;2983:181::-;3041:7;3061:9;3077:1;3073;:5;;;;:::i;:::-;3061:17;;3102:1;3097;:6;;3089:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3155:1;3148:8;;;2983:181;;;;:::o;31543:419::-;31602:7;31611;31620;31629;31638;31647;31668:23;31693:12;31707:18;31729:20;31741:7;31729:11;:20::i;:::-;31667:82;;;;;;31761:15;31778:23;31803:12;31819:50;31831:7;31840:4;31846:10;31858;:8;:10::i;:::-;31819:11;:50::i;:::-;31760:109;;;;;;31888:7;31897:15;31914:4;31920:15;31937:4;31943:10;31880:74;;;;;;;;;;;;;;;;;;31543:419;;;;;;;:::o;3172:136::-;3230:7;3257:43;3261:1;3264;3257:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3250:50;;3172:136;;;;:::o;25975:432::-;19141:4;19122:16;;:23;;;;;;;;;;;;;;;;;;26065:22:::1;26090:21;26065:46;;26122:38;26139:20;26122:16;:38::i;:::-;26171:26;26200:41;26226:14;26200:21;:25;;:41;;;;:::i;:::-;26171:70;;26291:98;26312:16;;;;;;;;;;;26330:58;26372:15;;26330:37;26353:13;;26330:18;:22;;:37;;;;:::i;:::-;:41;;:58;;;;:::i;:::-;26291:20;:98::i;:::-;19156:1;;19187:5:::0;19168:16;;:24;;;;;;;;;;;;;;;;;;25975:432;:::o;26421:135::-;19141:4;19122:16;;:23;;;;;;;;;;;;;;;;;;26501:1:::1;26492:6;:10;26488:61;;;26516:24;26533:6;26516:16;:24::i;:::-;26488:61;19187:5:::0;19168:16;;:24;;;;;;;;;;;;;;;;;;26421:135;:::o;28357:704::-;28468:7;28464:40;;28490:14;:12;:14::i;:::-;28464:40;28529:11;:19;28541:6;28529:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28553:11;:22;28565:9;28553:22;;;;;;;;;;;;;;;;;;;;;;;;;28552:23;28529:46;28525:467;;;28592:48;28614:6;28622:9;28633:6;28592:21;:48::i;:::-;28525:467;;;28663:11;:19;28675:6;28663:19;;;;;;;;;;;;;;;;;;;;;;;;;28662:20;:46;;;;;28686:11;:22;28698:9;28686:22;;;;;;;;;;;;;;;;;;;;;;;;;28662:46;28658:334;;;28725:46;28745:6;28753:9;28764:6;28725:19;:46::i;:::-;28658:334;;;28793:11;:19;28805:6;28793:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28816:11;:22;28828:9;28816:22;;;;;;;;;;;;;;;;;;;;;;;;;28793:45;28789:203;;;28855:48;28877:6;28885:9;28896:6;28855:21;:48::i;:::-;28789:203;;;28936:44;28954:6;28962:9;28973:6;28936:17;:44::i;:::-;28789:203;28658:334;28525:467;29016:7;29012:41;;29038:15;:13;:15::i;:::-;29012:41;28357:704;;;;:::o;32916:561::-;32966:7;32975;32995:15;33013:7;;32995:25;;33031:15;33049:7;;33031:25;;33078:9;33073:289;33097:9;:16;;;;33093:1;:20;33073:289;;;33163:7;33139;:21;33147:9;33157:1;33147:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33139:21;;;;;;;;;;;;;;;;:31;:66;;;;33198:7;33174;:21;33182:9;33192:1;33182:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33174:21;;;;;;;;;;;;;;;;:31;33139:66;33135:97;;;33215:7;;33224;;33207:25;;;;;;;;;33135:97;33257:34;33269:7;:21;33277:9;33287:1;33277:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33269:21;;;;;;;;;;;;;;;;33257:7;:11;;:34;;;;:::i;:::-;33247:44;;33316:34;33328:7;:21;33336:9;33346:1;33336:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33328:21;;;;;;;;;;;;;;;;33316:7;:11;;:34;;;;:::i;:::-;33306:44;;33115:3;;;;;:::i;:::-;;;;33073:289;;;;33386:20;33398:7;;33386;;:11;;:20;;;;:::i;:::-;33376:7;:30;33372:61;;;33416:7;;33425;;33408:25;;;;;;;;33372:61;33452:7;33461;33444:25;;;;;;32916:561;;;:::o;3916:278::-;4002:7;4034:1;4030;:5;4037:12;4022:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4061:9;4077:1;4073;:5;;;;:::i;:::-;4061:17;;4185:1;4178:8;;;3916:278;;;;;:::o;31970:330::-;32030:7;32039;32048;32068:12;32083:24;32099:7;32083:15;:24::i;:::-;32068:39;;32118:18;32139:30;32161:7;32139:21;:30::i;:::-;32118:51;;32180:23;32206:33;32228:10;32206:17;32218:4;32206:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32180:59;;32258:15;32275:4;32281:10;32250:42;;;;;;;;;31970:330;;;;;:::o;32308:429::-;32423:7;32432;32441;32461:15;32479:24;32491:11;32479:7;:11;;:24;;;;:::i;:::-;32461:42;;32514:12;32529:21;32538:11;32529:4;:8;;:21;;;;:::i;:::-;32514:36;;32561:18;32582:27;32597:11;32582:10;:14;;:27;;;;:::i;:::-;32561:48;;32620:23;32646:33;32668:10;32646:17;32658:4;32646:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32620:59;;32698:7;32707:15;32724:4;32690:39;;;;;;;;;;32308:429;;;;;;;;:::o;26568:666::-;26694:21;26732:1;26718:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26694:40;;26763:4;26745;26750:1;26745:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26789:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26779:4;26784:1;26779:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26824:62;26841:4;26856:15;26874:11;26824:8;:62::i;:::-;26925:15;:66;;;27006:11;27032:1;27076:4;27103;27139:15;26925:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27191:35;27208:11;27221:4;27191:35;;;;;;;:::i;:::-;;;;;;;;26568:666;;:::o;3516:250::-;3574:7;3603:1;3598;:6;3594:47;;;3628:1;3621:8;;;;3594:47;3653:9;3669:1;3665;:5;;;;:::i;:::-;3653:17;;3698:1;3693;3689;:5;;;;:::i;:::-;:10;3681:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3757:1;3750:8;;;3516:250;;;;;:::o;36479:126::-;36571:9;:18;;:26;36590:6;36571:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36479:126;;:::o;27246:578::-;27367:21;27405:1;27391:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27367:40;;27428:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27418:4;27423:1;27418:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;27479:4;27461;27466:1;27461:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27521:15;:66;;;27595:6;27617:1;27664:4;27683:11;27725:24;27745:3;27725:15;:19;;:24;;;;:::i;:::-;27521:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27786:30;27803:6;27811:4;27786:30;;;;;;;:::i;:::-;;;;;;;;27246:578;;:::o;34200:250::-;34257:1;34246:7;;:12;:34;;;;;34279:1;34262:13;;:18;34246:34;34243:46;;;34282:7;;34243:46;34327:7;;34309:15;:25;;;;34369:13;;34345:21;:37;;;;34413:1;34403:7;:11;;;;34441:1;34425:13;:17;;;;34200:250;:::o;30170:563::-;30273:15;30290:23;30315:12;30329:23;30354:12;30368:18;30390:19;30401:7;30390:10;:19::i;:::-;30272:137;;;;;;;;;;;;30435:28;30455:7;30435;:15;30443:6;30435:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30417:7;:15;30425:6;30417:15;;;;;;;;;;;;;;;:46;;;;30492:28;30512:7;30492;:15;30500:6;30492:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30474:7;:15;30482:6;30474:15;;;;;;;;;;;;;;;:46;;;;30552:39;30575:15;30552:7;:18;30560:9;30552:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30531:7;:18;30539:9;30531:18;;;;;;;;;;;;;;;:60;;;;30605:26;30620:10;30605:14;:26::i;:::-;30642:23;30654:4;30660;30642:11;:23::i;:::-;30698:9;30681:44;;30690:6;30681:44;;;30709:15;30681:44;;;;;;:::i;:::-;;;;;;;;30170:563;;;;;;;;;:::o;29579:583::-;29680:15;29697:23;29722:12;29736:23;29761:12;29775:18;29797:19;29808:7;29797:10;:19::i;:::-;29679:137;;;;;;;;;;;;29842:28;29862:7;29842;:15;29850:6;29842:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29824:7;:15;29832:6;29824:15;;;;;;;;;;;;;;;:46;;;;29902:39;29925:15;29902:7;:18;29910:9;29902:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29881:7;:18;29889:9;29881:18;;;;;;;;;;;;;;;:60;;;;29973:39;29996:15;29973:7;:18;29981:9;29973:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29952:7;:18;29960:9;29952:18;;;;;;;;;;;;;;;:60;;;;30034:26;30049:10;30034:14;:26::i;:::-;30071:23;30083:4;30089;30071:11;:23::i;:::-;30127:9;30110:44;;30119:6;30110:44;;;30138:15;30110:44;;;;;;:::i;:::-;;;;;;;;29579:583;;;;;;;;;:::o;30741:639::-;30844:15;30861:23;30886:12;30900:23;30925:12;30939:18;30961:19;30972:7;30961:10;:19::i;:::-;30843:137;;;;;;;;;;;;31006:28;31026:7;31006;:15;31014:6;31006:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30988:7;:15;30996:6;30988:15;;;;;;;;;;;;;;;:46;;;;31063:28;31083:7;31063;:15;31071:6;31063:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31045:7;:15;31053:6;31045:15;;;;;;;;;;;;;;;:46;;;;31123:39;31146:15;31123:7;:18;31131:9;31123:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31102:7;:18;31110:9;31102:18;;;;;;;;;;;;;;;:60;;;;31194:39;31217:15;31194:7;:18;31202:9;31194:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31173:7;:18;31181:9;31173:18;;;;;;;;;;;;;;;:60;;;;31252:26;31267:10;31252:14;:26::i;:::-;31289:23;31301:4;31307;31289:11;:23::i;:::-;31345:9;31328:44;;31337:6;31328:44;;;31356:15;31328:44;;;;;;:::i;:::-;;;;;;;;30741:639;;;;;;;;;:::o;29069:502::-;29168:15;29185:23;29210:12;29224:23;29249:12;29263:18;29285:19;29296:7;29285:10;:19::i;:::-;29167:137;;;;;;;;;;;;29333:28;29353:7;29333;:15;29341:6;29333:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29315:7;:15;29323:6;29315:15;;;;;;;;;;;;;;;:46;;;;29393:39;29416:15;29393:7;:18;29401:9;29393:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29372:7;:18;29380:9;29372:18;;;;;;;;;;;;;;;:60;;;;29443:26;29458:10;29443:14;:26::i;:::-;29480:23;29492:4;29498;29480:11;:23::i;:::-;29536:9;29519:44;;29528:6;29519:44;;;29547:15;29519:44;;;;;;:::i;:::-;;;;;;;;29069:502;;;;;;;;;:::o;34462:125::-;34516:15;;34506:7;:25;;;;34558:21;;34542:13;:37;;;;34462:125::o;33856:154::-;33920:7;33947:55;33986:5;33947:20;33959:7;;33947;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;33940:62;;33856:154;;;:::o;34022:166::-;34092:7;34119:61;34164:5;34119:26;34131:13;;34119:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;34112:68;;34022:166;;;:::o;33489:355::-;33552:19;33575:10;:8;:10::i;:::-;33552:33;;33596:18;33617:27;33632:11;33617:10;:14;;:27;;;;:::i;:::-;33596:48;;33680:38;33707:10;33680:7;:22;33696:4;33680:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33655:7;:22;33671:4;33655:22;;;;;;;;;;;;;;;:63;;;;33732:11;:26;33752:4;33732:26;;;;;;;;;;;;;;;;;;;;;;;;;33729:107;;;33798:38;33825:10;33798:7;:22;33814:4;33798:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33773:7;:22;33789:4;33773:22;;;;;;;;;;;;;;;:63;;;;33729:107;33489:355;;;:::o;31388:147::-;31466:17;31478:4;31466:7;;:11;;:17;;;;:::i;:::-;31456:7;:27;;;;31507:20;31522:4;31507:10;;:14;;:20;;;;:::i;:::-;31494:10;:33;;;;31388:147;;:::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:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;2182:6;2190;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:256::-;2583:6;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:50;2758:7;2749:6;2738:9;2734:22;2716:50;:::i;:::-;2706:60;;2662:114;2590:193;;;;:::o;2789:262::-;2848:6;2897:2;2885:9;2876:7;2872:23;2868:32;2865:2;;;2913:1;2910;2903:12;2865:2;2956:1;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2927:117;2855:196;;;;:::o;3057:401::-;3122:6;3130;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3365:2;3391:50;3433:7;3424:6;3413:9;3409:22;3391:50;:::i;:::-;3381:60;;3336:115;3137:321;;;;;:::o;3464:179::-;3533:10;3554:46;3596:3;3588:6;3554:46;:::i;:::-;3632:4;3627:3;3623:14;3609:28;;3544:99;;;;:::o;3649:142::-;3752:32;3778:5;3752:32;:::i;:::-;3747:3;3740:45;3730:61;;:::o;3797:108::-;3874:24;3892:5;3874:24;:::i;:::-;3869:3;3862:37;3852:53;;:::o;3911:118::-;3998:24;4016:5;3998:24;:::i;:::-;3993:3;3986:37;3976:53;;:::o;4065:732::-;4184:3;4213:54;4261:5;4213:54;:::i;:::-;4283:86;4362:6;4357:3;4283:86;:::i;:::-;4276:93;;4393:56;4443:5;4393:56;:::i;:::-;4472:7;4503:1;4488:284;4513:6;4510:1;4507:13;4488:284;;;4589:6;4583:13;4616:63;4675:3;4660:13;4616:63;:::i;:::-;4609:70;;4702:60;4755:6;4702:60;:::i;:::-;4692:70;;4548:224;4535:1;4532;4528:9;4523:14;;4488:284;;;4492:14;4788:3;4781:10;;4189:608;;;;;;;:::o;4803:109::-;4884:21;4899:5;4884:21;:::i;:::-;4879:3;4872:34;4862:50;;:::o;4918:185::-;5032:64;5090:5;5032:64;:::i;:::-;5027:3;5020:77;5010:93;;:::o;5109:147::-;5204:45;5243:5;5204:45;:::i;:::-;5199:3;5192:58;5182:74;;:::o;5262:364::-;5350:3;5378:39;5411:5;5378:39;:::i;:::-;5433:71;5497:6;5492:3;5433:71;:::i;:::-;5426:78;;5513:52;5558:6;5553:3;5546:4;5539:5;5535:16;5513:52;:::i;:::-;5590:29;5612:6;5590:29;:::i;:::-;5585:3;5581:39;5574:46;;5354:272;;;;;:::o;5632:366::-;5774:3;5795:67;5859:2;5854:3;5795:67;:::i;:::-;5788:74;;5871:93;5960:3;5871:93;:::i;:::-;5989:2;5984:3;5980:12;5973:19;;5778:220;;;:::o;6004:366::-;6146:3;6167:67;6231:2;6226:3;6167:67;:::i;:::-;6160:74;;6243:93;6332:3;6243:93;:::i;:::-;6361:2;6356:3;6352:12;6345:19;;6150:220;;;:::o;6376:366::-;6518:3;6539:67;6603:2;6598:3;6539:67;:::i;:::-;6532:74;;6615:93;6704:3;6615:93;:::i;:::-;6733:2;6728:3;6724:12;6717:19;;6522:220;;;:::o;6748:366::-;6890:3;6911:67;6975:2;6970:3;6911:67;:::i;:::-;6904:74;;6987:93;7076:3;6987:93;:::i;:::-;7105:2;7100:3;7096:12;7089:19;;6894:220;;;:::o;7120:366::-;7262:3;7283:67;7347:2;7342:3;7283:67;:::i;:::-;7276:74;;7359:93;7448:3;7359:93;:::i;:::-;7477:2;7472:3;7468:12;7461:19;;7266:220;;;:::o;7492:366::-;7634:3;7655:67;7719:2;7714:3;7655:67;:::i;:::-;7648:74;;7731:93;7820:3;7731:93;:::i;:::-;7849:2;7844:3;7840:12;7833:19;;7638:220;;;:::o;7864:366::-;8006:3;8027:67;8091:2;8086:3;8027:67;:::i;:::-;8020:74;;8103:93;8192:3;8103:93;:::i;:::-;8221:2;8216:3;8212:12;8205:19;;8010:220;;;:::o;8236:366::-;8378:3;8399:67;8463:2;8458:3;8399:67;:::i;:::-;8392:74;;8475:93;8564:3;8475:93;:::i;:::-;8593:2;8588:3;8584:12;8577:19;;8382:220;;;:::o;8608:366::-;8750:3;8771:67;8835:2;8830:3;8771:67;:::i;:::-;8764:74;;8847:93;8936:3;8847:93;:::i;:::-;8965:2;8960:3;8956:12;8949:19;;8754:220;;;:::o;8980:366::-;9122:3;9143:67;9207:2;9202:3;9143:67;:::i;:::-;9136:74;;9219:93;9308:3;9219:93;:::i;:::-;9337:2;9332:3;9328:12;9321:19;;9126:220;;;:::o;9352:366::-;9494:3;9515:67;9579:2;9574:3;9515:67;:::i;:::-;9508:74;;9591:93;9680:3;9591:93;:::i;:::-;9709:2;9704:3;9700:12;9693:19;;9498:220;;;:::o;9724:366::-;9866:3;9887:67;9951:2;9946:3;9887:67;:::i;:::-;9880:74;;9963:93;10052:3;9963:93;:::i;:::-;10081:2;10076:3;10072:12;10065:19;;9870:220;;;:::o;10096:366::-;10238:3;10259:67;10323:2;10318:3;10259:67;:::i;:::-;10252:74;;10335:93;10424:3;10335:93;:::i;:::-;10453:2;10448:3;10444:12;10437:19;;10242:220;;;:::o;10468:366::-;10610:3;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10707:93;10796:3;10707:93;:::i;:::-;10825:2;10820:3;10816:12;10809:19;;10614:220;;;:::o;10840:366::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10986:220;;;:::o;11212:366::-;11354:3;11375:67;11439:2;11434:3;11375:67;:::i;:::-;11368:74;;11451:93;11540:3;11451:93;:::i;:::-;11569:2;11564:3;11560:12;11553:19;;11358:220;;;:::o;11584:118::-;11671:24;11689:5;11671:24;:::i;:::-;11666:3;11659:37;11649:53;;:::o;11708:112::-;11791:22;11807:5;11791:22;:::i;:::-;11786:3;11779:35;11769:51;;:::o;11826:222::-;11919:4;11957:2;11946:9;11942:18;11934:26;;11970:71;12038:1;12027:9;12023:17;12014:6;11970:71;:::i;:::-;11924:124;;;;:::o;12054:254::-;12163:4;12201:2;12190:9;12186:18;12178:26;;12214:87;12298:1;12287:9;12283:17;12274:6;12214:87;:::i;:::-;12168:140;;;;:::o;12314:210::-;12401:4;12439:2;12428:9;12424:18;12416:26;;12452:65;12514:1;12503:9;12499:17;12490:6;12452:65;:::i;:::-;12406:118;;;;:::o;12530:276::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:98;12796:1;12785:9;12781:17;12772:6;12701:98;:::i;:::-;12655:151;;;;:::o;12812:720::-;13047:4;13085:3;13074:9;13070:19;13062:27;;13099:79;13175:1;13164:9;13160:17;13151:6;13099:79;:::i;:::-;13225:9;13219:4;13215:20;13210:2;13199:9;13195:18;13188:48;13253:108;13356:4;13347:6;13253:108;:::i;:::-;13245:116;;13371:72;13439:2;13428:9;13424:18;13415:6;13371:72;:::i;:::-;13453;13521:2;13510:9;13506:18;13497:6;13453:72;:::i;:::-;13052:480;;;;;;;:::o;13538:313::-;13651:4;13689:2;13678:9;13674:18;13666:26;;13738:9;13732:4;13728:20;13724:1;13713:9;13709:17;13702:47;13766:78;13839:4;13830:6;13766:78;:::i;:::-;13758:86;;13656:195;;;;:::o;13857:419::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14110:9;14104:4;14100:20;14096:1;14085:9;14081:17;14074:47;14138:131;14264:4;14138:131;:::i;:::-;14130:139;;14028:248;;;:::o;14282:419::-;14448:4;14486:2;14475:9;14471:18;14463:26;;14535:9;14529:4;14525:20;14521:1;14510:9;14506:17;14499:47;14563:131;14689:4;14563:131;:::i;:::-;14555:139;;14453:248;;;:::o;14707:419::-;14873:4;14911:2;14900:9;14896:18;14888:26;;14960:9;14954:4;14950:20;14946:1;14935:9;14931:17;14924:47;14988:131;15114:4;14988:131;:::i;:::-;14980:139;;14878:248;;;:::o;15132:419::-;15298:4;15336:2;15325:9;15321:18;15313:26;;15385:9;15379:4;15375:20;15371:1;15360:9;15356:17;15349:47;15413:131;15539:4;15413:131;:::i;:::-;15405:139;;15303:248;;;:::o;15557:419::-;15723:4;15761:2;15750:9;15746:18;15738:26;;15810:9;15804:4;15800:20;15796:1;15785:9;15781:17;15774:47;15838:131;15964:4;15838:131;:::i;:::-;15830:139;;15728:248;;;:::o;15982:419::-;16148:4;16186:2;16175:9;16171:18;16163:26;;16235:9;16229:4;16225:20;16221:1;16210:9;16206:17;16199:47;16263:131;16389:4;16263:131;:::i;:::-;16255:139;;16153:248;;;:::o;16407:419::-;16573:4;16611:2;16600:9;16596:18;16588:26;;16660:9;16654:4;16650:20;16646:1;16635:9;16631:17;16624:47;16688:131;16814:4;16688:131;:::i;:::-;16680:139;;16578:248;;;:::o;16832:419::-;16998:4;17036:2;17025:9;17021:18;17013:26;;17085:9;17079:4;17075:20;17071:1;17060:9;17056:17;17049:47;17113:131;17239:4;17113:131;:::i;:::-;17105:139;;17003:248;;;:::o;17257:419::-;17423:4;17461:2;17450:9;17446:18;17438:26;;17510:9;17504:4;17500:20;17496:1;17485:9;17481:17;17474:47;17538:131;17664:4;17538:131;:::i;:::-;17530:139;;17428:248;;;:::o;17682:419::-;17848:4;17886:2;17875:9;17871:18;17863:26;;17935:9;17929:4;17925:20;17921:1;17910:9;17906:17;17899:47;17963:131;18089:4;17963:131;:::i;:::-;17955:139;;17853:248;;;:::o;18107:419::-;18273:4;18311:2;18300:9;18296:18;18288:26;;18360:9;18354:4;18350:20;18346:1;18335:9;18331:17;18324:47;18388:131;18514:4;18388:131;:::i;:::-;18380:139;;18278:248;;;:::o;18532:419::-;18698:4;18736:2;18725:9;18721:18;18713:26;;18785:9;18779:4;18775:20;18771:1;18760:9;18756:17;18749:47;18813:131;18939:4;18813:131;:::i;:::-;18805:139;;18703:248;;;:::o;18957:419::-;19123:4;19161:2;19150:9;19146:18;19138:26;;19210:9;19204:4;19200:20;19196:1;19185:9;19181:17;19174:47;19238:131;19364:4;19238:131;:::i;:::-;19230:139;;19128:248;;;:::o;19382:419::-;19548:4;19586:2;19575:9;19571:18;19563:26;;19635:9;19629:4;19625:20;19621:1;19610:9;19606:17;19599:47;19663:131;19789:4;19663:131;:::i;:::-;19655:139;;19553:248;;;:::o;19807:419::-;19973:4;20011:2;20000:9;19996:18;19988:26;;20060:9;20054:4;20050:20;20046:1;20035:9;20031:17;20024:47;20088:131;20214:4;20088:131;:::i;:::-;20080:139;;19978:248;;;:::o;20232:419::-;20398:4;20436:2;20425:9;20421:18;20413:26;;20485:9;20479:4;20475:20;20471:1;20460:9;20456:17;20449:47;20513:131;20639:4;20513:131;:::i;:::-;20505:139;;20403:248;;;:::o;20657:222::-;20750:4;20788:2;20777:9;20773:18;20765:26;;20801:71;20869:1;20858:9;20854:17;20845:6;20801:71;:::i;:::-;20755:124;;;;:::o;20885:483::-;21056:4;21094:2;21083:9;21079:18;21071:26;;21107:71;21175:1;21164:9;21160:17;21151:6;21107:71;:::i;:::-;21225:9;21219:4;21215:20;21210:2;21199:9;21195:18;21188:48;21253:108;21356:4;21347:6;21253:108;:::i;:::-;21245:116;;21061:307;;;;;:::o;21374:831::-;21637:4;21675:3;21664:9;21660:19;21652:27;;21689:71;21757:1;21746:9;21742:17;21733:6;21689:71;:::i;:::-;21770:80;21846:2;21835:9;21831:18;21822:6;21770:80;:::i;:::-;21897:9;21891:4;21887:20;21882:2;21871:9;21867:18;21860:48;21925:108;22028:4;22019:6;21925:108;:::i;:::-;21917:116;;22043:72;22111:2;22100:9;22096:18;22087:6;22043:72;:::i;:::-;22125:73;22193:3;22182:9;22178:19;22169:6;22125:73;:::i;:::-;21642:563;;;;;;;;:::o;22211:214::-;22300:4;22338:2;22327:9;22323:18;22315:26;;22351:67;22415:1;22404:9;22400:17;22391:6;22351:67;:::i;:::-;22305:120;;;;:::o;22431:132::-;22498:4;22521:3;22513:11;;22551:4;22546:3;22542:14;22534:22;;22503:60;;;:::o;22569:114::-;22636:6;22670:5;22664:12;22654:22;;22643:40;;;:::o;22689:99::-;22741:6;22775:5;22769:12;22759:22;;22748:40;;;:::o;22794:113::-;22864:4;22896;22891:3;22887:14;22879:22;;22869:38;;;:::o;22913:184::-;23012:11;23046:6;23041:3;23034:19;23086:4;23081:3;23077:14;23062:29;;23024:73;;;;:::o;23103:169::-;23187:11;23221:6;23216:3;23209:19;23261:4;23256:3;23252:14;23237:29;;23199:73;;;;:::o;23278:305::-;23318:3;23337:20;23355:1;23337:20;:::i;:::-;23332:25;;23371:20;23389:1;23371:20;:::i;:::-;23366:25;;23525:1;23457:66;23453:74;23450:1;23447:81;23444:2;;;23531:18;;:::i;:::-;23444:2;23575:1;23572;23568:9;23561:16;;23322:261;;;;:::o;23589:185::-;23629:1;23646:20;23664:1;23646:20;:::i;:::-;23641:25;;23680:20;23698:1;23680:20;:::i;:::-;23675:25;;23719:1;23709:2;;23724:18;;:::i;:::-;23709:2;23766:1;23763;23759:9;23754:14;;23631:143;;;;:::o;23780:348::-;23820:7;23843:20;23861:1;23843:20;:::i;:::-;23838:25;;23877:20;23895:1;23877:20;:::i;:::-;23872:25;;24065:1;23997:66;23993:74;23990:1;23987:81;23982:1;23975:9;23968:17;23964:105;23961:2;;;24072:18;;:::i;:::-;23961:2;24120:1;24117;24113:9;24102:20;;23828:300;;;;:::o;24134:191::-;24174:4;24194:20;24212:1;24194:20;:::i;:::-;24189:25;;24228:20;24246:1;24228:20;:::i;:::-;24223:25;;24267:1;24264;24261:8;24258:2;;;24272:18;;:::i;:::-;24258:2;24317:1;24314;24310:9;24302:17;;24179:146;;;;:::o;24331:96::-;24368:7;24397:24;24415:5;24397:24;:::i;:::-;24386:35;;24376:51;;;:::o;24433:104::-;24478:7;24507:24;24525:5;24507:24;:::i;:::-;24496:35;;24486:51;;;:::o;24543:90::-;24577:7;24620:5;24613:13;24606:21;24595:32;;24585:48;;;:::o;24639:126::-;24676:7;24716:42;24709:5;24705:54;24694:65;;24684:81;;;:::o;24771:77::-;24808:7;24837:5;24826:16;;24816:32;;;:::o;24854:86::-;24889:7;24929:4;24922:5;24918:16;24907:27;;24897:43;;;:::o;24946:180::-;25023:9;25056:64;25114:5;25056:64;:::i;:::-;25043:77;;25033:93;;;:::o;25132:140::-;25209:9;25242:24;25260:5;25242:24;:::i;:::-;25229:37;;25219:53;;;:::o;25278:121::-;25336:9;25369:24;25387:5;25369:24;:::i;:::-;25356:37;;25346:53;;;:::o;25405:307::-;25473:1;25483:113;25497:6;25494:1;25491:13;25483:113;;;25582:1;25577:3;25573:11;25567:18;25563:1;25558:3;25554:11;25547:39;25519:2;25516:1;25512:10;25507:15;;25483:113;;;25614:6;25611:1;25608:13;25605:2;;;25694:1;25685:6;25680:3;25676:16;25669:27;25605:2;25454:258;;;;:::o;25718:320::-;25762:6;25799:1;25793:4;25789:12;25779:22;;25846:1;25840:4;25836:12;25867:18;25857:2;;25923:4;25915:6;25911:17;25901:27;;25857:2;25985;25977:6;25974:14;25954:18;25951:38;25948:2;;;26004:18;;:::i;:::-;25948:2;25769:269;;;;:::o;26044:233::-;26083:3;26106:24;26124:5;26106:24;:::i;:::-;26097:33;;26152:66;26145:5;26142:77;26139:2;;;26222:18;;:::i;:::-;26139:2;26269:1;26262:5;26258:13;26251:20;;26087:190;;;:::o;26283:180::-;26331:77;26328:1;26321:88;26428:4;26425:1;26418:15;26452:4;26449:1;26442:15;26469:180;26517:77;26514:1;26507:88;26614:4;26611:1;26604:15;26638:4;26635:1;26628:15;26655:180;26703:77;26700:1;26693:88;26800:4;26797:1;26790:15;26824:4;26821:1;26814:15;26841:102;26882:6;26933:2;26929:7;26924:2;26917:5;26913:14;26909:28;26899:38;;26889:54;;;:::o;26949:222::-;27089:34;27085:1;27077:6;27073:14;27066:58;27158:5;27153:2;27145:6;27141:15;27134:30;27055:116;:::o;27177:229::-;27317:34;27313:1;27305:6;27301:14;27294:58;27386:12;27381:2;27373:6;27369:15;27362:37;27283:123;:::o;27412:225::-;27552:34;27548:1;27540:6;27536:14;27529:58;27621:8;27616:2;27608:6;27604:15;27597:33;27518:119;:::o;27643:221::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:4;27847:2;27839:6;27835:15;27828:29;27749:115;:::o;27870:177::-;28010:29;28006:1;27998:6;27994:14;27987:53;27976:71;:::o;28053:177::-;28193:29;28189:1;28181:6;28177:14;28170:53;28159:71;:::o;28236:181::-;28376:33;28372:1;28364:6;28360:14;28353:57;28342:75;:::o;28423:227::-;28563:34;28559:1;28551:6;28547:14;28540:58;28632:10;28627:2;28619:6;28615:15;28608:35;28529:121;:::o;28656:220::-;28796:34;28792:1;28784:6;28780:14;28773:58;28865:3;28860:2;28852:6;28848:15;28841:28;28762:114;:::o;28882:182::-;29022:34;29018:1;29010:6;29006:14;28999:58;28988:76;:::o;29070:228::-;29210:34;29206:1;29198:6;29194:14;29187:58;29279:11;29274:2;29266:6;29262:15;29255:36;29176:122;:::o;29304:224::-;29444:34;29440:1;29432:6;29428:14;29421:58;29513:7;29508:2;29500:6;29496:15;29489:32;29410:118;:::o;29534:223::-;29674:34;29670:1;29662:6;29658:14;29651:58;29743:6;29738:2;29730:6;29726:15;29719:31;29640:117;:::o;29763:181::-;29903:33;29899:1;29891:6;29887:14;29880:57;29869:75;:::o;29950:231::-;30090:34;30086:1;30078:6;30074:14;30067:58;30159:14;30154:2;30146:6;30142:15;30135:39;30056:125;:::o;30187:222::-;30327:34;30323:1;30315:6;30311:14;30304:58;30396:5;30391:2;30383:6;30379:15;30372:30;30293:116;:::o;30415:122::-;30488:24;30506:5;30488:24;:::i;:::-;30481:5;30478:35;30468:2;;30527:1;30524;30517:12;30468:2;30458:79;:::o;30543:116::-;30613:21;30628:5;30613:21;:::i;:::-;30606:5;30603:32;30593:2;;30649:1;30646;30639:12;30593:2;30583:76;:::o;30665:122::-;30738:24;30756:5;30738:24;:::i;:::-;30731:5;30728:35;30718:2;;30777:1;30774;30767:12;30718:2;30708:79;:::o

Swarm Source

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