ETH Price: $3,471.77 (+2.09%)

Token

Naughty Doge (NYD)
 

Overview

Max Total Supply

100,000,000 NYD

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
81,249.052080341063803797 NYD

Value
$0.00
0xc5c096a642bab3a435485f4e1864df179670d4ca
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:
NYD

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-10
*/

// SPDX-License-Identifier: Unlicensed

/**
   #Naughty Doge
   
   4% fee auto distribute to all holders
   5% fee auto add to the liquidity pool
   6% auto moved to the Marketing wallet

 */

pragma solidity ^0.8.3;


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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view virtual 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;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

contract NYD is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    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;

    address private _charityWalletAddress = 0xC29E4a1277D1A9Ca0E19cbfeccC706280317e46b;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100 * 10**6 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;


    string private _name = "Naughty Doge";
    string private _symbol = "NYD";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 4;
    
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _charityFee = 6;

    uint256 private _previousCharityFee = _charityFee;
    uint256 public _liquidityFee = 5;

    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 5 * 10**6 * 10**18;
    uint256 private numTokensSellToAddToLiquidity = 10 * 10**6 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _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), owner(), _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 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 setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newUniSwapRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newUniSwapRouter.factory()).createPair(address(this), _newUniSwapRouter.WETH());
        uniswapV2Router = _newUniSwapRouter;
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _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);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
        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 setCharityFeePercent(uint256 charityFee) external onlyOwner() {
        _charityFee = charityFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

    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) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tCharity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tCharity);
    }

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity);
        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 _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rCharity);
        if(_isExcluded[_charityWalletAddress])
            _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tCharity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateCharityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_charityFee).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;
        _previousCharityFee = _charityFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _charityFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _charityFee = _previousCharityFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
       
        bool takeFee = true;
       
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half); 

        uint256 newBalance = address(this).balance.sub(initialBalance);

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            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]) {
            _transferStandard(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, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharity(tCharity);
        _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, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeCharity(tCharity);
        _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, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"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":[{"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":[{"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":[],"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":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","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":"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"},{"stateMutability":"payable","type":"receive"}]

608060405273c29e4a1277d1a9ca0e19cbfeccc706280317e46b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e40000006008556008546000196200007a91906200087d565b600019620000899190620007ce565b6009556040518060400160405280600c81526020017f4e61756768747920446f67650000000000000000000000000000000000000000815250600b9080519060200190620000d99291906200066f565b506040518060400160405280600381526020017f4e59440000000000000000000000000000000000000000000000000000000000815250600c9080519060200190620001279291906200066f565b506012600d60006101000a81548160ff021916908360ff1602179055506004600e55600e54600f556006601055601054601155600560125560125460135560016015806101000a81548160ff0219169083151502179055506a0422ca8b0a00a4250000006016556a084595161401484a000000601755348015620001aa57600080fd5b506000620001bd6200063e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620002926200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033057600080fd5b505afa15801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000736565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ce57600080fd5b505afa158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000409919062000736565b6040518363ffffffff1660e01b81526004016200042892919062000784565b602060405180830381600087803b1580156200044357600080fd5b505af115801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e919062000736565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620005156200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ce6200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200062f9190620007b1565b60405180910390a3506200095c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200067d9062000847565b90600052602060002090601f016020900481019282620006a15760008555620006ed565b82601f10620006bc57805160ff1916838001178555620006ed565b82800160010185558215620006ed579182015b82811115620006ec578251825591602001919060010190620006cf565b5b509050620006fc919062000700565b5090565b5b808211156200071b57600081600090555060010162000701565b5090565b600081519050620007308162000942565b92915050565b6000602082840312156200074957600080fd5b600062000759848285016200071f565b91505092915050565b6200076d8162000809565b82525050565b6200077e816200083d565b82525050565b60006040820190506200079b600083018562000762565b620007aa602083018462000762565b9392505050565b6000602082019050620007c8600083018462000773565b92915050565b6000620007db826200083d565b9150620007e8836200083d565b925082821015620007fe57620007fd620008b5565b5b828203905092915050565b600062000816826200081d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200086057607f821691505b6020821081141562000877576200087662000913565b5b50919050565b60006200088a826200083d565b915062000897836200083d565b925082620008aa57620008a9620008e4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200094d8162000809565b81146200095957600080fd5b50565b61543d806200096c6000396000f3fe60806040526004361061021e5760003560e01c80634a74bb02116101235780638ee88c53116100ab578063c49b9a801161006f578063c49b9a801461081a578063d543dbeb14610843578063dd62ed3e1461086c578063ea2f0b37146108a9578063f2fde38b146108d257610225565b80638ee88c531461072357806395d89b411461074c578063a457c2d714610777578063a9059cbb146107b4578063af41063b146107f157610225565b806370a08231116100f257806370a082311461063c578063715018a6146106795780637d1db4a51461069057806388f82020146106bb5780638da5cb5b146106f857610225565b80634a74bb021461058057806352390c02146105ab5780635342acb4146105d45780636bc87c3a1461061157610225565b80633685d419116101a657806340f8007a1161017557806340f8007a1461049b57806341cb87fc146104c6578063437823ec146104ef5780634549b0391461051857806349bd5a5e1461055557610225565b80633685d419146103e1578063395093511461040a5780633b124fe7146104475780633bd5d1731461047257610225565b80631694505e116101ed5780631694505e146102e657806318160ddd1461031157806323b872dd1461033c5780632d83811914610379578063313ce567146103b657610225565b8063061c82d01461022a57806306fdde0314610253578063095ea7b31461027e57806313114a9d146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906145d2565b6108fb565b005b34801561025f57600080fd5b50610268610981565b6040516102759190614a40565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a0919061456d565b610a13565b6040516102b29190614a0a565b60405180910390f35b3480156102c757600080fd5b506102d0610a31565b6040516102dd9190614c02565b60405180910390f35b3480156102f257600080fd5b506102fb610a3b565b6040516103089190614a25565b60405180910390f35b34801561031d57600080fd5b50610326610a61565b6040516103339190614c02565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061451e565b610a6b565b6040516103709190614a0a565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906145d2565b610b44565b6040516103ad9190614c02565b60405180910390f35b3480156103c257600080fd5b506103cb610bb2565b6040516103d89190614cae565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614490565b610bc9565b005b34801561041657600080fd5b50610431600480360381019061042c919061456d565b610f97565b60405161043e9190614a0a565b60405180910390f35b34801561045357600080fd5b5061045c61104a565b6040516104699190614c02565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906145d2565b611050565b005b3480156104a757600080fd5b506104b06111cc565b6040516104bd9190614c02565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614490565b6111d2565b005b3480156104fb57600080fd5b5061051660048036038101906105119190614490565b61145f565b005b34801561052457600080fd5b5061053f600480360381019061053a91906145fb565b611536565b60405161054c9190614c02565b60405180910390f35b34801561056157600080fd5b5061056a6115bc565b6040516105779190614965565b60405180910390f35b34801561058c57600080fd5b506105956115e2565b6040516105a29190614a0a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614490565b6115f3565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614490565b61188e565b6040516106089190614a0a565b60405180910390f35b34801561061d57600080fd5b506106266118e4565b6040516106339190614c02565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614490565b6118ea565b6040516106709190614c02565b60405180910390f35b34801561068557600080fd5b5061068e6119d5565b005b34801561069c57600080fd5b506106a5611b0f565b6040516106b29190614c02565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614490565b611b15565b6040516106ef9190614a0a565b60405180910390f35b34801561070457600080fd5b5061070d611b6b565b60405161071a9190614965565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906145d2565b611b94565b005b34801561075857600080fd5b50610761611c1a565b60405161076e9190614a40565b60405180910390f35b34801561078357600080fd5b5061079e6004803603810190610799919061456d565b611cac565b6040516107ab9190614a0a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061456d565b611d79565b6040516107e89190614a0a565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145d2565b611d97565b005b34801561082657600080fd5b50610841600480360381019061083c91906145a9565b611e1d565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145d2565b611eec565b005b34801561087857600080fd5b50610893600480360381019061088e91906144e2565b611f99565b6040516108a09190614c02565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614490565b612020565b005b3480156108de57600080fd5b506108f960048036038101906108f49190614490565b6120f7565b005b6109036122a0565b73ffffffffffffffffffffffffffffffffffffffff16610921611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90614b62565b60405180910390fd5b80600e8190555050565b6060600b805461099090614ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614ef1565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a27610a206122a0565b84846122a8565b6001905092915050565b6000600a54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610a78848484612473565b610b3984610a846122a0565b610b34856040518060600160405280602881526020016153bb60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b600190509392505050565b6000600954821115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614a82565b60405180910390fd5b6000610b95612835565b9050610baa818461286090919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610bd16122a0565b73ffffffffffffffffffffffffffffffffffffffff16610bef611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614b02565b60405180910390fd5b60005b600680549050811015610f93578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f805760066001600680549050610d8d9190614dff565b81548110610dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f93565b8080610f8b90614f23565b915050610cd4565b5050565b6000611040610fa46122a0565b8461103b8560036000610fb56122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b6122a8565b6001905092915050565b600e5481565b600061105a6122a0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614be2565b60405180910390fd5b60006110f48361288c565b505050505050905061114e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111a6816009546128f490919063ffffffff16565b6009819055506111c183600a5461287690919063ffffffff16565b600a81905550505050565b60105481565b6111da6122a0565b73ffffffffffffffffffffffffffffffffffffffff166111f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590614b62565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561129957600080fd5b505afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906144b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906144b9565b6040518363ffffffff1660e01b8152600401611388929190614980565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906144b9565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114676122a0565b73ffffffffffffffffffffffffffffffffffffffff16611485611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614b62565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614b22565b60405180910390fd5b8161159e57600061158d8461288c565b5050505050509050809150506115b6565b60006115a98461288c565b5050505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6115fb6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611619611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614ae2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117d05761178c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b6119dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9c6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611bba611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614b62565b60405180910390fd5b8060128190555050565b6060600c8054611c2990614ef1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5590614ef1565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000611d6f611cb96122a0565b84611d6a856040518060600160405280602581526020016153e36025913960036000611ce36122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b6001905092915050565b6000611d8d611d866122a0565b8484612473565b6001905092915050565b611d9f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611dbd611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b62565b60405180910390fd5b8060108190555050565b611e256122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e43611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614b62565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ee19190614a0a565b60405180910390a150565b611ef46122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f12611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614b62565b60405180910390fd5b611f906064611f828360085461290a90919063ffffffff16565b61286090919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120286122a0565b73ffffffffffffffffffffffffffffffffffffffff16612046611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614b62565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120ff6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661211d611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614ac2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124669190614c02565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614ba2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a62565b60405180910390fd5b60008111612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614b82565b60405180910390fd5b61259e611b6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260c57506125dc611b6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561265757601654811115612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614b42565b60405180910390fd5b5b6000612662306118ea565b905060165481106126735760165490505b600060175482101590508080156126975750601560149054906101000a900460ff16155b80156126f15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612707575060158054906101000a900460ff165b1561271b57601754915061271a82612920565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b6127d8868686846129f6565b505050505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190614a40565b60405180910390fd5b5082840390509392505050565b6000806000612842612d07565b91509150612859818361286090919063ffffffff16565b9250505090565b6000818361286e9190614d74565b905092915050565b600081836128849190614d1e565b905092915050565b60008060008060008060008060008060006128a68c613052565b935093509350935060008060006128c78f8787876128c2612835565b6130d1565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836129029190614dff565b905092915050565b600081836129189190614da5565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061295160028361286090919063ffffffff16565b9050600061296882846128f490919063ffffffff16565b9050600047905061297883613185565b600061298d82476128f490919063ffffffff16565b90506129998382613449565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516129cc93929190614c77565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b80612a0457612a0361353d565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612abc57612ab7848484613591565b612cf3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b5f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7457612b6f8484846137ff565b612cf2565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2d57612c28848484613a6d565b612cf1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce457612cdf848484613c46565b612cf0565b612cef848484613a6d565b5b5b5b5b80612d0157612d00613f49565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561301557826001600060068481548110612d67577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e7b5750816002600060068481548110612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e92576009546008549450945050505061304e565b612f486001600060068481548110612ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128f490919063ffffffff16565b92506130006002600060068481548110612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128f490919063ffffffff16565b9150808061300d90614f23565b915050612d1b565b5061302d60085460095461286090919063ffffffff16565b8210156130455760095460085493509350505061304e565b81819350935050505b9091565b600080600080600061306386613f66565b9050600061307087613f97565b9050600061307d88613fc8565b905060006130b8826130aa8561309c888e6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806130ea858a61290a90919063ffffffff16565b90506000613101868a61290a90919063ffffffff16565b90506000613118878a61290a90919063ffffffff16565b9050600061312f888a61290a90919063ffffffff16565b9050600061316a8261315c8561314e888a6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156131c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131f65781602001602082028036833780820191505090505b5090503081600081518110613234577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e91906144b9565b81600181518110613348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613413959493929190614c1d565b600060405180830381600087803b15801561342d57600080fd5b505af1158015613441573d6000803e3d6000fd5b505050505050565b61347630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134c2611b6b565b426040518863ffffffff1660e01b81526004016134e4969594939291906149a9565b6060604051808303818588803b1580156134fd57600080fd5b505af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614637565b5050505050565b6000600e5414801561355157506000601254145b1561355b5761358f565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006135a58861288c565b965096509650965096509650965061360588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b82613ff9565b6137848161419e565b61378e85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137eb9190614c02565b60405180910390a350505050505050505050565b60008060008060008060006138138861288c565b965096509650965096509650965061387387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390884600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e982613ff9565b6139f28161419e565b6139fc85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a599190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613a818861288c565b9650965096509650965096509650613ae187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc282613ff9565b613bcb8161419e565b613bd585846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613c329190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613c5a8861288c565b9650965096509650965096509650613cba88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d4f87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de484600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec582613ff9565b613ece8161419e565b613ed885846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613f359190614c02565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613f906064613f82600e548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613fc16064613fb36012548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613ff26064613fe46010548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000614003612835565b9050600061401a828461290a90919063ffffffff16565b905061406e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141995761415583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006141a8612835565b905060006141bf828461290a90919063ffffffff16565b90506142358160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143e8576143828360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614402826009546128f490919063ffffffff16565b60098190555061441d81600a5461287690919063ffffffff16565b600a819055505050565b60008135905061443681615375565b92915050565b60008151905061444b81615375565b92915050565b6000813590506144608161538c565b92915050565b600081359050614475816153a3565b92915050565b60008151905061448a816153a3565b92915050565b6000602082840312156144a257600080fd5b60006144b084828501614427565b91505092915050565b6000602082840312156144cb57600080fd5b60006144d98482850161443c565b91505092915050565b600080604083850312156144f557600080fd5b600061450385828601614427565b925050602061451485828601614427565b9150509250929050565b60008060006060848603121561453357600080fd5b600061454186828701614427565b935050602061455286828701614427565b925050604061456386828701614466565b9150509250925092565b6000806040838503121561458057600080fd5b600061458e85828601614427565b925050602061459f85828601614466565b9150509250929050565b6000602082840312156145bb57600080fd5b60006145c984828501614451565b91505092915050565b6000602082840312156145e457600080fd5b60006145f284828501614466565b91505092915050565b6000806040838503121561460e57600080fd5b600061461c85828601614466565b925050602061462d85828601614451565b9150509250929050565b60008060006060848603121561464c57600080fd5b600061465a8682870161447b565b935050602061466b8682870161447b565b925050604061467c8682870161447b565b9150509250925092565b6000614692838361469e565b60208301905092915050565b6146a781614e33565b82525050565b6146b681614e33565b82525050565b60006146c782614cd9565b6146d18185614cfc565b93506146dc83614cc9565b8060005b8381101561470d5781516146f48882614686565b97506146ff83614cef565b9250506001810190506146e0565b5085935050505092915050565b61472381614e45565b82525050565b61473281614e88565b82525050565b61474181614eac565b82525050565b600061475282614ce4565b61475c8185614d0d565b935061476c818560208601614ebe565b61477581614ff9565b840191505092915050565b600061478d602383614d0d565b91506147988261500a565b604082019050919050565b60006147b0602a83614d0d565b91506147bb82615059565b604082019050919050565b60006147d3602683614d0d565b91506147de826150a8565b604082019050919050565b60006147f6602283614d0d565b9150614801826150f7565b604082019050919050565b6000614819601b83614d0d565b915061482482615146565b602082019050919050565b600061483c601b83614d0d565b91506148478261516f565b602082019050919050565b600061485f601f83614d0d565b915061486a82615198565b602082019050919050565b6000614882602883614d0d565b915061488d826151c1565b604082019050919050565b60006148a5602083614d0d565b91506148b082615210565b602082019050919050565b60006148c8602983614d0d565b91506148d382615239565b604082019050919050565b60006148eb602583614d0d565b91506148f682615288565b604082019050919050565b600061490e602483614d0d565b9150614919826152d7565b604082019050919050565b6000614931602c83614d0d565b915061493c82615326565b604082019050919050565b61495081614e71565b82525050565b61495f81614e7b565b82525050565b600060208201905061497a60008301846146ad565b92915050565b600060408201905061499560008301856146ad565b6149a260208301846146ad565b9392505050565b600060c0820190506149be60008301896146ad565b6149cb6020830188614947565b6149d86040830187614738565b6149e56060830186614738565b6149f260808301856146ad565b6149ff60a0830184614947565b979650505050505050565b6000602082019050614a1f600083018461471a565b92915050565b6000602082019050614a3a6000830184614729565b92915050565b60006020820190508181036000830152614a5a8184614747565b905092915050565b60006020820190508181036000830152614a7b81614780565b9050919050565b60006020820190508181036000830152614a9b816147a3565b9050919050565b60006020820190508181036000830152614abb816147c6565b9050919050565b60006020820190508181036000830152614adb816147e9565b9050919050565b60006020820190508181036000830152614afb8161480c565b9050919050565b60006020820190508181036000830152614b1b8161482f565b9050919050565b60006020820190508181036000830152614b3b81614852565b9050919050565b60006020820190508181036000830152614b5b81614875565b9050919050565b60006020820190508181036000830152614b7b81614898565b9050919050565b60006020820190508181036000830152614b9b816148bb565b9050919050565b60006020820190508181036000830152614bbb816148de565b9050919050565b60006020820190508181036000830152614bdb81614901565b9050919050565b60006020820190508181036000830152614bfb81614924565b9050919050565b6000602082019050614c176000830184614947565b92915050565b600060a082019050614c326000830188614947565b614c3f6020830187614738565b8181036040830152614c5181866146bc565b9050614c6060608301856146ad565b614c6d6080830184614947565b9695505050505050565b6000606082019050614c8c6000830186614947565b614c996020830185614947565b614ca66040830184614947565b949350505050565b6000602082019050614cc36000830184614956565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614d2982614e71565b9150614d3483614e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d6957614d68614f6c565b5b828201905092915050565b6000614d7f82614e71565b9150614d8a83614e71565b925082614d9a57614d99614f9b565b5b828204905092915050565b6000614db082614e71565b9150614dbb83614e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614df457614df3614f6c565b5b828202905092915050565b6000614e0a82614e71565b9150614e1583614e71565b925082821015614e2857614e27614f6c565b5b828203905092915050565b6000614e3e82614e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e9382614e9a565b9050919050565b6000614ea582614e51565b9050919050565b6000614eb782614e71565b9050919050565b60005b83811015614edc578082015181840152602081019050614ec1565b83811115614eeb576000848401525b50505050565b60006002820490506001821680614f0957607f821691505b60208210811415614f1d57614f1c614fca565b5b50919050565b6000614f2e82614e71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6157614f60614f6c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61537e81614e33565b811461538957600080fd5b50565b61539581614e45565b81146153a057600080fd5b50565b6153ac81614e71565b81146153b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200cb31be4754ba0ffa57f3aa645cb47b4b2c0b692f74b2871edf293ad51d8f50364736f6c63430008030033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80634a74bb02116101235780638ee88c53116100ab578063c49b9a801161006f578063c49b9a801461081a578063d543dbeb14610843578063dd62ed3e1461086c578063ea2f0b37146108a9578063f2fde38b146108d257610225565b80638ee88c531461072357806395d89b411461074c578063a457c2d714610777578063a9059cbb146107b4578063af41063b146107f157610225565b806370a08231116100f257806370a082311461063c578063715018a6146106795780637d1db4a51461069057806388f82020146106bb5780638da5cb5b146106f857610225565b80634a74bb021461058057806352390c02146105ab5780635342acb4146105d45780636bc87c3a1461061157610225565b80633685d419116101a657806340f8007a1161017557806340f8007a1461049b57806341cb87fc146104c6578063437823ec146104ef5780634549b0391461051857806349bd5a5e1461055557610225565b80633685d419146103e1578063395093511461040a5780633b124fe7146104475780633bd5d1731461047257610225565b80631694505e116101ed5780631694505e146102e657806318160ddd1461031157806323b872dd1461033c5780632d83811914610379578063313ce567146103b657610225565b8063061c82d01461022a57806306fdde0314610253578063095ea7b31461027e57806313114a9d146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906145d2565b6108fb565b005b34801561025f57600080fd5b50610268610981565b6040516102759190614a40565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a0919061456d565b610a13565b6040516102b29190614a0a565b60405180910390f35b3480156102c757600080fd5b506102d0610a31565b6040516102dd9190614c02565b60405180910390f35b3480156102f257600080fd5b506102fb610a3b565b6040516103089190614a25565b60405180910390f35b34801561031d57600080fd5b50610326610a61565b6040516103339190614c02565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061451e565b610a6b565b6040516103709190614a0a565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906145d2565b610b44565b6040516103ad9190614c02565b60405180910390f35b3480156103c257600080fd5b506103cb610bb2565b6040516103d89190614cae565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614490565b610bc9565b005b34801561041657600080fd5b50610431600480360381019061042c919061456d565b610f97565b60405161043e9190614a0a565b60405180910390f35b34801561045357600080fd5b5061045c61104a565b6040516104699190614c02565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906145d2565b611050565b005b3480156104a757600080fd5b506104b06111cc565b6040516104bd9190614c02565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190614490565b6111d2565b005b3480156104fb57600080fd5b5061051660048036038101906105119190614490565b61145f565b005b34801561052457600080fd5b5061053f600480360381019061053a91906145fb565b611536565b60405161054c9190614c02565b60405180910390f35b34801561056157600080fd5b5061056a6115bc565b6040516105779190614965565b60405180910390f35b34801561058c57600080fd5b506105956115e2565b6040516105a29190614a0a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614490565b6115f3565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614490565b61188e565b6040516106089190614a0a565b60405180910390f35b34801561061d57600080fd5b506106266118e4565b6040516106339190614c02565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614490565b6118ea565b6040516106709190614c02565b60405180910390f35b34801561068557600080fd5b5061068e6119d5565b005b34801561069c57600080fd5b506106a5611b0f565b6040516106b29190614c02565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190614490565b611b15565b6040516106ef9190614a0a565b60405180910390f35b34801561070457600080fd5b5061070d611b6b565b60405161071a9190614965565b60405180910390f35b34801561072f57600080fd5b5061074a600480360381019061074591906145d2565b611b94565b005b34801561075857600080fd5b50610761611c1a565b60405161076e9190614a40565b60405180910390f35b34801561078357600080fd5b5061079e6004803603810190610799919061456d565b611cac565b6040516107ab9190614a0a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061456d565b611d79565b6040516107e89190614a0a565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145d2565b611d97565b005b34801561082657600080fd5b50610841600480360381019061083c91906145a9565b611e1d565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145d2565b611eec565b005b34801561087857600080fd5b50610893600480360381019061088e91906144e2565b611f99565b6040516108a09190614c02565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614490565b612020565b005b3480156108de57600080fd5b506108f960048036038101906108f49190614490565b6120f7565b005b6109036122a0565b73ffffffffffffffffffffffffffffffffffffffff16610921611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90614b62565b60405180910390fd5b80600e8190555050565b6060600b805461099090614ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614ef1565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a27610a206122a0565b84846122a8565b6001905092915050565b6000600a54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610a78848484612473565b610b3984610a846122a0565b610b34856040518060600160405280602881526020016153bb60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aea6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b600190509392505050565b6000600954821115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290614a82565b60405180910390fd5b6000610b95612835565b9050610baa818461286090919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610bd16122a0565b73ffffffffffffffffffffffffffffffffffffffff16610bef611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890614b02565b60405180910390fd5b60005b600680549050811015610f93578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f805760066001600680549050610d8d9190614dff565b81548110610dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f93565b8080610f8b90614f23565b915050610cd4565b5050565b6000611040610fa46122a0565b8461103b8560036000610fb56122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b6122a8565b6001905092915050565b600e5481565b600061105a6122a0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614be2565b60405180910390fd5b60006110f48361288c565b505050505050905061114e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111a6816009546128f490919063ffffffff16565b6009819055506111c183600a5461287690919063ffffffff16565b600a81905550505050565b60105481565b6111da6122a0565b73ffffffffffffffffffffffffffffffffffffffff166111f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590614b62565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561129957600080fd5b505afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d191906144b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906144b9565b6040518363ffffffff1660e01b8152600401611388929190614980565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906144b9565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114676122a0565b73ffffffffffffffffffffffffffffffffffffffff16611485611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614b62565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614b22565b60405180910390fd5b8161159e57600061158d8461288c565b5050505050509050809150506115b6565b60006115a98461288c565b5050505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6115fb6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611619611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614b62565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614ae2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117d05761178c600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b44565b90505b919050565b6119dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9c6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611bba611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790614b62565b60405180910390fd5b8060128190555050565b6060600c8054611c2990614ef1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5590614ef1565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000611d6f611cb96122a0565b84611d6a856040518060600160405280602581526020016153e36025913960036000611ce36122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e09092919063ffffffff16565b6122a8565b6001905092915050565b6000611d8d611d866122a0565b8484612473565b6001905092915050565b611d9f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611dbd611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b62565b60405180910390fd5b8060108190555050565b611e256122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e43611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614b62565b60405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ee19190614a0a565b60405180910390a150565b611ef46122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f12611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f90614b62565b60405180910390fd5b611f906064611f828360085461290a90919063ffffffff16565b61286090919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120286122a0565b73ffffffffffffffffffffffffffffffffffffffff16612046611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614b62565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120ff6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661211d611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216a90614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614ac2565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124669190614c02565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614ba2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a62565b60405180910390fd5b60008111612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614b82565b60405180910390fd5b61259e611b6b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260c57506125dc611b6b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561265757601654811115612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614b42565b60405180910390fd5b5b6000612662306118ea565b905060165481106126735760165490505b600060175482101590508080156126975750601560149054906101000a900460ff16155b80156126f15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612707575060158054906101000a900460ff165b1561271b57601754915061271a82612920565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b6127d8868686846129f6565b505050505050565b6000838311158290612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9190614a40565b60405180910390fd5b5082840390509392505050565b6000806000612842612d07565b91509150612859818361286090919063ffffffff16565b9250505090565b6000818361286e9190614d74565b905092915050565b600081836128849190614d1e565b905092915050565b60008060008060008060008060008060006128a68c613052565b935093509350935060008060006128c78f8787876128c2612835565b6130d1565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836129029190614dff565b905092915050565b600081836129189190614da5565b905092915050565b6001601560146101000a81548160ff021916908315150217905550600061295160028361286090919063ffffffff16565b9050600061296882846128f490919063ffffffff16565b9050600047905061297883613185565b600061298d82476128f490919063ffffffff16565b90506129998382613449565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516129cc93929190614c77565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b80612a0457612a0361353d565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aa75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612abc57612ab7848484613591565b612cf3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b5f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b7457612b6f8484846137ff565b612cf2565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2d57612c28848484613a6d565b612cf1565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ccf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ce457612cdf848484613c46565b612cf0565b612cef848484613a6d565b5b5b5b5b80612d0157612d00613f49565b5b50505050565b600080600060095490506000600854905060005b60068054905081101561301557826001600060068481548110612d67577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e7b5750816002600060068481548110612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e92576009546008549450945050505061304e565b612f486001600060068481548110612ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128f490919063ffffffff16565b92506130006002600060068481548110612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128f490919063ffffffff16565b9150808061300d90614f23565b915050612d1b565b5061302d60085460095461286090919063ffffffff16565b8210156130455760095460085493509350505061304e565b81819350935050505b9091565b600080600080600061306386613f66565b9050600061307087613f97565b9050600061307d88613fc8565b905060006130b8826130aa8561309c888e6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806130ea858a61290a90919063ffffffff16565b90506000613101868a61290a90919063ffffffff16565b90506000613118878a61290a90919063ffffffff16565b9050600061312f888a61290a90919063ffffffff16565b9050600061316a8261315c8561314e888a6128f490919063ffffffff16565b6128f490919063ffffffff16565b6128f490919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156131c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131f65781602001602082028036833780820191505090505b5090503081600081518110613234577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d657600080fd5b505afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e91906144b9565b81600181518110613348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613413959493929190614c1d565b600060405180830381600087803b15801561342d57600080fd5b505af1158015613441573d6000803e3d6000fd5b505050505050565b61347630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134c2611b6b565b426040518863ffffffff1660e01b81526004016134e4969594939291906149a9565b6060604051808303818588803b1580156134fd57600080fd5b505af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614637565b5050505050565b6000600e5414801561355157506000601254145b1561355b5761358f565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b60008060008060008060006135a58861288c565b965096509650965096509650965061360588600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b82613ff9565b6137848161419e565b61378e85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137eb9190614c02565b60405180910390a350505050505050505050565b60008060008060008060006138138861288c565b965096509650965096509650965061387387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390884600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139e982613ff9565b6139f28161419e565b6139fc85846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a599190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613a818861288c565b9650965096509650965096509650613ae187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc282613ff9565b613bcb8161419e565b613bd585846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613c329190614c02565b60405180910390a350505050505050505050565b6000806000806000806000613c5a8861288c565b9650965096509650965096509650613cba88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d4f87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de484600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec582613ff9565b613ece8161419e565b613ed885846143ed565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613f359190614c02565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613f906064613f82600e548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613fc16064613fb36012548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000613ff26064613fe46010548561290a90919063ffffffff16565b61286090919063ffffffff16565b9050919050565b6000614003612835565b9050600061401a828461290a90919063ffffffff16565b905061406e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141995761415583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006141a8612835565b905060006141bf828461290a90919063ffffffff16565b90506142358160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143e8576143828360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614402826009546128f490919063ffffffff16565b60098190555061441d81600a5461287690919063ffffffff16565b600a819055505050565b60008135905061443681615375565b92915050565b60008151905061444b81615375565b92915050565b6000813590506144608161538c565b92915050565b600081359050614475816153a3565b92915050565b60008151905061448a816153a3565b92915050565b6000602082840312156144a257600080fd5b60006144b084828501614427565b91505092915050565b6000602082840312156144cb57600080fd5b60006144d98482850161443c565b91505092915050565b600080604083850312156144f557600080fd5b600061450385828601614427565b925050602061451485828601614427565b9150509250929050565b60008060006060848603121561453357600080fd5b600061454186828701614427565b935050602061455286828701614427565b925050604061456386828701614466565b9150509250925092565b6000806040838503121561458057600080fd5b600061458e85828601614427565b925050602061459f85828601614466565b9150509250929050565b6000602082840312156145bb57600080fd5b60006145c984828501614451565b91505092915050565b6000602082840312156145e457600080fd5b60006145f284828501614466565b91505092915050565b6000806040838503121561460e57600080fd5b600061461c85828601614466565b925050602061462d85828601614451565b9150509250929050565b60008060006060848603121561464c57600080fd5b600061465a8682870161447b565b935050602061466b8682870161447b565b925050604061467c8682870161447b565b9150509250925092565b6000614692838361469e565b60208301905092915050565b6146a781614e33565b82525050565b6146b681614e33565b82525050565b60006146c782614cd9565b6146d18185614cfc565b93506146dc83614cc9565b8060005b8381101561470d5781516146f48882614686565b97506146ff83614cef565b9250506001810190506146e0565b5085935050505092915050565b61472381614e45565b82525050565b61473281614e88565b82525050565b61474181614eac565b82525050565b600061475282614ce4565b61475c8185614d0d565b935061476c818560208601614ebe565b61477581614ff9565b840191505092915050565b600061478d602383614d0d565b91506147988261500a565b604082019050919050565b60006147b0602a83614d0d565b91506147bb82615059565b604082019050919050565b60006147d3602683614d0d565b91506147de826150a8565b604082019050919050565b60006147f6602283614d0d565b9150614801826150f7565b604082019050919050565b6000614819601b83614d0d565b915061482482615146565b602082019050919050565b600061483c601b83614d0d565b91506148478261516f565b602082019050919050565b600061485f601f83614d0d565b915061486a82615198565b602082019050919050565b6000614882602883614d0d565b915061488d826151c1565b604082019050919050565b60006148a5602083614d0d565b91506148b082615210565b602082019050919050565b60006148c8602983614d0d565b91506148d382615239565b604082019050919050565b60006148eb602583614d0d565b91506148f682615288565b604082019050919050565b600061490e602483614d0d565b9150614919826152d7565b604082019050919050565b6000614931602c83614d0d565b915061493c82615326565b604082019050919050565b61495081614e71565b82525050565b61495f81614e7b565b82525050565b600060208201905061497a60008301846146ad565b92915050565b600060408201905061499560008301856146ad565b6149a260208301846146ad565b9392505050565b600060c0820190506149be60008301896146ad565b6149cb6020830188614947565b6149d86040830187614738565b6149e56060830186614738565b6149f260808301856146ad565b6149ff60a0830184614947565b979650505050505050565b6000602082019050614a1f600083018461471a565b92915050565b6000602082019050614a3a6000830184614729565b92915050565b60006020820190508181036000830152614a5a8184614747565b905092915050565b60006020820190508181036000830152614a7b81614780565b9050919050565b60006020820190508181036000830152614a9b816147a3565b9050919050565b60006020820190508181036000830152614abb816147c6565b9050919050565b60006020820190508181036000830152614adb816147e9565b9050919050565b60006020820190508181036000830152614afb8161480c565b9050919050565b60006020820190508181036000830152614b1b8161482f565b9050919050565b60006020820190508181036000830152614b3b81614852565b9050919050565b60006020820190508181036000830152614b5b81614875565b9050919050565b60006020820190508181036000830152614b7b81614898565b9050919050565b60006020820190508181036000830152614b9b816148bb565b9050919050565b60006020820190508181036000830152614bbb816148de565b9050919050565b60006020820190508181036000830152614bdb81614901565b9050919050565b60006020820190508181036000830152614bfb81614924565b9050919050565b6000602082019050614c176000830184614947565b92915050565b600060a082019050614c326000830188614947565b614c3f6020830187614738565b8181036040830152614c5181866146bc565b9050614c6060608301856146ad565b614c6d6080830184614947565b9695505050505050565b6000606082019050614c8c6000830186614947565b614c996020830185614947565b614ca66040830184614947565b949350505050565b6000602082019050614cc36000830184614956565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614d2982614e71565b9150614d3483614e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d6957614d68614f6c565b5b828201905092915050565b6000614d7f82614e71565b9150614d8a83614e71565b925082614d9a57614d99614f9b565b5b828204905092915050565b6000614db082614e71565b9150614dbb83614e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614df457614df3614f6c565b5b828202905092915050565b6000614e0a82614e71565b9150614e1583614e71565b925082821015614e2857614e27614f6c565b5b828203905092915050565b6000614e3e82614e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e9382614e9a565b9050919050565b6000614ea582614e51565b9050919050565b6000614eb782614e71565b9050919050565b60005b83811015614edc578082015181840152602081019050614ec1565b83811115614eeb576000848401525b50505050565b60006002820490506001821680614f0957607f821691505b60208210811415614f1d57614f1c614fca565b5b50919050565b6000614f2e82614e71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6157614f60614f6c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61537e81614e33565b811461538957600080fd5b50565b61539581614e45565b81146153a057600080fd5b50565b6153ac81614e71565b81146153b757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200cb31be4754ba0ffa57f3aa645cb47b4b2c0b692f74b2871edf293ad51d8f50364736f6c63430008030033

Deployed Bytecode Sourcemap

15708:18374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23428:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18068:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18995:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16854:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18360:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19164:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21049:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18269:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21985:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19485:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16563:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20217:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16656:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21655:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23183:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20603:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16902:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16971:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21310:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28294:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16751:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18463:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7338:148;;;;;;;;;;;;;:::i;:::-;;17024:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19988:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7115:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23660:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18174:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19711:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18669:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23534:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23963:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23793:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18844:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7494:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23428:98;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23512:6:::1;23502:7;:16;;;;23428:98:::0;:::o;18068:83::-;18105:13;18138:5;18131:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18068:83;:::o;18995:161::-;19070:4;19087:39;19096:12;:10;:12::i;:::-;19110:7;19119:6;19087:8;:39::i;:::-;19144:4;19137:11;;18995:161;;;;:::o;20116:87::-;20158:7;20185:10;;20178:17;;20116:87;:::o;16854:41::-;;;;;;;;;;;;;:::o;18360:95::-;18413:7;18440;;18433:14;;18360:95;:::o;19164:313::-;19262:4;19279:36;19289:6;19297:9;19308:6;19279:9;:36::i;:::-;19326:121;19335:6;19343:12;:10;:12::i;:::-;19357:89;19395:6;19357:89;;;;;;;;;;;;;;;;;:11;:19;19369:6;19357:19;;;;;;;;;;;;;;;:33;19377:12;:10;:12::i;:::-;19357:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19326:8;:121::i;:::-;19465:4;19458:11;;19164:313;;;;;:::o;21049:253::-;21115:7;21154;;21143;:18;;21135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21219:19;21242:10;:8;:10::i;:::-;21219:33;;21270:24;21282:11;21270:7;:11;;:24;;;;:::i;:::-;21263:31;;;21049:253;;;:::o;18269:83::-;18310:5;18335:9;;;;;;;;;;;18328:16;;18269:83;:::o;21985:479::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22067:11:::1;:20;22079:7;22067:20;;;;;;;;;;;;;;;;;;;;;;;;;22059:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22135:9;22130:327;22154:9;:16;;;;22150:1;:20;22130:327;;;22212:7;22196:23;;:9;22206:1;22196:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22192:254;;;22255:9;22284:1;22265:9;:16;;;;:20;;;;:::i;:::-;22255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22240:9;22250:1;22240:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22324:1;22305:7;:16;22313:7;22305:16;;;;;;;;;;;;;;;:20;;;;22367:5;22344:11;:20;22356:7;22344:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22391:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22425:5;;22192:254;22172:3;;;;;:::i;:::-;;;;22130:327;;;;21985:479:::0;:::o;19485:218::-;19573:4;19590:83;19599:12;:10;:12::i;:::-;19613:7;19622:50;19661:10;19622:11;:25;19634:12;:10;:12::i;:::-;19622:25;;;;;;;;;;;;;;;:34;19648:7;19622:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19590:8;:83::i;:::-;19691:4;19684:11;;19485:218;;;;:::o;16563:26::-;;;;:::o;20217:378::-;20269:14;20286:12;:10;:12::i;:::-;20269:29;;20318:11;:19;20330:6;20318:19;;;;;;;;;;;;;;;;;;;;;;;;;20317:20;20309:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20398:15;20423:19;20434:7;20423:10;:19::i;:::-;20397:45;;;;;;;;20471:28;20491:7;20471;:15;20479:6;20471:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20453:7;:15;20461:6;20453:15;;;;;;;;;;;;;;;:46;;;;20520:20;20532:7;20520;;:11;;:20;;;;:::i;:::-;20510:7;:30;;;;20564:23;20579:7;20564:10;;:14;;:23;;;;:::i;:::-;20551:10;:36;;;;20217:378;;;:::o;16656:30::-;;;;:::o;21655:322::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21730:36:::1;21788:9;21730:68;;21843:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21825:57;;;21891:4;21898:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21825:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21809:13;;:114;;;;;;;;;;;;;;;;;;21952:17;21934:15;;:35;;;;;;;;;;;;;;;;;;7321:1;21655:322:::0;:::o;23183:111::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23282:4:::1;23252:18;:27;23271:7;23252:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23183:111:::0;:::o;20603:438::-;20693:7;20732;;20721;:18;;20713:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20791:17;20786:248;;20826:15;20851:19;20862:7;20851:10;:19::i;:::-;20825:45;;;;;;;;20892:7;20885:14;;;;;20786:248;20934:23;20966:19;20977:7;20966:10;:19::i;:::-;20932:53;;;;;;;;21007:15;21000:22;;;20603:438;;;;;:::o;16902:28::-;;;;;;;;;;;;;:::o;16971:40::-;;;;;;;;;;;;:::o;21310:333::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21393:11:::1;:20;21405:7;21393:20;;;;;;;;;;;;;;;;;;;;;;;;;21392:21;21384:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21478:1;21459:7;:16;21467:7;21459:16;;;;;;;;;;;;;;;;:20;21456:108;;;21515:37;21535:7;:16;21543:7;21535:16;;;;;;;;;;;;;;;;21515:19;:37::i;:::-;21496:7;:16;21504:7;21496:16;;;;;;;;;;;;;;;:56;;;;21456:108;21597:4;21574:11;:20;21586:7;21574:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21612:9;21627:7;21612:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21310:333:::0;:::o;28294:123::-;28358:4;28382:18;:27;28401:7;28382:27;;;;;;;;;;;;;;;;;;;;;;;;;28375:34;;28294:123;;;:::o;16751:32::-;;;;:::o;18463:198::-;18529:7;18553:11;:20;18565:7;18553:20;;;;;;;;;;;;;;;;;;;;;;;;;18549:49;;;18582:7;:16;18590:7;18582:16;;;;;;;;;;;;;;;;18575:23;;;;18549:49;18616:37;18636:7;:16;18644:7;18636:16;;;;;;;;;;;;;;;;18616:19;:37::i;:::-;18609:44;;18463:198;;;;:::o;7338:148::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7445:1:::1;7408:40;;7429:6;::::0;::::1;;;;;;;;7408:40;;;;;;;;;;;;7476:1;7459:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7338:148::o:0;17024:48::-;;;;:::o;19988:120::-;20056:4;20080:11;:20;20092:7;20080:20;;;;;;;;;;;;;;;;;;;;;;;;;20073:27;;19988:120;;;:::o;7115:87::-;7161:7;7188:6;;;;;;;;;;;7181:13;;7115:87;:::o;23660:122::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23762:12:::1;23746:13;:28;;;;23660:122:::0;:::o;18174:87::-;18213:13;18246:7;18239:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18174:87;:::o;19711:269::-;19804:4;19821:129;19830:12;:10;:12::i;:::-;19844:7;19853:96;19892:15;19853:96;;;;;;;;;;;;;;;;;:11;:25;19865:12;:10;:12::i;:::-;19853:25;;;;;;;;;;;;;;;:34;19879:7;19853:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19821:8;:129::i;:::-;19968:4;19961:11;;19711:269;;;;:::o;18669:167::-;18747:4;18764:42;18774:12;:10;:12::i;:::-;18788:9;18799:6;18764:9;:42::i;:::-;18824:4;18817:11;;18669:167;;;;:::o;23534:114::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23630:10:::1;23616:11;:24;;;;23534:114:::0;:::o;23963:171::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24064:8:::1;24040:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;24088:38;24117:8;24088:38;;;;;;:::i;:::-;;;;;;;;23963:171:::0;:::o;23793:162::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23887:60:::1;23931:5;23887:25;23899:12;23887:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;23872:12;:75;;;;23793:162:::0;:::o;18844:143::-;18925:7;18952:11;:18;18964:5;18952:18;;;;;;;;;;;;;;;:27;18971:7;18952:27;;;;;;;;;;;;;;;;18945:34;;18844:143;;;;:::o;23306:110::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23403:5:::1;23373:18;:27;23392:7;23373:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23306:110:::0;:::o;7494:244::-;7261:12;:10;:12::i;:::-;7250:23;;:7;:5;:7::i;:::-;:23;;;7242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7603:1:::1;7583:22;;:8;:22;;;;7575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7693:8;7664:38;;7685:6;::::0;::::1;;;;;;;;7664:38;;;;;;;;;;;;7722:8;7713:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7494:244:::0;:::o;3253:98::-;3306:7;3333:10;3326:17;;3253:98;:::o;28425:337::-;28535:1;28518:19;;:5;:19;;;;28510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28616:1;28597:21;;:7;:21;;;;28589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28700:6;28670:11;:18;28682:5;28670:18;;;;;;;;;;;;;;;:27;28689:7;28670:27;;;;;;;;;;;;;;;:36;;;;28738:7;28722:32;;28731:5;28722:32;;;28747:6;28722:32;;;;;;:::i;:::-;;;;;;;;28425:337;;;:::o;28770:1289::-;28908:1;28892:18;;:4;:18;;;;28884:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28985:1;28971:16;;:2;:16;;;;28963:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29055:1;29046:6;:10;29038:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29124:7;:5;:7::i;:::-;29116:15;;:4;:15;;;;:32;;;;;29141:7;:5;:7::i;:::-;29135:13;;:2;:13;;;;29116:32;29113:125;;;29181:12;;29171:6;:22;;29163:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29113:125;29251:28;29282:24;29300:4;29282:9;:24::i;:::-;29251:55;;29354:12;;29330:20;:36;29327:112;;29415:12;;29392:35;;29327:112;29459:24;29510:29;;29486:20;:53;;29459:80;;29568:19;:53;;;;;29605:16;;;;;;;;;;;29604:17;29568:53;:91;;;;;29646:13;;;;;;;;;;;29638:21;;:4;:21;;;;29568:91;:129;;;;;29676:21;;;;;;;;;;29568:129;29550:289;;;29747:29;;29724:52;;29791:36;29806:20;29791:14;:36::i;:::-;29550:289;29858:12;29873:4;29858:19;;29900:18;:24;29919:4;29900:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29928:18;:22;29947:2;29928:22;;;;;;;;;;;;;;;;;;;;;;;;;29900:50;29897:96;;;29976:5;29966:15;;29897:96;30013:38;30028:4;30033:2;30036:6;30043:7;30013:14;:38::i;:::-;28770:1289;;;;;;:::o;2581:206::-;2667:7;2725:1;2720;:6;;2728:12;2712:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2767:1;2763;:5;2756:12;;2581:206;;;;;:::o;25765:163::-;25806:7;25827:15;25844;25863:19;:17;:19::i;:::-;25826:56;;;;25900:20;25912:7;25900;:11;;:20;;;;:::i;:::-;25893:27;;;;25765:163;:::o;2369:98::-;2427:7;2458:1;2454;:5;;;;:::i;:::-;2447:12;;2369:98;;;;:::o;2051:::-;2109:7;2140:1;2136;:5;;;;:::i;:::-;2129:12;;2051:98;;;;:::o;24338:466::-;24397:7;24406;24415;24424;24433;24442;24451;24472:23;24497:12;24511:18;24531:16;24551:20;24563:7;24551:11;:20::i;:::-;24471:100;;;;;;;;24583:15;24600:23;24625:12;24641:60;24653:7;24662:4;24668:10;24680:8;24690:10;:8;:10::i;:::-;24641:11;:60::i;:::-;24582:119;;;;;;24720:7;24729:15;24746:4;24752:15;24769:4;24775:10;24787:8;24712:84;;;;;;;;;;;;;;;;;;;;;24338:466;;;;;;;;;:::o;2157:98::-;2215:7;2246:1;2242;:5;;;;:::i;:::-;2235:12;;2157:98;;;;:::o;2263:::-;2321:7;2352:1;2348;:5;;;;:::i;:::-;2341:12;;2263:98;;;;:::o;30067:483::-;17472:4;17453:16;;:23;;;;;;;;;;;;;;;;;;30152:12:::1;30167:27;30192:1;30167:20;:24;;:27;;;;:::i;:::-;30152:42;;30205:17;30225:30;30250:4;30225:20;:24;;:30;;;;:::i;:::-;30205:50;;30268:22;30293:21;30268:46;;30327:22;30344:4;30327:16;:22::i;:::-;30363:18;30384:41;30410:14;30384:21;:25;;:41;;;;:::i;:::-;30363:62;;30438:35;30451:9;30462:10;30438:12;:35::i;:::-;30499:43;30514:4;30520:10;30532:9;30499:43;;;;;;;;:::i;:::-;;;;;;;;17487:1;;;;17518:5:::0;17499:16;;:24;;;;;;;;;;;;;;;;;;30067:483;:::o;31414:834::-;31525:7;31521:40;;31547:14;:12;:14::i;:::-;31521:40;31586:11;:19;31598:6;31586:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31610:11;:22;31622:9;31610:22;;;;;;;;;;;;;;;;;;;;;;;;;31609:23;31586:46;31582:597;;;31649:48;31671:6;31679:9;31690:6;31649:21;:48::i;:::-;31582:597;;;31720:11;:19;31732:6;31720:19;;;;;;;;;;;;;;;;;;;;;;;;;31719:20;:46;;;;;31743:11;:22;31755:9;31743:22;;;;;;;;;;;;;;;;;;;;;;;;;31719:46;31715:464;;;31782:46;31802:6;31810:9;31821:6;31782:19;:46::i;:::-;31715:464;;;31851:11;:19;31863:6;31851:19;;;;;;;;;;;;;;;;;;;;;;;;;31850:20;:47;;;;;31875:11;:22;31887:9;31875:22;;;;;;;;;;;;;;;;;;;;;;;;;31874:23;31850:47;31846:333;;;31914:44;31932:6;31940:9;31951:6;31914:17;:44::i;:::-;31846:333;;;31980:11;:19;31992:6;31980:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32003:11;:22;32015:9;32003:22;;;;;;;;;;;;;;;;;;;;;;;;;31980:45;31976:203;;;32042:48;32064:6;32072:9;32083:6;32042:21;:48::i;:::-;31976:203;;;32123:44;32141:6;32149:9;32160:6;32123:17;:44::i;:::-;31976:203;31846:333;31715:464;31582:597;32203:7;32199:41;;32225:15;:13;:15::i;:::-;32199:41;31414:834;;;;:::o;25936:561::-;25986:7;25995;26015:15;26033:7;;26015:25;;26051:15;26069:7;;26051:25;;26098:9;26093:289;26117:9;:16;;;;26113:1;:20;26093:289;;;26183:7;26159;:21;26167:9;26177:1;26167:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26159:21;;;;;;;;;;;;;;;;:31;:66;;;;26218:7;26194;:21;26202:9;26212:1;26202:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:21;;;;;;;;;;;;;;;;:31;26159:66;26155:97;;;26235:7;;26244;;26227:25;;;;;;;;;26155:97;26277:34;26289:7;:21;26297:9;26307:1;26297:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26289:21;;;;;;;;;;;;;;;;26277:7;:11;;:34;;;;:::i;:::-;26267:44;;26336:34;26348:7;:21;26356:9;26366:1;26356:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26348:21;;;;;;;;;;;;;;;;26336:7;:11;;:34;;;;:::i;:::-;26326:44;;26135:3;;;;;:::i;:::-;;;;26093:289;;;;26406:20;26418:7;;26406;;:11;;:20;;;;:::i;:::-;26396:7;:30;26392:61;;;26436:7;;26445;;26428:25;;;;;;;;26392:61;26472:7;26481;26464:25;;;;;;25936:561;;;:::o;24812:421::-;24872:7;24881;24890;24899;24919:12;24934:24;24950:7;24934:15;:24::i;:::-;24919:39;;24969:18;24990:30;25012:7;24990:21;:30::i;:::-;24969:51;;25031:16;25050:28;25070:7;25050:19;:28::i;:::-;25031:47;;25089:23;25115:47;25153:8;25115:33;25137:10;25115:17;25127:4;25115:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;25089:73;;25181:15;25198:4;25204:10;25216:8;25173:52;;;;;;;;;;;;24812:421;;;;;:::o;25241:516::-;25374:7;25383;25392;25412:15;25430:24;25442:11;25430:7;:11;;:24;;;;:::i;:::-;25412:42;;25465:12;25480:21;25489:11;25480:4;:8;;:21;;;;:::i;:::-;25465:36;;25512:18;25533:27;25548:11;25533:10;:14;;:27;;;;:::i;:::-;25512:48;;25571:16;25590:25;25603:11;25590:8;:12;;:25;;;;:::i;:::-;25571:44;;25626:23;25652:47;25690:8;25652:33;25674:10;25652:17;25664:4;25652:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;25626:73;;25718:7;25727:15;25744:4;25710:39;;;;;;;;;;;25241:516;;;;;;;;;:::o;30558:476::-;30624:21;30662:1;30648:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30624:40;;30693:4;30675;30680:1;30675:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;30719:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30709:4;30714:1;30709:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;30754:62;30771:4;30786:15;;;;;;;;;;;30804:11;30754:8;:62::i;:::-;30829:15;;;;;;;;;;;:66;;;30910:11;30936:1;30953:4;30980;31000:15;30829:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30558:476;;:::o;31042:364::-;31123:62;31140:4;31155:15;;;;;;;;;;;31173:11;31123:8;:62::i;:::-;31198:15;;;;;;;;;;;:31;;;31237:9;31270:4;31290:11;31316:1;31333;31350:7;:5;:7::i;:::-;31372:15;31198:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31042:364;;:::o;27781:320::-;27838:1;27827:7;;:12;:34;;;;;27860:1;27843:13;;:18;27827:34;27824:46;;;27863:7;;27824:46;27908:7;;27890:15;:25;;;;27948:11;;27926:19;:33;;;;27994:13;;27970:21;:37;;;;28038:1;28028:7;:11;;;;28064:1;28050:11;:15;;;;28092:1;28076:13;:17;;;;27781:320;:::o;33462:617::-;33565:15;33582:23;33607:12;33621:23;33646:12;33660:18;33680:16;33700:19;33711:7;33700:10;:19::i;:::-;33564:155;;;;;;;;;;;;;;33748:28;33768:7;33748;:15;33756:6;33748:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33730:7;:15;33738:6;33730:15;;;;;;;;;;;;;;;:46;;;;33805:28;33825:7;33805;:15;33813:6;33805:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33787:7;:15;33795:6;33787:15;;;;;;;;;;;;;;;:46;;;;33865:39;33888:15;33865:7;:18;33873:9;33865:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33844:7;:18;33852:9;33844:18;;;;;;;;;;;;;;;:60;;;;33918:26;33933:10;33918:14;:26::i;:::-;33955:22;33968:8;33955:12;:22::i;:::-;33988:23;34000:4;34006;33988:11;:23::i;:::-;34044:9;34027:44;;34036:6;34027:44;;;34055:15;34027:44;;;;;;:::i;:::-;;;;;;;;33462:617;;;;;;;;;;:::o;32817:637::-;32918:15;32935:23;32960:12;32974:23;32999:12;33013:18;33033:16;33053:19;33064:7;33053:10;:19::i;:::-;32917:155;;;;;;;;;;;;;;33101:28;33121:7;33101;:15;33109:6;33101:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33083:7;:15;33091:6;33083:15;;;;;;;;;;;;;;;:46;;;;33161:39;33184:15;33161:7;:18;33169:9;33161:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33140:7;:18;33148:9;33140:18;;;;;;;;;;;;;;;:60;;;;33232:39;33255:15;33232:7;:18;33240:9;33232:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33211:7;:18;33219:9;33211:18;;;;;;;;;;;;;;;:60;;;;33293:26;33308:10;33293:14;:26::i;:::-;33330:22;33343:8;33330:12;:22::i;:::-;33363:23;33375:4;33381;33363:11;:23::i;:::-;33419:9;33402:44;;33411:6;33402:44;;;33430:15;33402:44;;;;;;:::i;:::-;;;;;;;;32817:637;;;;;;;;;;:::o;32256:553::-;32355:15;32372:23;32397:12;32411:23;32436:12;32450:18;32470:16;32490:19;32501:7;32490:10;:19::i;:::-;32354:155;;;;;;;;;;;;;;32538:28;32558:7;32538;:15;32546:6;32538:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32520:7;:15;32528:6;32520:15;;;;;;;;;;;;;;;:46;;;;32598:39;32621:15;32598:7;:18;32606:9;32598:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32577:7;:18;32585:9;32577:18;;;;;;;;;;;;;;;:60;;;;32648:26;32663:10;32648:14;:26::i;:::-;32685:22;32698:8;32685:12;:22::i;:::-;32718:23;32730:4;32736;32718:11;:23::i;:::-;32774:9;32757:44;;32766:6;32757:44;;;32785:15;32757:44;;;;;;:::i;:::-;;;;;;;;32256:553;;;;;;;;;;:::o;22474:693::-;22577:15;22594:23;22619:12;22633:23;22658:12;22672:18;22692:16;22712:19;22723:7;22712:10;:19::i;:::-;22576:155;;;;;;;;;;;;;;22760:28;22780:7;22760;:15;22768:6;22760:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22742:7;:15;22750:6;22742:15;;;;;;;;;;;;;;;:46;;;;22817:28;22837:7;22817;:15;22825:6;22817:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22799:7;:15;22807:6;22799:15;;;;;;;;;;;;;;;:46;;;;22877:39;22900:15;22877:7;:18;22885:9;22877:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22856:7;:18;22864:9;22856:18;;;;;;;;;;;;;;;:60;;;;22948:39;22971:15;22948:7;:18;22956:9;22948:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22927:7;:18;22935:9;22927:18;;;;;;;;;;;;;;;:60;;;;23006:26;23021:10;23006:14;:26::i;:::-;23043:22;23056:8;23043:12;:22::i;:::-;23076:23;23088:4;23094;23076:11;:23::i;:::-;23132:9;23115:44;;23124:6;23115:44;;;23143:15;23115:44;;;;;;:::i;:::-;;;;;;;;22474:693;;;;;;;;;;:::o;28113:169::-;28167:15;;28157:7;:25;;;;28207:19;;28193:11;:33;;;;28253:21;;28237:13;:37;;;;28113:169::o;27271:154::-;27335:7;27362:55;27401:5;27362:20;27374:7;;27362;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;27355:62;;27271:154;;;:::o;27603:166::-;27673:7;27700:61;27745:5;27700:26;27712:13;;27700:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;27693:68;;27603:166;;;:::o;27433:162::-;27501:7;27528:59;27571:5;27528:24;27540:11;;27528:7;:11;;:24;;;;:::i;:::-;:28;;:59;;;;:::i;:::-;27521:66;;27433:162;;;:::o;26509:355::-;26572:19;26595:10;:8;:10::i;:::-;26572:33;;26616:18;26637:27;26652:11;26637:10;:14;;:27;;;;:::i;:::-;26616:48;;26700:38;26727:10;26700:7;:22;26716:4;26700:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26675:7;:22;26691:4;26675:22;;;;;;;;;;;;;;;:63;;;;26752:11;:26;26772:4;26752:26;;;;;;;;;;;;;;;;;;;;;;;;;26749:107;;;26818:38;26845:10;26818:7;:22;26834:4;26818:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26793:7;:22;26809:4;26793:22;;;;;;;;;;;;;;;:63;;;;26749:107;26509:355;;;:::o;26876:383::-;26935:19;26958:10;:8;:10::i;:::-;26935:33;;26979:16;26998:25;27011:11;26998:8;:12;;:25;;;;:::i;:::-;26979:44;;27067;27102:8;27067:7;:30;27075:21;;;;;;;;;;;27067:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;27034:7;:30;27042:21;;;;;;;;;;;27034:30;;;;;;;;;;;;;;;:77;;;;27125:11;:34;27137:21;;;;;;;;;;;27125:34;;;;;;;;;;;;;;;;;;;;;;;;;27122:129;;;27207:44;27242:8;27207:7;:30;27215:21;;;;;;;;;;;27207:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;27174:7;:30;27182:21;;;;;;;;;;;27174:30;;;;;;;;;;;;;;;:77;;;;27122:129;26876:383;;;:::o;24183:147::-;24261:17;24273:4;24261:7;;:11;;:17;;;;:::i;:::-;24251:7;:27;;;;24302:20;24317:4;24302:10;;:14;;:20;;;;:::i;:::-;24289:10;:33;;;;24183:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:118::-;11158:24;11176:5;11158:24;:::i;:::-;11153:3;11146:37;11136:53;;:::o;11195:112::-;11278:22;11294:5;11278:22;:::i;:::-;11273:3;11266:35;11256:51;;:::o;11313:222::-;;11444:2;11433:9;11429:18;11421:26;;11457:71;11525:1;11514:9;11510:17;11501:6;11457:71;:::i;:::-;11411:124;;;;:::o;11541:332::-;;11700:2;11689:9;11685:18;11677:26;;11713:71;11781:1;11770:9;11766:17;11757:6;11713:71;:::i;:::-;11794:72;11862:2;11851:9;11847:18;11838:6;11794:72;:::i;:::-;11667:206;;;;;:::o;11879:807::-;;12166:3;12155:9;12151:19;12143:27;;12180:71;12248:1;12237:9;12233:17;12224:6;12180:71;:::i;:::-;12261:72;12329:2;12318:9;12314:18;12305:6;12261:72;:::i;:::-;12343:80;12419:2;12408:9;12404:18;12395:6;12343:80;:::i;:::-;12433;12509:2;12498:9;12494:18;12485:6;12433:80;:::i;:::-;12523:73;12591:3;12580:9;12576:19;12567:6;12523:73;:::i;:::-;12606;12674:3;12663:9;12659:19;12650:6;12606:73;:::i;:::-;12133:553;;;;;;;;;:::o;12692:210::-;;12817:2;12806:9;12802:18;12794:26;;12830:65;12892:1;12881:9;12877:17;12868:6;12830:65;:::i;:::-;12784:118;;;;:::o;12908:276::-;;13066:2;13055:9;13051:18;13043:26;;13079:98;13174:1;13163:9;13159:17;13150:6;13079:98;:::i;:::-;13033:151;;;;:::o;13190:313::-;;13341:2;13330:9;13326:18;13318:26;;13390:9;13384:4;13380:20;13376:1;13365:9;13361:17;13354:47;13418:78;13491:4;13482:6;13418:78;:::i;:::-;13410:86;;13308:195;;;;:::o;13509:419::-;;13713:2;13702:9;13698:18;13690:26;;13762:9;13756:4;13752:20;13748:1;13737:9;13733:17;13726:47;13790:131;13916:4;13790:131;:::i;:::-;13782:139;;13680:248;;;:::o;13934:419::-;;14138:2;14127:9;14123:18;14115:26;;14187:9;14181:4;14177:20;14173:1;14162:9;14158:17;14151:47;14215:131;14341:4;14215:131;:::i;:::-;14207:139;;14105:248;;;:::o;14359:419::-;;14563:2;14552:9;14548:18;14540:26;;14612:9;14606:4;14602:20;14598:1;14587:9;14583:17;14576:47;14640:131;14766:4;14640:131;:::i;:::-;14632:139;;14530:248;;;:::o;14784:419::-;;14988:2;14977:9;14973:18;14965:26;;15037:9;15031:4;15027:20;15023:1;15012:9;15008:17;15001:47;15065:131;15191:4;15065:131;:::i;:::-;15057:139;;14955:248;;;:::o;15209:419::-;;15413:2;15402:9;15398:18;15390:26;;15462:9;15456:4;15452:20;15448:1;15437:9;15433:17;15426:47;15490:131;15616:4;15490:131;:::i;:::-;15482:139;;15380:248;;;:::o;15634:419::-;;15838:2;15827:9;15823:18;15815:26;;15887:9;15881:4;15877:20;15873:1;15862:9;15858:17;15851:47;15915:131;16041:4;15915:131;:::i;:::-;15907:139;;15805:248;;;:::o;16059:419::-;;16263:2;16252:9;16248:18;16240:26;;16312:9;16306:4;16302:20;16298:1;16287:9;16283:17;16276:47;16340:131;16466:4;16340:131;:::i;:::-;16332:139;;16230:248;;;:::o;16484:419::-;;16688:2;16677:9;16673:18;16665:26;;16737:9;16731:4;16727:20;16723:1;16712:9;16708:17;16701:47;16765:131;16891:4;16765:131;:::i;:::-;16757:139;;16655:248;;;:::o;16909:419::-;;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:131;17316:4;17190:131;:::i;:::-;17182:139;;17080:248;;;:::o;17334:419::-;;17538:2;17527:9;17523:18;17515:26;;17587:9;17581:4;17577:20;17573:1;17562:9;17558:17;17551:47;17615:131;17741:4;17615:131;:::i;:::-;17607:139;;17505:248;;;:::o;17759:419::-;;17963:2;17952:9;17948:18;17940:26;;18012:9;18006:4;18002:20;17998:1;17987:9;17983:17;17976:47;18040:131;18166:4;18040:131;:::i;:::-;18032:139;;17930:248;;;:::o;18184:419::-;;18388:2;18377:9;18373:18;18365:26;;18437:9;18431:4;18427:20;18423:1;18412:9;18408:17;18401:47;18465:131;18591:4;18465:131;:::i;:::-;18457:139;;18355:248;;;:::o;18609:419::-;;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18780:248;;;:::o;19034:222::-;;19165:2;19154:9;19150:18;19142:26;;19178:71;19246:1;19235:9;19231:17;19222:6;19178:71;:::i;:::-;19132:124;;;;:::o;19262:831::-;;19563:3;19552:9;19548:19;19540:27;;19577:71;19645:1;19634:9;19630:17;19621:6;19577:71;:::i;:::-;19658:80;19734:2;19723:9;19719:18;19710:6;19658:80;:::i;:::-;19785:9;19779:4;19775:20;19770:2;19759:9;19755:18;19748:48;19813:108;19916:4;19907:6;19813:108;:::i;:::-;19805:116;;19931:72;19999:2;19988:9;19984:18;19975:6;19931:72;:::i;:::-;20013:73;20081:3;20070:9;20066:19;20057:6;20013:73;:::i;:::-;19530:563;;;;;;;;:::o;20099:442::-;;20286:2;20275:9;20271:18;20263:26;;20299:71;20367:1;20356:9;20352:17;20343:6;20299:71;:::i;:::-;20380:72;20448:2;20437:9;20433:18;20424:6;20380:72;:::i;:::-;20462;20530:2;20519:9;20515:18;20506:6;20462:72;:::i;:::-;20253:288;;;;;;:::o;20547:214::-;;20674:2;20663:9;20659:18;20651:26;;20687:67;20751:1;20740:9;20736:17;20727:6;20687:67;:::i;:::-;20641:120;;;;:::o;20767:132::-;;20857:3;20849:11;;20887:4;20882:3;20878:14;20870:22;;20839:60;;;:::o;20905:114::-;;21006:5;21000:12;20990:22;;20979:40;;;:::o;21025:99::-;;21111:5;21105:12;21095:22;;21084:40;;;:::o;21130:113::-;;21232:4;21227:3;21223:14;21215:22;;21205:38;;;:::o;21249:184::-;;21382:6;21377:3;21370:19;21422:4;21417:3;21413:14;21398:29;;21360:73;;;;:::o;21439:169::-;;21557:6;21552:3;21545:19;21597:4;21592:3;21588:14;21573:29;;21535:73;;;;:::o;21614:305::-;;21673:20;21691:1;21673:20;:::i;:::-;21668:25;;21707:20;21725:1;21707:20;:::i;:::-;21702:25;;21861:1;21793:66;21789:74;21786:1;21783:81;21780:2;;;21867:18;;:::i;:::-;21780:2;21911:1;21908;21904:9;21897:16;;21658:261;;;;:::o;21925:185::-;;21982:20;22000:1;21982:20;:::i;:::-;21977:25;;22016:20;22034:1;22016:20;:::i;:::-;22011:25;;22055:1;22045:2;;22060:18;;:::i;:::-;22045:2;22102:1;22099;22095:9;22090:14;;21967:143;;;;:::o;22116:348::-;;22179:20;22197:1;22179:20;:::i;:::-;22174:25;;22213:20;22231:1;22213:20;:::i;:::-;22208:25;;22401:1;22333:66;22329:74;22326:1;22323:81;22318:1;22311:9;22304:17;22300:105;22297:2;;;22408:18;;:::i;:::-;22297:2;22456:1;22453;22449:9;22438:20;;22164:300;;;;:::o;22470:191::-;;22530:20;22548:1;22530:20;:::i;:::-;22525:25;;22564:20;22582:1;22564:20;:::i;:::-;22559:25;;22603:1;22600;22597:8;22594:2;;;22608:18;;:::i;:::-;22594:2;22653:1;22650;22646:9;22638:17;;22515:146;;;;:::o;22667:96::-;;22733:24;22751:5;22733:24;:::i;:::-;22722:35;;22712:51;;;:::o;22769:90::-;;22846:5;22839:13;22832:21;22821:32;;22811:48;;;:::o;22865:126::-;;22942:42;22935:5;22931:54;22920:65;;22910:81;;;:::o;22997:77::-;;23063:5;23052:16;;23042:32;;;:::o;23080:86::-;;23155:4;23148:5;23144:16;23133:27;;23123:43;;;:::o;23172:180::-;;23282:64;23340:5;23282:64;:::i;:::-;23269:77;;23259:93;;;:::o;23358:140::-;;23468:24;23486:5;23468:24;:::i;:::-;23455:37;;23445:53;;;:::o;23504:121::-;;23595:24;23613:5;23595:24;:::i;:::-;23582:37;;23572:53;;;:::o;23631:307::-;23699:1;23709:113;23723:6;23720:1;23717:13;23709:113;;;23808:1;23803:3;23799:11;23793:18;23789:1;23784:3;23780:11;23773:39;23745:2;23742:1;23738:10;23733:15;;23709:113;;;23840:6;23837:1;23834:13;23831:2;;;23920:1;23911:6;23906:3;23902:16;23895:27;23831:2;23680:258;;;;:::o;23944:320::-;;24025:1;24019:4;24015:12;24005:22;;24072:1;24066:4;24062:12;24093:18;24083:2;;24149:4;24141:6;24137:17;24127:27;;24083:2;24211;24203:6;24200:14;24180:18;24177:38;24174:2;;;24230:18;;:::i;:::-;24174:2;23995:269;;;;:::o;24270:233::-;;24332:24;24350:5;24332:24;:::i;:::-;24323:33;;24378:66;24371:5;24368:77;24365:2;;;24448:18;;:::i;:::-;24365:2;24495:1;24488:5;24484:13;24477:20;;24313:190;;;:::o;24509:180::-;24557:77;24554:1;24547:88;24654:4;24651:1;24644:15;24678:4;24675:1;24668:15;24695:180;24743:77;24740:1;24733:88;24840:4;24837:1;24830:15;24864:4;24861:1;24854:15;24881:180;24929:77;24926:1;24919:88;25026:4;25023:1;25016:15;25050:4;25047:1;25040:15;25067:102;;25159:2;25155:7;25150:2;25143:5;25139:14;25135:28;25125:38;;25115:54;;;:::o;25175:222::-;25315:34;25311:1;25303:6;25299:14;25292:58;25384:5;25379:2;25371:6;25367:15;25360:30;25281:116;:::o;25403:229::-;25543:34;25539:1;25531:6;25527:14;25520:58;25612:12;25607:2;25599:6;25595:15;25588:37;25509:123;:::o;25638:225::-;25778:34;25774:1;25766:6;25762:14;25755:58;25847:8;25842:2;25834:6;25830:15;25823:33;25744:119;:::o;25869:221::-;26009:34;26005:1;25997:6;25993:14;25986:58;26078:4;26073:2;26065:6;26061:15;26054:29;25975:115;:::o;26096:177::-;26236:29;26232:1;26224:6;26220:14;26213:53;26202:71;:::o;26279:177::-;26419:29;26415:1;26407:6;26403:14;26396:53;26385:71;:::o;26462:181::-;26602:33;26598:1;26590:6;26586:14;26579:57;26568:75;:::o;26649:227::-;26789:34;26785:1;26777:6;26773:14;26766:58;26858:10;26853:2;26845:6;26841:15;26834:35;26755:121;:::o;26882:182::-;27022:34;27018:1;27010:6;27006:14;26999:58;26988:76;:::o;27070:228::-;27210:34;27206:1;27198:6;27194:14;27187:58;27279:11;27274:2;27266:6;27262:15;27255:36;27176:122;:::o;27304:224::-;27444:34;27440:1;27432:6;27428:14;27421:58;27513:7;27508:2;27500:6;27496:15;27489:32;27410:118;:::o;27534:223::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:6;27738:2;27730:6;27726:15;27719:31;27640:117;:::o;27763:231::-;27903:34;27899:1;27891:6;27887:14;27880:58;27972:14;27967:2;27959:6;27955:15;27948:39;27869:125;:::o;28000:122::-;28073:24;28091:5;28073:24;:::i;:::-;28066:5;28063:35;28053:2;;28112:1;28109;28102:12;28053:2;28043:79;:::o;28128:116::-;28198:21;28213:5;28198:21;:::i;:::-;28191:5;28188:32;28178:2;;28234:1;28231;28224:12;28178:2;28168:76;:::o;28250:122::-;28323:24;28341:5;28323:24;:::i;:::-;28316:5;28313:35;28303:2;;28362:1;28359;28352:12;28303:2;28293:79;:::o

Swarm Source

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