ETH Price: $2,304.72 (+0.98%)

Token

Snowball Inu (SNOW)
 

Overview

Max Total Supply

1,000,000,000,000 SNOW

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
12,769,280.584373167 SNOW

Value
$0.00
0x9e23c36e460b18c2c065e396dd38e2d73c2f2e44
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:
Snowballinu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-25
*/

// Passively snowball your income with Snowball Inu

// Telegram: t.me/snowballinu 

// Twitter: https://twitter.com/Snowballinu

// Website: https://www.snowballinu.com/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

}  

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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 IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract Snowballinu 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;

    mapping(address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    address payable public _marketingAddress = payable(0xF4487b1b9D29A26F3929c3f8c98d222f929B710B);
    address payable public _liquidityAddress = payable(0x6baDe4310b0408cc0F54A3044f98Cb261d2fA5BE);

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1 * 10**12 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Snowball Inu";
    string private _symbol = "SNOW";
    uint8 private _decimals = 9;
    
    //placeholders, get overwritten with every transaction 
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _marketingFee = 7;
    uint256 private _previousmarketingFee = _marketingFee;

    uint256 public _buyMarketingFee = 7;
    uint256 public _sellMarketingFee = 9;

    uint256 launchTime;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool tradingOpen = false;

    uint256 public _maxTxAmount = 3 * 10**9 * 10**9;

    // Liquify when 2b tokens are stored
    uint256 private numTokensSellToLiquify = 2 * 10**9 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    event TransferToMarketing(uint256 ethTransferred);
    event TransferToLiquidity(uint256 ethTransferred);

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

    constructor () {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_liquidityAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function openTrading() external onlyOwner {
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function 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 setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

    //to receive ETH from uniswapV2Router when swapping
    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 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculatemarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousmarketingFee = _marketingFee;

        _taxFee = 0;
        _marketingFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousmarketingFee;
    }

    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");
        require(!_isSniper[to], 'You have no power here!');
        require(!_isSniper[from], 'You have no power here!');
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        // buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, 'Trading not yet enabled.');

            //antibot
            if (block.timestamp <= launchTime + (30 seconds)) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToLiquify;
        if (
            overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToLiquify;
            swapAndLiquify(contractTokenBalance);
        }
        _marketingFee = _buyMarketingFee;
        // toggle between buy and sell tax
        if (to == uniswapV2Pair && from != address(uniswapV2Router) && ! _isExcludedFromFee[from]) {
            _marketingFee = _sellMarketingFee;
        }
        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        // capture the contract's current eth balance.
        // this is so that we can capture exactly the amount of eth that the
        // swap creates, and not make the liquidity event include any eth that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for eth
        swapTokensForEth(contractTokenBalance);

        // Total eth that has been swapped
        uint256 ethSwapped = address(this).balance.sub(initialBalance);

        emit SwapAndLiquify(contractTokenBalance, ethSwapped);

        // The remaining eth balance is to be Transferred to the marketing wallet
        uint256 marketingEthToTransfer = ethSwapped.div(7).mul(4);
        uint256 liquidityEthToTransfer = ethSwapped.sub(marketingEthToTransfer);

        // Transfer the eth to the marketing wallet
        _marketingAddress.transfer(marketingEthToTransfer);
        emit TransferToMarketing(marketingEthToTransfer);
        _liquidityAddress.transfer(liquidityEthToTransfer);
        emit TransferToLiquidity(liquidityEthToTransfer);
    }

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function isRemovedSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function _removeSniper(address account) external onlyOwner {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            'We can not blacklist Uniswap'
        );
        require(!_isSniper[account], 'Account is already blacklisted');
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function _amnestySniper(address account) external onlyOwner {
        require(_isSniper[account], 'Account is not blacklisted');
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }
}

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"}],"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethTransferred","type":"uint256"}],"name":"TransferToLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethTransferred","type":"uint256"}],"name":"TransferToMarketing","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_sellMarketingFee","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","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":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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":[],"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"}]

60c060405273f4487b1b9d29a26f3929c3f8c98d222f929b710b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736bade4310b0408cc0f54a3044f98cb261d2fa5be600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550683635c9adc5dea00000600c55600c54600019620000cd9190620009ab565b600019620000dc9190620008fc565b600d556040518060400160405280600c81526020017f536e6f7762616c6c20496e750000000000000000000000000000000000000000815250600f90805190602001906200012c92919062000797565b506040518060400160405280600481526020017f534e4f5700000000000000000000000000000000000000000000000000000000815250601090805190602001906200017a92919062000797565b506009601160006101000a81548160ff021916908360ff16021790555060036012556012546013556007601455601454601555600760165560096017556001601960016101000a81548160ff0219169083151502179055506000601960026101000a81548160ff0219169083151502179055506729a2241af62c0000601a55671bc16d674ec80000601b553480156200021257600080fd5b506000620002256200076660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d5460026000620002da6200076660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037857600080fd5b505afa1580156200038d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b391906200085e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041657600080fd5b505afa1580156200042b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045191906200085e565b6040518363ffffffff1660e01b815260040162000470929190620008b2565b602060405180830381600087803b1580156200048b57600080fd5b505af1158015620004a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c691906200085e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620005496200076e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006f66200076660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620007579190620008df565b60405180910390a35062000a8f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620007a59062000975565b90600052602060002090601f016020900481019282620007c9576000855562000815565b82601f10620007e457805160ff191683800117855562000815565b8280016001018555821562000815579182015b8281111562000814578251825591602001919060010190620007f7565b5b50905062000824919062000828565b5090565b5b808211156200084357600081600090555060010162000829565b5090565b600081519050620008588162000a75565b92915050565b60006020828403121562000877576200087662000a70565b5b6000620008878482850162000847565b91505092915050565b6200089b8162000937565b82525050565b620008ac816200096b565b82525050565b6000604082019050620008c9600083018562000890565b620008d8602083018462000890565b9392505050565b6000602082019050620008f66000830184620008a1565b92915050565b600062000909826200096b565b915062000916836200096b565b9250828210156200092c576200092b620009e3565b5b828203905092915050565b600062000944826200094b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200098e57607f821691505b60208210811415620009a557620009a462000a41565b5b50919050565b6000620009b8826200096b565b9150620009c5836200096b565b925082620009d857620009d762000a12565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b62000a808162000937565b811462000a8c57600080fd5b50565b60805160601c60a05160601c61590c62000af360003960008181611584015281816128e201528181612b300152612bb6015260008181610ac40152818161293801528181612c0c0152818161395901528181613a490152613a70015261590c6000f3fe6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063caac79341161006f578063caac793414610886578063d543dbeb146108b1578063dd62ed3e146108da578063ea2f0b3714610917578063f375b253146109405761023b565b8063a9059cbb146107b3578063c49b9a80146107f0578063c5d2418914610819578063c860795214610844578063c9567bf91461086f5761023b565b80637d1db4a5116100f25780637d1db4a5146106b857806388f82020146106e35780638da5cb5b1461072057806395d89b411461074b578063a457c2d7146107765761023b565b80635342acb4146105bf578063610d5b19146105fc5780636c6ac3291461063957806370a0823114610664578063715018a6146106a15761023b565b8063313ce567116101bc578063437823ec11610180578063437823ec146104da5780634549b0391461050357806349bd5a5e146105405780634a74bb021461056b57806352390c02146105965761023b565b8063313ce567146103f5578063362a3c5d146104205780633685d4191461044957806339509351146104725780633b124fe7146104af5761023b565b80631694505e116102035780631694505e146102fc57806318160ddd1461032757806323b872dd1461035257806329e04b4a1461038f5780632d838119146103b85761023b565b8063061c82d01461024057806306fdde0314610269578063095ea7b31461029457806313114a9d146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190614916565b610969565b005b34801561027557600080fd5b5061027e610a08565b60405161028b9190614d69565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b691906148a9565b610a9a565b6040516102c89190614d33565b60405180910390f35b3480156102dd57600080fd5b506102e6610ab8565b6040516102f39190614fab565b60405180910390f35b34801561030857600080fd5b50610311610ac2565b60405161031e9190614d4e565b60405180910390f35b34801561033357600080fd5b5061033c610ae6565b6040516103499190614fab565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614856565b610af0565b6040516103869190614d33565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190614916565b610bc9565b005b3480156103c457600080fd5b506103df60048036038101906103da9190614916565b610c77565b6040516103ec9190614fab565b60405180910390f35b34801561040157600080fd5b5061040a610ce5565b6040516104179190615049565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906147bc565b610cfc565b005b34801561045557600080fd5b50610470600480360381019061046b91906147bc565b611006565b005b34801561047e57600080fd5b50610499600480360381019061049491906148a9565b611355565b6040516104a69190614d33565b60405180910390f35b3480156104bb57600080fd5b506104c4611408565b6040516104d19190614fab565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906147bc565b61140e565b005b34801561050f57600080fd5b5061052a60048036038101906105259190614943565b6114fe565b6040516105379190614fab565b60405180910390f35b34801561054c57600080fd5b50610555611582565b6040516105629190614cfd565b60405180910390f35b34801561057757600080fd5b506105806115a6565b60405161058d9190614d33565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906147bc565b6115b9565b005b3480156105cb57600080fd5b506105e660048036038101906105e191906147bc565b61186d565b6040516105f39190614d33565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906147bc565b6118c3565b6040516106309190614d33565b60405180910390f35b34801561064557600080fd5b5061064e611919565b60405161065b9190614d18565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906147bc565b61193f565b6040516106989190614fab565b60405180910390f35b3480156106ad57600080fd5b506106b6611a2a565b005b3480156106c457600080fd5b506106cd611b7d565b6040516106da9190614fab565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906147bc565b611b83565b6040516107179190614d33565b60405180910390f35b34801561072c57600080fd5b50610735611bd9565b6040516107429190614cfd565b60405180910390f35b34801561075757600080fd5b50610760611c02565b60405161076d9190614d69565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906148a9565b611c94565b6040516107aa9190614d33565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906148a9565b611d61565b6040516107e79190614d33565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906148e9565b611d7f565b005b34801561082557600080fd5b5061082e611e68565b60405161083b9190614fab565b60405180910390f35b34801561085057600080fd5b50610859611e6e565b6040516108669190614fab565b60405180910390f35b34801561087b57600080fd5b50610884611e74565b005b34801561089257600080fd5b5061089b611f2d565b6040516108a89190614d18565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190614916565b611f53565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190614816565b612019565b60405161090e9190614fab565b60405180910390f35b34801561092357600080fd5b5061093e600480360381019061093991906147bc565b6120a0565b005b34801561094c57600080fd5b50610967600480360381019061096291906147bc565b612190565b005b6109716123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f590614eab565b60405180910390fd5b8060128190555050565b6060600f8054610a17906152b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a43906152b0565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b6000610aae610aa76123f3565b84846123fb565b6001905092915050565b6000600e54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600c54905090565b6000610afd8484846125c6565b610bbe84610b096123f3565b610bb98560405180606001604052806028815260200161588a60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b6f6123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d859092919063ffffffff16565b6123fb565b600190509392505050565b610bd16123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614eab565b60405180910390fd5b633b9aca0081610c6e9190615140565b601b8190555050565b6000600d54821115610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614dab565b60405180910390fd5b6000610cc8612de9565b9050610cdd8184612e1490919063ffffffff16565b915050919050565b6000601160009054906101000a900460ff16905090565b610d046123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890614eab565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614eeb565b60405180910390fd5b60005b600980549050811015611002578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e5857610e576153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fef5760096001600980549050610eb3919061519a565b81548110610ec457610ec36153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610f0357610f026153e7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610fb557610fb46153b8565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611002565b8080610ffa906152e2565b915050610e20565b5050565b61100e6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614eab565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90614e0b565b60405180910390fd5b60005b600780549050811015611351578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611162576111616153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561133e57600760016007805490506111bd919061519a565b815481106111ce576111cd6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061120d5761120c6153e7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611304576113036153b8565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611351565b8080611349906152e2565b91505061112a565b5050565b60006113fe6113626123f3565b846113f985600460006113736123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b6123fb565b6001905092915050565b60125481565b6114166123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90614eab565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614e4b565b60405180910390fd5b8161156557600061155584612ebc565b505050505090508091505061157c565b600061157084612ebc565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960019054906101000a900460ff1681565b6115c16123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614eab565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614e0b565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117af5761176b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c77565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119da57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a25565b611a22600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c77565b90505b919050565b611a326123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614eab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054611c11906152b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3d906152b0565b8015611c8a5780601f10611c5f57610100808354040283529160200191611c8a565b820191906000526020600020905b815481529060010190602001808311611c6d57829003601f168201915b5050505050905090565b6000611d57611ca16123f3565b84611d52856040518060600160405280602581526020016158b26025913960046000611ccb6123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d859092919063ffffffff16565b6123fb565b6001905092915050565b6000611d75611d6e6123f3565b84846125c6565b6001905092915050565b611d876123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614eab565b60405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611e5d9190614d33565b60405180910390a150565b60165481565b60175481565b611e7c6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090614eab565b60405180910390fd5b6001601960026101000a81548160ff02191690831515021790555042601881905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f5b6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614eab565b60405180910390fd5b612010606461200283600c54612f1890919063ffffffff16565b612e1490919063ffffffff16565b601a8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120a86123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614eab565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121986123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90614eab565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90614f0b565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614e2b565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290614dcb565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125b99190614fab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90614f2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614d8b565b60405180910390fd5b600081116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614ecb565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90614f8b565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa90614f8b565b60405180910390fd5b61280b611bd9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128795750612849611bd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128c457601a548111156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614e6b565b60405180910390fd5b5b60006128cf3061193f565b9050601a5481106128e057601a5490505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561298757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129dd5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0357601960029054906101000a900460ff16612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614f6b565b60405180910390fd5b601e601854612a4091906150b9565b4211612b02576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000601b548210159050808015612b275750601960009054906101000a900460ff16155b8015612b7f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b975750601960019054906101000a900460ff165b15612bab57601b549150612baa82612f93565b5b6016546014819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c5b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb15750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc0576017546014819055505b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d675750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7157600090505b612d7d868686846131b0565b505050505050565b6000838311158290612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc49190614d69565b60405180910390fd5b5060008385612ddc919061519a565b9050809150509392505050565b6000806000612df66134c1565b91509150612e0d8183612e1490919063ffffffff16565b9250505090565b6000612e5683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613774565b905092915050565b6000808284612e6d91906150b9565b905083811015612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea990614deb565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ed38a6137d7565b9250925092506000806000612ef18d8686612eec612de9565b613831565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600080831415612f2b5760009050612f8d565b60008284612f399190615140565b9050828482612f48919061510f565b14612f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7f90614e8b565b60405180910390fd5b809150505b92915050565b6001601960006101000a81548160ff0219169083151502179055506000479050612fbc826138ba565b6000612fd18247613b0690919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051613004929190615020565b60405180910390a160006130356004613027600785612e1490919063ffffffff16565b612f1890919063ffffffff16565b9050600061304c8284613b0690919063ffffffff16565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156130b6573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e826040516130e69190614fab565b60405180910390a1600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613156573d6000803e3d6000fd5b507f1901eba822ca3f5a8fa355100a3824dbf83003c3cf48d381b04b4ac223905cb1816040516131869190614fab565b60405180910390a1505050506000601960006101000a81548160ff02191690831515021790555050565b806131be576131bd613b50565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132615750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561327657613271848484613b93565b6134ad565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133195750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332e57613329848484613df3565b6134ac565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133d25750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133e7576133e2848484614053565b6134ab565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134895750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561349e5761349984848461421e565b6134aa565b6134a9848484614053565b5b5b5b5b806134bb576134ba614513565b5b50505050565b6000806000600d5490506000600c54905060005b600780549050811015613737578260026000600784815481106134fb576134fa6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135e95750816003600060078481548110613581576135806153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360057600d54600c5494509450505050613770565b613690600260006007848154811061361b5761361a6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613b0690919063ffffffff16565b925061372260036000600784815481106136ad576136ac6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613b0690919063ffffffff16565b9150808061372f906152e2565b9150506134d5565b5061374f600c54600d54612e1490919063ffffffff16565b82101561376757600d54600c54935093505050613770565b81819350935050505b9091565b600080831182906137bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b29190614d69565b60405180910390fd5b50600083856137ca919061510f565b9050809150509392505050565b6000806000806137e685614527565b905060006137f386614558565b9050600061381c8261380e858a613b0690919063ffffffff16565b613b0690919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061384a8589612f1890919063ffffffff16565b905060006138618689612f1890919063ffffffff16565b905060006138788789612f1890919063ffffffff16565b905060006138a1826138938587613b0690919063ffffffff16565b613b0690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138d7576138d6615416565b5b6040519080825280602002602001820160405280156139055781602001602082028036833780820191505090505b509050308160008151811061391d5761391c6153e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906147e9565b81600181518110613a0957613a086153e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6e307f0000000000000000000000000000000000000000000000000000000000000000846123fb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad0959493929190614fc6565b600060405180830381600087803b158015613aea57600080fd5b505af1158015613afe573d6000803e3d6000fd5b505050505050565b6000613b4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d85565b905092915050565b6000601254148015613b6457506000601454145b15613b6e57613b91565b601254601381905550601454601581905550600060128190555060006014819055505b565b600080600080600080613ba587612ebc565b955095509550955095509550613c0387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7981614589565b613d83848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613de09190614fab565b60405180910390a3505050505050505050565b600080600080600080613e0587612ebc565b955095509550955095509550613e6386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd981614589565b613fe3848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140409190614fab565b60405180910390a3505050505050505050565b60008060008060008061406587612ebc565b9550955095509550955095506140c386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141a481614589565b6141ae848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161420b9190614fab565b60405180910390a3505050505050505050565b60008060008060008061423087612ebc565b95509550955095509550955061428e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061432386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449981614589565b6144a3848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145009190614fab565b60405180910390a3505050505050505050565b601354601281905550601554601481905550565b6000614551606461454360125485612f1890919063ffffffff16565b612e1490919063ffffffff16565b9050919050565b6000614582606461457460145485612f1890919063ffffffff16565b612e1490919063ffffffff16565b9050919050565b6000614593612de9565b905060006145aa8284612f1890919063ffffffff16565b90506145fe81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614729576146e583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61474382600d54613b0690919063ffffffff16565b600d8190555061475e81600e54612e5e90919063ffffffff16565b600e819055505050565b60008135905061477781615844565b92915050565b60008151905061478c81615844565b92915050565b6000813590506147a18161585b565b92915050565b6000813590506147b681615872565b92915050565b6000602082840312156147d2576147d1615445565b5b60006147e084828501614768565b91505092915050565b6000602082840312156147ff576147fe615445565b5b600061480d8482850161477d565b91505092915050565b6000806040838503121561482d5761482c615445565b5b600061483b85828601614768565b925050602061484c85828601614768565b9150509250929050565b60008060006060848603121561486f5761486e615445565b5b600061487d86828701614768565b935050602061488e86828701614768565b925050604061489f868287016147a7565b9150509250925092565b600080604083850312156148c0576148bf615445565b5b60006148ce85828601614768565b92505060206148df858286016147a7565b9150509250929050565b6000602082840312156148ff576148fe615445565b5b600061490d84828501614792565b91505092915050565b60006020828403121561492c5761492b615445565b5b600061493a848285016147a7565b91505092915050565b6000806040838503121561495a57614959615445565b5b6000614968858286016147a7565b925050602061497985828601614792565b9150509250929050565b600061498f83836149aa565b60208301905092915050565b6149a4816151e0565b82525050565b6149b3816151ce565b82525050565b6149c2816151ce565b82525050565b60006149d382615074565b6149dd8185615097565b93506149e883615064565b8060005b83811015614a19578151614a008882614983565b9750614a0b8361508a565b9250506001810190506149ec565b5085935050505092915050565b614a2f816151f2565b82525050565b614a3e81615235565b82525050565b614a4d81615247565b82525050565b6000614a5e8261507f565b614a6881856150a8565b9350614a7881856020860161527d565b614a818161544a565b840191505092915050565b6000614a996023836150a8565b9150614aa48261545b565b604082019050919050565b6000614abc602a836150a8565b9150614ac7826154aa565b604082019050919050565b6000614adf6022836150a8565b9150614aea826154f9565b604082019050919050565b6000614b02601b836150a8565b9150614b0d82615548565b602082019050919050565b6000614b25601b836150a8565b9150614b3082615571565b602082019050919050565b6000614b48601e836150a8565b9150614b538261559a565b602082019050919050565b6000614b6b601f836150a8565b9150614b76826155c3565b602082019050919050565b6000614b8e6028836150a8565b9150614b99826155ec565b604082019050919050565b6000614bb16021836150a8565b9150614bbc8261563b565b604082019050919050565b6000614bd46020836150a8565b9150614bdf8261568a565b602082019050919050565b6000614bf76029836150a8565b9150614c02826156b3565b604082019050919050565b6000614c1a601a836150a8565b9150614c2582615702565b602082019050919050565b6000614c3d601c836150a8565b9150614c488261572b565b602082019050919050565b6000614c606025836150a8565b9150614c6b82615754565b604082019050919050565b6000614c836024836150a8565b9150614c8e826157a3565b604082019050919050565b6000614ca66018836150a8565b9150614cb1826157f2565b602082019050919050565b6000614cc96017836150a8565b9150614cd48261581b565b602082019050919050565b614ce88161521e565b82525050565b614cf781615228565b82525050565b6000602082019050614d1260008301846149b9565b92915050565b6000602082019050614d2d600083018461499b565b92915050565b6000602082019050614d486000830184614a26565b92915050565b6000602082019050614d636000830184614a35565b92915050565b60006020820190508181036000830152614d838184614a53565b905092915050565b60006020820190508181036000830152614da481614a8c565b9050919050565b60006020820190508181036000830152614dc481614aaf565b9050919050565b60006020820190508181036000830152614de481614ad2565b9050919050565b60006020820190508181036000830152614e0481614af5565b9050919050565b60006020820190508181036000830152614e2481614b18565b9050919050565b60006020820190508181036000830152614e4481614b3b565b9050919050565b60006020820190508181036000830152614e6481614b5e565b9050919050565b60006020820190508181036000830152614e8481614b81565b9050919050565b60006020820190508181036000830152614ea481614ba4565b9050919050565b60006020820190508181036000830152614ec481614bc7565b9050919050565b60006020820190508181036000830152614ee481614bea565b9050919050565b60006020820190508181036000830152614f0481614c0d565b9050919050565b60006020820190508181036000830152614f2481614c30565b9050919050565b60006020820190508181036000830152614f4481614c53565b9050919050565b60006020820190508181036000830152614f6481614c76565b9050919050565b60006020820190508181036000830152614f8481614c99565b9050919050565b60006020820190508181036000830152614fa481614cbc565b9050919050565b6000602082019050614fc06000830184614cdf565b92915050565b600060a082019050614fdb6000830188614cdf565b614fe86020830187614a44565b8181036040830152614ffa81866149c8565b905061500960608301856149b9565b6150166080830184614cdf565b9695505050505050565b60006040820190506150356000830185614cdf565b6150426020830184614cdf565b9392505050565b600060208201905061505e6000830184614cee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150c48261521e565b91506150cf8361521e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151045761510361532b565b5b828201905092915050565b600061511a8261521e565b91506151258361521e565b9250826151355761513461535a565b5b828204905092915050565b600061514b8261521e565b91506151568361521e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561518f5761518e61532b565b5b828202905092915050565b60006151a58261521e565b91506151b08361521e565b9250828210156151c3576151c261532b565b5b828203905092915050565b60006151d9826151fe565b9050919050565b60006151eb826151fe565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061524082615259565b9050919050565b60006152528261521e565b9050919050565b60006152648261526b565b9050919050565b6000615276826151fe565b9050919050565b60005b8381101561529b578082015181840152602081019050615280565b838111156152aa576000848401525b50505050565b600060028204905060018216806152c857607f821691505b602082108114156152dc576152db615389565b5b50919050565b60006152ed8261521e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153205761531f61532b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b61584d816151ce565b811461585857600080fd5b50565b615864816151f2565b811461586f57600080fd5b50565b61587b8161521e565b811461588657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204f2d83b36c4e0d56cd1eb5ecd30117a0a069b17f507bce111f59432fcffa6d2864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063caac79341161006f578063caac793414610886578063d543dbeb146108b1578063dd62ed3e146108da578063ea2f0b3714610917578063f375b253146109405761023b565b8063a9059cbb146107b3578063c49b9a80146107f0578063c5d2418914610819578063c860795214610844578063c9567bf91461086f5761023b565b80637d1db4a5116100f25780637d1db4a5146106b857806388f82020146106e35780638da5cb5b1461072057806395d89b411461074b578063a457c2d7146107765761023b565b80635342acb4146105bf578063610d5b19146105fc5780636c6ac3291461063957806370a0823114610664578063715018a6146106a15761023b565b8063313ce567116101bc578063437823ec11610180578063437823ec146104da5780634549b0391461050357806349bd5a5e146105405780634a74bb021461056b57806352390c02146105965761023b565b8063313ce567146103f5578063362a3c5d146104205780633685d4191461044957806339509351146104725780633b124fe7146104af5761023b565b80631694505e116102035780631694505e146102fc57806318160ddd1461032757806323b872dd1461035257806329e04b4a1461038f5780632d838119146103b85761023b565b8063061c82d01461024057806306fdde0314610269578063095ea7b31461029457806313114a9d146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190614916565b610969565b005b34801561027557600080fd5b5061027e610a08565b60405161028b9190614d69565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b691906148a9565b610a9a565b6040516102c89190614d33565b60405180910390f35b3480156102dd57600080fd5b506102e6610ab8565b6040516102f39190614fab565b60405180910390f35b34801561030857600080fd5b50610311610ac2565b60405161031e9190614d4e565b60405180910390f35b34801561033357600080fd5b5061033c610ae6565b6040516103499190614fab565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614856565b610af0565b6040516103869190614d33565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190614916565b610bc9565b005b3480156103c457600080fd5b506103df60048036038101906103da9190614916565b610c77565b6040516103ec9190614fab565b60405180910390f35b34801561040157600080fd5b5061040a610ce5565b6040516104179190615049565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906147bc565b610cfc565b005b34801561045557600080fd5b50610470600480360381019061046b91906147bc565b611006565b005b34801561047e57600080fd5b50610499600480360381019061049491906148a9565b611355565b6040516104a69190614d33565b60405180910390f35b3480156104bb57600080fd5b506104c4611408565b6040516104d19190614fab565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906147bc565b61140e565b005b34801561050f57600080fd5b5061052a60048036038101906105259190614943565b6114fe565b6040516105379190614fab565b60405180910390f35b34801561054c57600080fd5b50610555611582565b6040516105629190614cfd565b60405180910390f35b34801561057757600080fd5b506105806115a6565b60405161058d9190614d33565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906147bc565b6115b9565b005b3480156105cb57600080fd5b506105e660048036038101906105e191906147bc565b61186d565b6040516105f39190614d33565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906147bc565b6118c3565b6040516106309190614d33565b60405180910390f35b34801561064557600080fd5b5061064e611919565b60405161065b9190614d18565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906147bc565b61193f565b6040516106989190614fab565b60405180910390f35b3480156106ad57600080fd5b506106b6611a2a565b005b3480156106c457600080fd5b506106cd611b7d565b6040516106da9190614fab565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906147bc565b611b83565b6040516107179190614d33565b60405180910390f35b34801561072c57600080fd5b50610735611bd9565b6040516107429190614cfd565b60405180910390f35b34801561075757600080fd5b50610760611c02565b60405161076d9190614d69565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906148a9565b611c94565b6040516107aa9190614d33565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906148a9565b611d61565b6040516107e79190614d33565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906148e9565b611d7f565b005b34801561082557600080fd5b5061082e611e68565b60405161083b9190614fab565b60405180910390f35b34801561085057600080fd5b50610859611e6e565b6040516108669190614fab565b60405180910390f35b34801561087b57600080fd5b50610884611e74565b005b34801561089257600080fd5b5061089b611f2d565b6040516108a89190614d18565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190614916565b611f53565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190614816565b612019565b60405161090e9190614fab565b60405180910390f35b34801561092357600080fd5b5061093e600480360381019061093991906147bc565b6120a0565b005b34801561094c57600080fd5b50610967600480360381019061096291906147bc565b612190565b005b6109716123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f590614eab565b60405180910390fd5b8060128190555050565b6060600f8054610a17906152b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a43906152b0565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b6000610aae610aa76123f3565b84846123fb565b6001905092915050565b6000600e54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600c54905090565b6000610afd8484846125c6565b610bbe84610b096123f3565b610bb98560405180606001604052806028815260200161588a60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b6f6123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d859092919063ffffffff16565b6123fb565b600190509392505050565b610bd16123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614eab565b60405180910390fd5b633b9aca0081610c6e9190615140565b601b8190555050565b6000600d54821115610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614dab565b60405180910390fd5b6000610cc8612de9565b9050610cdd8184612e1490919063ffffffff16565b915050919050565b6000601160009054906101000a900460ff16905090565b610d046123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890614eab565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614eeb565b60405180910390fd5b60005b600980549050811015611002578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e5857610e576153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fef5760096001600980549050610eb3919061519a565b81548110610ec457610ec36153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610f0357610f026153e7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610fb557610fb46153b8565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611002565b8080610ffa906152e2565b915050610e20565b5050565b61100e6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614eab565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90614e0b565b60405180910390fd5b60005b600780549050811015611351578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611162576111616153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561133e57600760016007805490506111bd919061519a565b815481106111ce576111cd6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061120d5761120c6153e7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611304576113036153b8565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611351565b8080611349906152e2565b91505061112a565b5050565b60006113fe6113626123f3565b846113f985600460006113736123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b6123fb565b6001905092915050565b60125481565b6114166123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90614eab565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c54831115611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614e4b565b60405180910390fd5b8161156557600061155584612ebc565b505050505090508091505061157c565b600061157084612ebc565b50505050915050809150505b92915050565b7f00000000000000000000000017879a6bce0fe7db032ff664f97766eb2b5b855d81565b601960019054906101000a900460ff1681565b6115c16123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614eab565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290614e0b565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156117af5761176b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c77565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119da57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a25565b611a22600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c77565b90505b919050565b611a326123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614eab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054611c11906152b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3d906152b0565b8015611c8a5780601f10611c5f57610100808354040283529160200191611c8a565b820191906000526020600020905b815481529060010190602001808311611c6d57829003601f168201915b5050505050905090565b6000611d57611ca16123f3565b84611d52856040518060600160405280602581526020016158b26025913960046000611ccb6123f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d859092919063ffffffff16565b6123fb565b6001905092915050565b6000611d75611d6e6123f3565b84846125c6565b6001905092915050565b611d876123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614eab565b60405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611e5d9190614d33565b60405180910390a150565b60165481565b60175481565b611e7c6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090614eab565b60405180910390fd5b6001601960026101000a81548160ff02191690831515021790555042601881905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f5b6123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614eab565b60405180910390fd5b612010606461200283600c54612f1890919063ffffffff16565b612e1490919063ffffffff16565b601a8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120a86123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614eab565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121986123f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90614eab565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90614f0b565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614e2b565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d290614dcb565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125b99190614fab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d90614f2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614d8b565b60405180910390fd5b600081116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614ecb565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90614f8b565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa90614f8b565b60405180910390fd5b61280b611bd9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128795750612849611bd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128c457601a548111156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614e6b565b60405180910390fd5b5b60006128cf3061193f565b9050601a5481106128e057601a5490505b7f00000000000000000000000017879a6bce0fe7db032ff664f97766eb2b5b855d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561298757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129dd5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0357601960029054906101000a900460ff16612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614f6b565b60405180910390fd5b601e601854612a4091906150b9565b4211612b02576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000601b548210159050808015612b275750601960009054906101000a900460ff16155b8015612b7f57507f00000000000000000000000017879a6bce0fe7db032ff664f97766eb2b5b855d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b975750601960019054906101000a900460ff165b15612bab57601b549150612baa82612f93565b5b6016546014819055507f00000000000000000000000017879a6bce0fe7db032ff664f97766eb2b5b855d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c5b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb15750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc0576017546014819055505b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d675750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7157600090505b612d7d868686846131b0565b505050505050565b6000838311158290612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc49190614d69565b60405180910390fd5b5060008385612ddc919061519a565b9050809150509392505050565b6000806000612df66134c1565b91509150612e0d8183612e1490919063ffffffff16565b9250505090565b6000612e5683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613774565b905092915050565b6000808284612e6d91906150b9565b905083811015612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea990614deb565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ed38a6137d7565b9250925092506000806000612ef18d8686612eec612de9565b613831565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600080831415612f2b5760009050612f8d565b60008284612f399190615140565b9050828482612f48919061510f565b14612f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7f90614e8b565b60405180910390fd5b809150505b92915050565b6001601960006101000a81548160ff0219169083151502179055506000479050612fbc826138ba565b6000612fd18247613b0690919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051613004929190615020565b60405180910390a160006130356004613027600785612e1490919063ffffffff16565b612f1890919063ffffffff16565b9050600061304c8284613b0690919063ffffffff16565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156130b6573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e826040516130e69190614fab565b60405180910390a1600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613156573d6000803e3d6000fd5b507f1901eba822ca3f5a8fa355100a3824dbf83003c3cf48d381b04b4ac223905cb1816040516131869190614fab565b60405180910390a1505050506000601960006101000a81548160ff02191690831515021790555050565b806131be576131bd613b50565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132615750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561327657613271848484613b93565b6134ad565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133195750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332e57613329848484613df3565b6134ac565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133d25750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133e7576133e2848484614053565b6134ab565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134895750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561349e5761349984848461421e565b6134aa565b6134a9848484614053565b5b5b5b5b806134bb576134ba614513565b5b50505050565b6000806000600d5490506000600c54905060005b600780549050811015613737578260026000600784815481106134fb576134fa6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135e95750816003600060078481548110613581576135806153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360057600d54600c5494509450505050613770565b613690600260006007848154811061361b5761361a6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613b0690919063ffffffff16565b925061372260036000600784815481106136ad576136ac6153e7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613b0690919063ffffffff16565b9150808061372f906152e2565b9150506134d5565b5061374f600c54600d54612e1490919063ffffffff16565b82101561376757600d54600c54935093505050613770565b81819350935050505b9091565b600080831182906137bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b29190614d69565b60405180910390fd5b50600083856137ca919061510f565b9050809150509392505050565b6000806000806137e685614527565b905060006137f386614558565b9050600061381c8261380e858a613b0690919063ffffffff16565b613b0690919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061384a8589612f1890919063ffffffff16565b905060006138618689612f1890919063ffffffff16565b905060006138788789612f1890919063ffffffff16565b905060006138a1826138938587613b0690919063ffffffff16565b613b0690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138d7576138d6615416565b5b6040519080825280602002602001820160405280156139055781602001602082028036833780820191505090505b509050308160008151811061391d5761391c6153e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906147e9565b81600181518110613a0957613a086153e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123fb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad0959493929190614fc6565b600060405180830381600087803b158015613aea57600080fd5b505af1158015613afe573d6000803e3d6000fd5b505050505050565b6000613b4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d85565b905092915050565b6000601254148015613b6457506000601454145b15613b6e57613b91565b601254601381905550601454601581905550600060128190555060006014819055505b565b600080600080600080613ba587612ebc565b955095509550955095509550613c0387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7981614589565b613d83848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613de09190614fab565b60405180910390a3505050505050505050565b600080600080600080613e0587612ebc565b955095509550955095509550613e6386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd981614589565b613fe3848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140409190614fab565b60405180910390a3505050505050505050565b60008060008060008061406587612ebc565b9550955095509550955095506140c386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141a481614589565b6141ae848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161420b9190614fab565b60405180910390a3505050505050505050565b60008060008060008061423087612ebc565b95509550955095509550955061428e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061432386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449981614589565b6144a3848361472e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145009190614fab565b60405180910390a3505050505050505050565b601354601281905550601554601481905550565b6000614551606461454360125485612f1890919063ffffffff16565b612e1490919063ffffffff16565b9050919050565b6000614582606461457460145485612f1890919063ffffffff16565b612e1490919063ffffffff16565b9050919050565b6000614593612de9565b905060006145aa8284612f1890919063ffffffff16565b90506145fe81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614729576146e583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e5e90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61474382600d54613b0690919063ffffffff16565b600d8190555061475e81600e54612e5e90919063ffffffff16565b600e819055505050565b60008135905061477781615844565b92915050565b60008151905061478c81615844565b92915050565b6000813590506147a18161585b565b92915050565b6000813590506147b681615872565b92915050565b6000602082840312156147d2576147d1615445565b5b60006147e084828501614768565b91505092915050565b6000602082840312156147ff576147fe615445565b5b600061480d8482850161477d565b91505092915050565b6000806040838503121561482d5761482c615445565b5b600061483b85828601614768565b925050602061484c85828601614768565b9150509250929050565b60008060006060848603121561486f5761486e615445565b5b600061487d86828701614768565b935050602061488e86828701614768565b925050604061489f868287016147a7565b9150509250925092565b600080604083850312156148c0576148bf615445565b5b60006148ce85828601614768565b92505060206148df858286016147a7565b9150509250929050565b6000602082840312156148ff576148fe615445565b5b600061490d84828501614792565b91505092915050565b60006020828403121561492c5761492b615445565b5b600061493a848285016147a7565b91505092915050565b6000806040838503121561495a57614959615445565b5b6000614968858286016147a7565b925050602061497985828601614792565b9150509250929050565b600061498f83836149aa565b60208301905092915050565b6149a4816151e0565b82525050565b6149b3816151ce565b82525050565b6149c2816151ce565b82525050565b60006149d382615074565b6149dd8185615097565b93506149e883615064565b8060005b83811015614a19578151614a008882614983565b9750614a0b8361508a565b9250506001810190506149ec565b5085935050505092915050565b614a2f816151f2565b82525050565b614a3e81615235565b82525050565b614a4d81615247565b82525050565b6000614a5e8261507f565b614a6881856150a8565b9350614a7881856020860161527d565b614a818161544a565b840191505092915050565b6000614a996023836150a8565b9150614aa48261545b565b604082019050919050565b6000614abc602a836150a8565b9150614ac7826154aa565b604082019050919050565b6000614adf6022836150a8565b9150614aea826154f9565b604082019050919050565b6000614b02601b836150a8565b9150614b0d82615548565b602082019050919050565b6000614b25601b836150a8565b9150614b3082615571565b602082019050919050565b6000614b48601e836150a8565b9150614b538261559a565b602082019050919050565b6000614b6b601f836150a8565b9150614b76826155c3565b602082019050919050565b6000614b8e6028836150a8565b9150614b99826155ec565b604082019050919050565b6000614bb16021836150a8565b9150614bbc8261563b565b604082019050919050565b6000614bd46020836150a8565b9150614bdf8261568a565b602082019050919050565b6000614bf76029836150a8565b9150614c02826156b3565b604082019050919050565b6000614c1a601a836150a8565b9150614c2582615702565b602082019050919050565b6000614c3d601c836150a8565b9150614c488261572b565b602082019050919050565b6000614c606025836150a8565b9150614c6b82615754565b604082019050919050565b6000614c836024836150a8565b9150614c8e826157a3565b604082019050919050565b6000614ca66018836150a8565b9150614cb1826157f2565b602082019050919050565b6000614cc96017836150a8565b9150614cd48261581b565b602082019050919050565b614ce88161521e565b82525050565b614cf781615228565b82525050565b6000602082019050614d1260008301846149b9565b92915050565b6000602082019050614d2d600083018461499b565b92915050565b6000602082019050614d486000830184614a26565b92915050565b6000602082019050614d636000830184614a35565b92915050565b60006020820190508181036000830152614d838184614a53565b905092915050565b60006020820190508181036000830152614da481614a8c565b9050919050565b60006020820190508181036000830152614dc481614aaf565b9050919050565b60006020820190508181036000830152614de481614ad2565b9050919050565b60006020820190508181036000830152614e0481614af5565b9050919050565b60006020820190508181036000830152614e2481614b18565b9050919050565b60006020820190508181036000830152614e4481614b3b565b9050919050565b60006020820190508181036000830152614e6481614b5e565b9050919050565b60006020820190508181036000830152614e8481614b81565b9050919050565b60006020820190508181036000830152614ea481614ba4565b9050919050565b60006020820190508181036000830152614ec481614bc7565b9050919050565b60006020820190508181036000830152614ee481614bea565b9050919050565b60006020820190508181036000830152614f0481614c0d565b9050919050565b60006020820190508181036000830152614f2481614c30565b9050919050565b60006020820190508181036000830152614f4481614c53565b9050919050565b60006020820190508181036000830152614f6481614c76565b9050919050565b60006020820190508181036000830152614f8481614c99565b9050919050565b60006020820190508181036000830152614fa481614cbc565b9050919050565b6000602082019050614fc06000830184614cdf565b92915050565b600060a082019050614fdb6000830188614cdf565b614fe86020830187614a44565b8181036040830152614ffa81866149c8565b905061500960608301856149b9565b6150166080830184614cdf565b9695505050505050565b60006040820190506150356000830185614cdf565b6150426020830184614cdf565b9392505050565b600060208201905061505e6000830184614cee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150c48261521e565b91506150cf8361521e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151045761510361532b565b5b828201905092915050565b600061511a8261521e565b91506151258361521e565b9250826151355761513461535a565b5b828204905092915050565b600061514b8261521e565b91506151568361521e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561518f5761518e61532b565b5b828202905092915050565b60006151a58261521e565b91506151b08361521e565b9250828210156151c3576151c261532b565b5b828203905092915050565b60006151d9826151fe565b9050919050565b60006151eb826151fe565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061524082615259565b9050919050565b60006152528261521e565b9050919050565b60006152648261526b565b9050919050565b6000615276826151fe565b9050919050565b60005b8381101561529b578082015181840152602081019050615280565b838111156152aa576000848401525b50505050565b600060028204905060018216806152c857607f821691505b602082108114156152dc576152db615389565b5b50919050565b60006152ed8261521e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153205761531f61532b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b61584d816151ce565b811461585857600080fd5b50565b615864816151f2565b811461586f57600080fd5b50565b61587b8161521e565b811461588657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204f2d83b36c4e0d56cd1eb5ecd30117a0a069b17f507bce111f59432fcffa6d2864736f6c63430008070033

Deployed Bytecode Sourcemap

12925:19818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20622:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16084:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16996:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18117:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14347:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16361:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17165:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31610:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18656:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16270:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32260:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19258:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17486:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14048:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20385:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18212:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14405:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14480:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18917:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24334:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31771:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13571:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16464:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9554:148;;;;;;;;;;;;;:::i;:::-;;14560:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17989:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9340:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16175:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17712:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16670:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20896:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14233:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14275:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15958:118;;;;;;;;;;;;;:::i;:::-;;13470:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20726:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16845:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20504:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31892:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20622:96;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20704:6:::1;20694:7;:16;;;;20622:96:::0;:::o;16084:83::-;16121:13;16154:5;16147:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16084:83;:::o;16996:161::-;17071:4;17088:39;17097:12;:10;:12::i;:::-;17111:7;17120:6;17088:8;:39::i;:::-;17145:4;17138:11;;16996:161;;;;:::o;18117:87::-;18159:7;18186:10;;18179:17;;18117:87;:::o;14347:51::-;;;:::o;16361:95::-;16414:7;16441;;16434:14;;16361:95;:::o;17165:313::-;17263:4;17280:36;17290:6;17298:9;17309:6;17280:9;:36::i;:::-;17327:121;17336:6;17344:12;:10;:12::i;:::-;17358:89;17396:6;17358:89;;;;;;;;;;;;;;;;;:11;:19;17370:6;17358:19;;;;;;;;;;;;;;;:33;17378:12;:10;:12::i;:::-;17358:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17327:8;:121::i;:::-;17466:4;17459:11;;17165:313;;;;;:::o;31610:153::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31750:5:::1;31728:19;:27;;;;:::i;:::-;31703:22;:52;;;;31610:153:::0;:::o;18656:253::-;18722:7;18761;;18750;:18;;18742:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18826:19;18849:10;:8;:10::i;:::-;18826:33;;18877:24;18889:11;18877:7;:11;;:24;;;;:::i;:::-;18870:31;;;18656:253;;;:::o;16270:83::-;16311:5;16336:9;;;;;;;;;;;16329:16;;16270:83;:::o;32260:480::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32339:9:::1;:18;32349:7;32339:18;;;;;;;;;;;;;;;;;;;;;;;;;32331:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32404:9;32399:334;32423:17;:24;;;;32419:1;:28;32399:334;;;32497:7;32473:31;;:17;32491:1;32473:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:31;;;32469:253;;;32548:17;32593:1;32566:17;:24;;;;:28;;;;:::i;:::-;32548:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32525:17;32543:1;32525:20;;;;;;;;:::i;:::-;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;32635:5;32614:9;:18;32624:7;32614:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;32659:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32701:5;;32469:253;32449:3;;;;;:::i;:::-;;;;32399:334;;;;32260:480:::0;:::o;19258:479::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19340:11:::1;:20;19352:7;19340:20;;;;;;;;;;;;;;;;;;;;;;;;;19332:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19408:9;19403:327;19427:9;:16;;;;19423:1;:20;19403:327;;;19485:7;19469:23;;:9;19479:1;19469:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;19465:254;;;19528:9;19557:1;19538:9;:16;;;;:20;;;;:::i;:::-;19528:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19513:9;19523:1;19513:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19597:1;19578:7;:16;19586:7;19578:16;;;;;;;;;;;;;;;:20;;;;19640:5;19617:11;:20;19629:7;19617:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19664:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19698:5;;19465:254;19445:3;;;;;:::i;:::-;;;;19403:327;;;;19258:479:::0;:::o;17486:218::-;17574:4;17591:83;17600:12;:10;:12::i;:::-;17614:7;17623:50;17662:10;17623:11;:25;17635:12;:10;:12::i;:::-;17623:25;;;;;;;;;;;;;;;:34;17649:7;17623:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17591:8;:83::i;:::-;17692:4;17685:11;;17486:218;;;;:::o;14048:26::-;;;;:::o;20385:111::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20484:4:::1;20454:18;:27;20473:7;20454:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20385:111:::0;:::o;18212:436::-;18302:7;18341;;18330;:18;;18322:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18400:17;18395:246;;18435:15;18459:19;18470:7;18459:10;:19::i;:::-;18434:44;;;;;;;18500:7;18493:14;;;;;18395:246;18542:23;18573:19;18584:7;18573:10;:19::i;:::-;18540:52;;;;;;;18614:15;18607:22;;;18212:436;;;;;:::o;14405:38::-;;;:::o;14480:40::-;;;;;;;;;;;;;:::o;18917:333::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19000:11:::1;:20;19012:7;19000:20;;;;;;;;;;;;;;;;;;;;;;;;;18999:21;18991:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19085:1;19066:7;:16;19074:7;19066:16;;;;;;;;;;;;;;;;:20;19063:108;;;19122:37;19142:7;:16;19150:7;19142:16;;;;;;;;;;;;;;;;19122:19;:37::i;:::-;19103:7;:16;19111:7;19103:16;;;;;;;;;;;;;;;:56;;;;19063:108;19204:4;19181:11;:20;19193:7;19181:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19219:9;19234:7;19219:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18917:333:::0;:::o;24334:123::-;24398:4;24422:18;:27;24441:7;24422:27;;;;;;;;;;;;;;;;;;;;;;;;;24415:34;;24334:123;;;:::o;31771:113::-;31834:4;31858:9;:18;31868:7;31858:18;;;;;;;;;;;;;;;;;;;;;;;;;31851:25;;31771:113;;;:::o;13571:94::-;;;;;;;;;;;;;:::o;16464:198::-;16530:7;16554:11;:20;16566:7;16554:20;;;;;;;;;;;;;;;;;;;;;;;;;16550:49;;;16583:7;:16;16591:7;16583:16;;;;;;;;;;;;;;;;16576:23;;;;16550:49;16617:37;16637:7;:16;16645:7;16637:16;;;;;;;;;;;;;;;;16617:19;:37::i;:::-;16610:44;;16464:198;;;;:::o;9554:148::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9661:1:::1;9624:40;;9645:6;::::0;::::1;;;;;;;;9624:40;;;;;;;;;;;;9692:1;9675:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9554:148::o:0;14560:47::-;;;;:::o;17989:120::-;18057:4;18081:11;:20;18093:7;18081:20;;;;;;;;;;;;;;;;;;;;;;;;;18074:27;;17989:120;;;:::o;9340:79::-;9378:7;9405:6;;;;;;;;;;;9398:13;;9340:79;:::o;16175:87::-;16214:13;16247:7;16240:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16175:87;:::o;17712:269::-;17805:4;17822:129;17831:12;:10;:12::i;:::-;17845:7;17854:96;17893:15;17854:96;;;;;;;;;;;;;;;;;:11;:25;17866:12;:10;:12::i;:::-;17854:25;;;;;;;;;;;;;;;:34;17880:7;17854:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17822:8;:129::i;:::-;17969:4;17962:11;;17712:269;;;;:::o;16670:167::-;16748:4;16765:42;16775:12;:10;:12::i;:::-;16789:9;16800:6;16765:9;:42::i;:::-;16825:4;16818:11;;16670:167;;;;:::o;20896:171::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20997:8:::1;20973:21;;:32;;;;;;;;;;;;;;;;;;21021:38;21050:8;21021:38;;;;;;:::i;:::-;;;;;;;;20896:171:::0;:::o;14233:35::-;;;;:::o;14275:36::-;;;;:::o;15958:118::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16025:4:::1;16011:11;;:18;;;;;;;;;;;;;;;;;;16053:15;16040:10;:28;;;;15958:118::o:0;13470:94::-;;;;;;;;;;;;;:::o;20726:162::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20820:60:::1;20864:5;20820:25;20832:12;20820:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;20805:12;:75;;;;20726:162:::0;:::o;16845:143::-;16926:7;16953:11;:18;16965:5;16953:18;;;;;;;;;;;;;;;:27;16972:7;16953:27;;;;;;;;;;;;;;;;16946:34;;16845:143;;;;:::o;20504:110::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20601:5:::1;20571:18;:27;20590:7;20571:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20504:110:::0;:::o;31892:360::-;9477:12;:10;:12::i;:::-;9467:22;;:6;;;;;;;;;;:22;;;9459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31995:42:::1;31984:53;;:7;:53;;;;31962:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;32113:9;:18;32123:7;32113:18;;;;;;;;;;;;;;;;;;;;;;;;;32112:19;32104:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32198:4;32177:9;:18;32187:7;32177:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32213:17;32236:7;32213:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31892:360:::0;:::o;2610:98::-;2663:7;2690:10;2683:17;;2610:98;:::o;24465:337::-;24575:1;24558:19;;:5;:19;;;;24550:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24656:1;24637:21;;:7;:21;;;;24629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24740:6;24710:11;:18;24722:5;24710:18;;;;;;;;;;;;;;;:27;24729:7;24710:27;;;;;;;;;;;;;;;:36;;;;24778:7;24762:32;;24771:5;24762:32;;;24787:6;24762:32;;;;;;:::i;:::-;;;;;;;;24465:337;;;:::o;24810:2422::-;24948:1;24932:18;;:4;:18;;;;24924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25025:1;25011:16;;:2;:16;;;;25003:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25095:1;25086:6;:10;25078:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25162:9;:13;25172:2;25162:13;;;;;;;;;;;;;;;;;;;;;;;;;25161:14;25153:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;25223:9;:15;25233:4;25223:15;;;;;;;;;;;;;;;;;;;;;;;;;25222:16;25214:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:7;:5;:7::i;:::-;25280:15;;:4;:15;;;;:32;;;;;25305:7;:5;:7::i;:::-;25299:13;;:2;:13;;;;25280:32;25277:125;;;25345:12;;25335:6;:22;;25327:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25277:125;25678:28;25709:24;25727:4;25709:9;:24::i;:::-;25678:55;;25773:12;;25749:20;:36;25746:112;;25834:12;;25811:35;;25746:112;25898:13;25890:21;;:4;:21;;;:55;;;;;25929:15;25915:30;;:2;:30;;;;25890:55;:82;;;;;25950:18;:22;25969:2;25950:22;;;;;;;;;;;;;;;;;;;;;;;;;25949:23;25890:82;25886:352;;;25997:11;;;;;;;;;;;25989:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26114:10;26100;;:25;;;;:::i;:::-;26081:15;:44;26077:150;;26162:4;26146:9;:13;26156:2;26146:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26185:17;26208:2;26185:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26077:150;25886:352;26250:24;26301:22;;26277:20;:46;;26250:73;;26352:19;:40;;;;;26376:16;;;;;;;;;;;26375:17;26352:40;:65;;;;;26404:13;26396:21;;:4;:21;;;;26352:65;:90;;;;;26421:21;;;;;;;;;;;26352:90;26334:243;;;26492:22;;26469:45;;26529:36;26544:20;26529:14;:36::i;:::-;26334:243;26603:16;;26587:13;:32;;;;26684:13;26678:19;;:2;:19;;;:55;;;;;26717:15;26701:32;;:4;:32;;;;26678:55;:85;;;;;26739:18;:24;26758:4;26739:24;;;;;;;;;;;;;;;;;;;;;;;;;26737:26;26678:85;26674:151;;;26796:17;;26780:13;:33;;;;26674:151;26896:12;26911:4;26896:19;;27015:18;:24;27034:4;27015:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27043:18;:22;27062:2;27043:22;;;;;;;;;;;;;;;;;;;;;;;;;27015:50;27012:96;;;27091:5;27081:15;;27012:96;27186:38;27201:4;27206:2;27209:6;27216:7;27186:14;:38::i;:::-;24913:2319;;;24810:2422;;;:::o;1281:190::-;1367:7;1400:1;1395;:6;;1403:12;1387:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1427:9;1443:1;1439;:5;;;;:::i;:::-;1427:17;;1462:1;1455:8;;;1281:190;;;;;:::o;22526:163::-;22567:7;22588:15;22605;22624:19;:17;:19::i;:::-;22587:56;;;;22661:20;22673:7;22661;:11;;:20;;;;:::i;:::-;22654:27;;;;22526:163;:::o;1733:132::-;1791:7;1818:39;1822:1;1825;1818:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1811:46;;1733:132;;;;:::o;950:179::-;1008:7;1028:9;1044:1;1040;:5;;;;:::i;:::-;1028:17;;1069:1;1064;:6;;1056:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1120:1;1113:8;;;950:179;;;;:::o;21324:419::-;21383:7;21392;21401;21410;21419;21428;21449:23;21474:12;21488:18;21510:20;21522:7;21510:11;:20::i;:::-;21448:82;;;;;;21542:15;21559:23;21584:12;21600:50;21612:7;21621:4;21627:10;21639;:8;:10::i;:::-;21600:11;:50::i;:::-;21541:109;;;;;;21669:7;21678:15;21695:4;21701:15;21718:4;21724:10;21661:74;;;;;;;;;;;;;;;;;;21324:419;;;;;;;:::o;1479:246::-;1537:7;1566:1;1561;:6;1557:47;;;1591:1;1584:8;;;;1557:47;1614:9;1630:1;1626;:5;;;;:::i;:::-;1614:17;;1659:1;1654;1650;:5;;;;:::i;:::-;:10;1642:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1716:1;1709:8;;;1479:246;;;;;:::o;27240:1204::-;15109:4;15090:16;;:23;;;;;;;;;;;;;;;;;;27592:22:::1;27617:21;27592:46;;27683:38;27700:20;27683:16;:38::i;:::-;27778:18;27799:41;27825:14;27799:21;:25;;:41;;;;:::i;:::-;27778:62;;27858:48;27873:20;27895:10;27858:48;;;;;;;:::i;:::-;;;;;;;;28002:30;28035:24;28057:1;28035:17;28050:1;28035:10;:14;;:17;;;;:::i;:::-;:21;;:24;;;;:::i;:::-;28002:57;;28070:30;28103:38;28118:22;28103:10;:14;;:38;;;;:::i;:::-;28070:71;;28207:17;;;;;;;;;;;:26;;:50;28234:22;28207:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28273:43;28293:22;28273:43;;;;;;:::i;:::-;;;;;;;;28327:17;;;;;;;;;;;:26;;:50;28354:22;28327:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28393:43;28413:22;28393:43;;;;;;:::i;:::-;;;;;;;;27314:1130;;;;15155:5:::0;15136:16;;:24;;;;;;;;;;;;;;;;;;27240:1204;:::o;29122:818::-;29233:7;29229:40;;29255:14;:12;:14::i;:::-;29229:40;29286:11;:19;29298:6;29286:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;29310:11;:22;29322:9;29310:22;;;;;;;;;;;;;;;;;;;;;;;;;29309:23;29286:46;29282:597;;;29349:48;29371:6;29379:9;29390:6;29349:21;:48::i;:::-;29282:597;;;29420:11;:19;29432:6;29420:19;;;;;;;;;;;;;;;;;;;;;;;;;29419:20;:46;;;;;29443:11;:22;29455:9;29443:22;;;;;;;;;;;;;;;;;;;;;;;;;29419:46;29415:464;;;29482:46;29502:6;29510:9;29521:6;29482:19;:46::i;:::-;29415:464;;;29551:11;:19;29563:6;29551:19;;;;;;;;;;;;;;;;;;;;;;;;;29550:20;:47;;;;;29575:11;:22;29587:9;29575:22;;;;;;;;;;;;;;;;;;;;;;;;;29574:23;29550:47;29546:333;;;29614:44;29632:6;29640:9;29651:6;29614:17;:44::i;:::-;29546:333;;;29680:11;:19;29692:6;29680:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29703:11;:22;29715:9;29703:22;;;;;;;;;;;;;;;;;;;;;;;;;29680:45;29676:203;;;29742:48;29764:6;29772:9;29783:6;29742:21;:48::i;:::-;29676:203;;;29823:44;29841:6;29849:9;29860:6;29823:17;:44::i;:::-;29676:203;29546:333;29415:464;29282:597;29895:7;29891:41;;29917:15;:13;:15::i;:::-;29891:41;29122:818;;;;:::o;22697:555::-;22747:7;22756;22776:15;22794:7;;22776:25;;22812:15;22830:7;;22812:25;;22853:9;22848:289;22872:9;:16;;;;22868:1;:20;22848:289;;;22938:7;22914;:21;22922:9;22932:1;22922:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22914:21;;;;;;;;;;;;;;;;:31;:66;;;;22973:7;22949;:21;22957:9;22967:1;22957:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22949:21;;;;;;;;;;;;;;;;:31;22914:66;22910:97;;;22990:7;;22999;;22982:25;;;;;;;;;22910:97;23032:34;23044:7;:21;23052:9;23062:1;23052:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23044:21;;;;;;;;;;;;;;;;23032:7;:11;;:34;;;;:::i;:::-;23022:44;;23091:34;23103:7;:21;23111:9;23121:1;23111:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23103:21;;;;;;;;;;;;;;;;23091:7;:11;;:34;;;;:::i;:::-;23081:44;;22890:3;;;;;:::i;:::-;;;;22848:289;;;;23161:20;23173:7;;23161;;:11;;:20;;;;:::i;:::-;23151:7;:30;23147:61;;;23191:7;;23200;;23183:25;;;;;;;;23147:61;23227:7;23236;23219:25;;;;;;22697:555;;;:::o;1873:189::-;1959:7;1991:1;1987;:5;1994:12;1979:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2018:9;2034:1;2030;:5;;;;:::i;:::-;2018:17;;2053:1;2046:8;;;1873:189;;;;;:::o;21751:330::-;21811:7;21820;21829;21849:12;21864:24;21880:7;21864:15;:24::i;:::-;21849:39;;21899:18;21920:30;21942:7;21920:21;:30::i;:::-;21899:51;;21961:23;21987:33;22009:10;21987:17;21999:4;21987:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;21961:59;;22039:15;22056:4;22062:10;22031:42;;;;;;;;;21751:330;;;;;:::o;22089:429::-;22204:7;22213;22222;22242:15;22260:24;22272:11;22260:7;:11;;:24;;;;:::i;:::-;22242:42;;22295:12;22310:21;22319:11;22310:4;:8;;:21;;;;:::i;:::-;22295:36;;22342:18;22363:27;22378:11;22363:10;:14;;:27;;;;:::i;:::-;22342:48;;22401:23;22427:33;22449:10;22427:17;22439:4;22427:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22401:59;;22479:7;22488:15;22505:4;22471:39;;;;;;;;;;22089:429;;;;;;;;:::o;28452:589::-;28578:21;28616:1;28602:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28578:40;;28647:4;28629;28634:1;28629:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28673:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28663:4;28668:1;28663:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28708:62;28725:4;28740:15;28758:11;28708:8;:62::i;:::-;28809:15;:66;;;28890:11;28916:1;28960:4;28987;29007:15;28809:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28507:534;28452:589;:::o;1137:136::-;1195:7;1222:43;1226:1;1229;1222:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1215:50;;1137:136;;;;:::o;23959:234::-;24016:1;24005:7;;:12;:34;;;;;24038:1;24021:13;;:18;24005:34;24002:46;;;24041:7;;24002:46;24078:7;;24060:15;:25;;;;24120:13;;24096:21;:37;;;;24156:1;24146:7;:11;;;;24184:1;24168:13;:17;;;;23959:234;:::o;31041:563::-;31144:15;31161:23;31186:12;31200:23;31225:12;31239:18;31261:19;31272:7;31261:10;:19::i;:::-;31143:137;;;;;;;;;;;;31309:28;31329:7;31309;:15;31317:6;31309:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31291:7;:15;31299:6;31291:15;;;;;;;;;;;;;;;:46;;;;31366:28;31386:7;31366;:15;31374:6;31366:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31348:7;:15;31356:6;31348:15;;;;;;;;;;;;;;;:46;;;;31426:39;31449:15;31426:7;:18;31434:9;31426:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31405:7;:18;31413:9;31405:18;;;;;;;;;;;;;;;:60;;;;31476:26;31491:10;31476:14;:26::i;:::-;31513:23;31525:4;31531;31513:11;:23::i;:::-;31569:9;31552:44;;31561:6;31552:44;;;31580:15;31552:44;;;;;;:::i;:::-;;;;;;;;31132:472;;;;;;31041:563;;;:::o;30458:575::-;30559:15;30576:23;30601:12;30615:23;30640:12;30654:18;30676:19;30687:7;30676:10;:19::i;:::-;30558:137;;;;;;;;;;;;30724:28;30744:7;30724;:15;30732:6;30724:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30706:7;:15;30714:6;30706:15;;;;;;;;;;;;;;;:46;;;;30784:39;30807:15;30784:7;:18;30792:9;30784:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30763:7;:18;30771:9;30763:18;;;;;;;;;;;;;;;:60;;;;30855:39;30878:15;30855:7;:18;30863:9;30855:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30834:7;:18;30842:9;30834:18;;;;;;;;;;;;;;;:60;;;;30905:26;30920:10;30905:14;:26::i;:::-;30942:23;30954:4;30960;30942:11;:23::i;:::-;30998:9;30981:44;;30990:6;30981:44;;;31009:15;30981:44;;;;;;:::i;:::-;;;;;;;;30547:486;;;;;;30458:575;;;:::o;29948:502::-;30047:15;30064:23;30089:12;30103:23;30128:12;30142:18;30164:19;30175:7;30164:10;:19::i;:::-;30046:137;;;;;;;;;;;;30212:28;30232:7;30212;:15;30220:6;30212:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30194:7;:15;30202:6;30194:15;;;;;;;;;;;;;;;:46;;;;30272:39;30295:15;30272:7;:18;30280:9;30272:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30251:7;:18;30259:9;30251:18;;;;;;;;;;;;;;;:60;;;;30322:26;30337:10;30322:14;:26::i;:::-;30359:23;30371:4;30377;30359:11;:23::i;:::-;30415:9;30398:44;;30407:6;30398:44;;;30426:15;30398:44;;;;;;:::i;:::-;;;;;;;;30035:415;;;;;;29948:502;;;:::o;19743:634::-;19846:15;19863:23;19888:12;19902:23;19927:12;19941:18;19963:19;19974:7;19963:10;:19::i;:::-;19845:137;;;;;;;;;;;;20011:28;20031:7;20011;:15;20019:6;20011:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19993:7;:15;20001:6;19993:15;;;;;;;;;;;;;;;:46;;;;20068:28;20088:7;20068;:15;20076:6;20068:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20050:7;:15;20058:6;20050:15;;;;;;;;;;;;;;;:46;;;;20128:39;20151:15;20128:7;:18;20136:9;20128:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20107:7;:18;20115:9;20107:18;;;;;;;;;;;;;;;:60;;;;20199:39;20222:15;20199:7;:18;20207:9;20199:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20178:7;:18;20186:9;20178:18;;;;;;;;;;;;;;;:60;;;;20249:26;20264:10;20249:14;:26::i;:::-;20286:23;20298:4;20304;20286:11;:23::i;:::-;20342:9;20325:44;;20334:6;20325:44;;;20353:15;20325:44;;;;;;:::i;:::-;;;;;;;;19834:543;;;;;;19743:634;;;:::o;24201:125::-;24255:15;;24245:7;:25;;;;24297:21;;24281:13;:37;;;;24201:125::o;23623:154::-;23687:7;23714:55;23753:5;23714:20;23726:7;;23714;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;23707:62;;23623:154;;;:::o;23785:166::-;23855:7;23882:61;23927:5;23882:26;23894:13;;23882:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;23875:68;;23785:166;;;:::o;23260:355::-;23323:19;23346:10;:8;:10::i;:::-;23323:33;;23367:18;23388:27;23403:11;23388:10;:14;;:27;;;;:::i;:::-;23367:48;;23451:38;23478:10;23451:7;:22;23467:4;23451:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23426:7;:22;23442:4;23426:22;;;;;;;;;;;;;;;:63;;;;23503:11;:26;23523:4;23503:26;;;;;;;;;;;;;;;;;;;;;;;;;23500:107;;;23569:38;23596:10;23569:7;:22;23585:4;23569:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23544:7;:22;23560:4;23544:22;;;;;;;;;;;;;;;:63;;;;23500:107;23312:303;;23260:355;:::o;21169:147::-;21247:17;21259:4;21247:7;;:11;;:17;;;;:::i;:::-;21237:7;:27;;;;21288:20;21303:4;21288:10;;:14;;:20;;;;:::i;:::-;21275:10;:33;;;;21169:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:351::-;990:6;1039:2;1027:9;1018:7;1014:23;1010:32;1007:119;;;1045:79;;:::i;:::-;1007:119;1165:1;1190:64;1246:7;1237:6;1226:9;1222:22;1190:64;:::i;:::-;1180:74;;1136:128;920:351;;;;:::o;1277:474::-;1345:6;1353;1402:2;1390:9;1381:7;1377:23;1373:32;1370:119;;;1408:79;;:::i;:::-;1370:119;1528:1;1553:53;1598:7;1589:6;1578:9;1574:22;1553:53;:::i;:::-;1543:63;;1499:117;1655:2;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1626:118;1277:474;;;;;:::o;1757:619::-;1834:6;1842;1850;1899:2;1887:9;1878:7;1874:23;1870:32;1867:119;;;1905:79;;:::i;:::-;1867:119;2025:1;2050:53;2095:7;2086:6;2075:9;2071:22;2050:53;:::i;:::-;2040:63;;1996:117;2152:2;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2123:118;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;1757:619;;;;;:::o;2382:474::-;2450:6;2458;2507:2;2495:9;2486:7;2482:23;2478:32;2475:119;;;2513:79;;:::i;:::-;2475:119;2633:1;2658:53;2703:7;2694:6;2683:9;2679:22;2658:53;:::i;:::-;2648:63;;2604:117;2760:2;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2731:118;2382:474;;;;;:::o;2862:323::-;2918:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:119;;;2973:79;;:::i;:::-;2935:119;3093:1;3118:50;3160:7;3151:6;3140:9;3136:22;3118:50;:::i;:::-;3108:60;;3064:114;2862:323;;;;:::o;3191:329::-;3250:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:119;;;3305:79;;:::i;:::-;3267:119;3425:1;3450:53;3495:7;3486:6;3475:9;3471:22;3450:53;:::i;:::-;3440:63;;3396:117;3191:329;;;;:::o;3526:468::-;3591:6;3599;3648:2;3636:9;3627:7;3623:23;3619:32;3616:119;;;3654:79;;:::i;:::-;3616:119;3774:1;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3745:117;3901:2;3927:50;3969:7;3960:6;3949:9;3945:22;3927:50;:::i;:::-;3917:60;;3872:115;3526:468;;;;;:::o;4000:179::-;4069:10;4090:46;4132:3;4124:6;4090:46;:::i;:::-;4168:4;4163:3;4159:14;4145:28;;4000:179;;;;:::o;4185:142::-;4288:32;4314:5;4288:32;:::i;:::-;4283:3;4276:45;4185:142;;:::o;4333:108::-;4410:24;4428:5;4410:24;:::i;:::-;4405:3;4398:37;4333:108;;:::o;4447:118::-;4534:24;4552:5;4534:24;:::i;:::-;4529:3;4522:37;4447:118;;:::o;4601:732::-;4720:3;4749:54;4797:5;4749:54;:::i;:::-;4819:86;4898:6;4893:3;4819:86;:::i;:::-;4812:93;;4929:56;4979:5;4929:56;:::i;:::-;5008:7;5039:1;5024:284;5049:6;5046:1;5043:13;5024:284;;;5125:6;5119:13;5152:63;5211:3;5196:13;5152:63;:::i;:::-;5145:70;;5238:60;5291:6;5238:60;:::i;:::-;5228:70;;5084:224;5071:1;5068;5064:9;5059:14;;5024:284;;;5028:14;5324:3;5317:10;;4725:608;;;4601:732;;;;:::o;5339:109::-;5420:21;5435:5;5420:21;:::i;:::-;5415:3;5408:34;5339:109;;:::o;5454:183::-;5567:63;5624:5;5567:63;:::i;:::-;5562:3;5555:76;5454:183;;:::o;5643:147::-;5738:45;5777:5;5738:45;:::i;:::-;5733:3;5726:58;5643:147;;:::o;5796:364::-;5884:3;5912:39;5945:5;5912:39;:::i;:::-;5967:71;6031:6;6026:3;5967:71;:::i;:::-;5960:78;;6047:52;6092:6;6087:3;6080:4;6073:5;6069:16;6047:52;:::i;:::-;6124:29;6146:6;6124:29;:::i;:::-;6119:3;6115:39;6108:46;;5888:272;5796:364;;;;:::o;6166:366::-;6308:3;6329:67;6393:2;6388:3;6329:67;:::i;:::-;6322:74;;6405:93;6494:3;6405:93;:::i;:::-;6523:2;6518:3;6514:12;6507:19;;6166:366;;;:::o;6538:::-;6680:3;6701:67;6765:2;6760:3;6701:67;:::i;:::-;6694:74;;6777:93;6866:3;6777:93;:::i;:::-;6895:2;6890:3;6886:12;6879:19;;6538:366;;;:::o;6910:::-;7052:3;7073:67;7137:2;7132:3;7073:67;:::i;:::-;7066:74;;7149:93;7238:3;7149:93;:::i;:::-;7267:2;7262:3;7258:12;7251:19;;6910:366;;;:::o;7282:::-;7424:3;7445:67;7509:2;7504:3;7445:67;:::i;:::-;7438:74;;7521:93;7610:3;7521:93;:::i;:::-;7639:2;7634:3;7630:12;7623:19;;7282:366;;;:::o;7654:::-;7796:3;7817:67;7881:2;7876:3;7817:67;:::i;:::-;7810:74;;7893:93;7982:3;7893:93;:::i;:::-;8011:2;8006:3;8002:12;7995:19;;7654:366;;;:::o;8026:::-;8168:3;8189:67;8253:2;8248:3;8189:67;:::i;:::-;8182:74;;8265:93;8354:3;8265:93;:::i;:::-;8383:2;8378:3;8374:12;8367:19;;8026:366;;;:::o;8398:::-;8540:3;8561:67;8625:2;8620:3;8561:67;:::i;:::-;8554:74;;8637:93;8726:3;8637:93;:::i;:::-;8755:2;8750:3;8746:12;8739:19;;8398:366;;;:::o;8770:::-;8912:3;8933:67;8997:2;8992:3;8933:67;:::i;:::-;8926:74;;9009:93;9098:3;9009:93;:::i;:::-;9127:2;9122:3;9118:12;9111:19;;8770:366;;;:::o;9142:::-;9284:3;9305:67;9369:2;9364:3;9305:67;:::i;:::-;9298:74;;9381:93;9470:3;9381:93;:::i;:::-;9499:2;9494:3;9490:12;9483:19;;9142:366;;;:::o;9514:::-;9656:3;9677:67;9741:2;9736:3;9677:67;:::i;:::-;9670:74;;9753:93;9842:3;9753:93;:::i;:::-;9871:2;9866:3;9862:12;9855:19;;9514:366;;;:::o;9886:::-;10028:3;10049:67;10113:2;10108:3;10049:67;:::i;:::-;10042:74;;10125:93;10214:3;10125:93;:::i;:::-;10243:2;10238:3;10234:12;10227:19;;9886:366;;;:::o;10258:::-;10400:3;10421:67;10485:2;10480:3;10421:67;:::i;:::-;10414:74;;10497:93;10586:3;10497:93;:::i;:::-;10615:2;10610:3;10606:12;10599:19;;10258:366;;;:::o;10630:::-;10772:3;10793:67;10857:2;10852:3;10793:67;:::i;:::-;10786:74;;10869:93;10958:3;10869:93;:::i;:::-;10987:2;10982:3;10978:12;10971:19;;10630:366;;;:::o;11002:::-;11144:3;11165:67;11229:2;11224:3;11165:67;:::i;:::-;11158:74;;11241:93;11330:3;11241:93;:::i;:::-;11359:2;11354:3;11350:12;11343:19;;11002:366;;;:::o;11374:::-;11516:3;11537:67;11601:2;11596:3;11537:67;:::i;:::-;11530:74;;11613:93;11702:3;11613:93;:::i;:::-;11731:2;11726:3;11722:12;11715:19;;11374:366;;;:::o;11746:::-;11888:3;11909:67;11973:2;11968:3;11909:67;:::i;:::-;11902:74;;11985:93;12074:3;11985:93;:::i;:::-;12103:2;12098:3;12094:12;12087:19;;11746:366;;;:::o;12118:::-;12260:3;12281:67;12345:2;12340:3;12281:67;:::i;:::-;12274:74;;12357:93;12446:3;12357:93;:::i;:::-;12475:2;12470:3;12466:12;12459:19;;12118:366;;;:::o;12490:118::-;12577:24;12595:5;12577:24;:::i;:::-;12572:3;12565:37;12490:118;;:::o;12614:112::-;12697:22;12713:5;12697:22;:::i;:::-;12692:3;12685:35;12614:112;;:::o;12732:222::-;12825:4;12863:2;12852:9;12848:18;12840:26;;12876:71;12944:1;12933:9;12929:17;12920:6;12876:71;:::i;:::-;12732:222;;;;:::o;12960:254::-;13069:4;13107:2;13096:9;13092:18;13084:26;;13120:87;13204:1;13193:9;13189:17;13180:6;13120:87;:::i;:::-;12960:254;;;;:::o;13220:210::-;13307:4;13345:2;13334:9;13330:18;13322:26;;13358:65;13420:1;13409:9;13405:17;13396:6;13358:65;:::i;:::-;13220:210;;;;:::o;13436:274::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13606:97;13700:1;13689:9;13685:17;13676:6;13606:97;:::i;:::-;13436:274;;;;:::o;13716:313::-;13829:4;13867:2;13856:9;13852:18;13844:26;;13916:9;13910:4;13906:20;13902:1;13891:9;13887:17;13880:47;13944:78;14017:4;14008:6;13944:78;:::i;:::-;13936:86;;13716:313;;;;:::o;14035:419::-;14201:4;14239:2;14228:9;14224:18;14216:26;;14288:9;14282:4;14278:20;14274:1;14263:9;14259:17;14252:47;14316:131;14442:4;14316:131;:::i;:::-;14308:139;;14035:419;;;:::o;14460:::-;14626:4;14664:2;14653:9;14649:18;14641:26;;14713:9;14707:4;14703:20;14699:1;14688:9;14684:17;14677:47;14741:131;14867:4;14741:131;:::i;:::-;14733:139;;14460:419;;;:::o;14885:::-;15051:4;15089:2;15078:9;15074:18;15066:26;;15138:9;15132:4;15128:20;15124:1;15113:9;15109:17;15102:47;15166:131;15292:4;15166:131;:::i;:::-;15158:139;;14885:419;;;:::o;15310:::-;15476:4;15514:2;15503:9;15499:18;15491:26;;15563:9;15557:4;15553:20;15549:1;15538:9;15534:17;15527:47;15591:131;15717:4;15591:131;:::i;:::-;15583:139;;15310:419;;;:::o;15735:::-;15901:4;15939:2;15928:9;15924:18;15916:26;;15988:9;15982:4;15978:20;15974:1;15963:9;15959:17;15952:47;16016:131;16142:4;16016:131;:::i;:::-;16008:139;;15735:419;;;:::o;16160:::-;16326:4;16364:2;16353:9;16349:18;16341:26;;16413:9;16407:4;16403:20;16399:1;16388:9;16384:17;16377:47;16441:131;16567:4;16441:131;:::i;:::-;16433:139;;16160:419;;;:::o;16585:::-;16751:4;16789:2;16778:9;16774:18;16766:26;;16838:9;16832:4;16828:20;16824:1;16813:9;16809:17;16802:47;16866:131;16992:4;16866:131;:::i;:::-;16858:139;;16585:419;;;:::o;17010:::-;17176:4;17214:2;17203:9;17199:18;17191:26;;17263:9;17257:4;17253:20;17249:1;17238:9;17234:17;17227:47;17291:131;17417:4;17291:131;:::i;:::-;17283:139;;17010:419;;;:::o;17435:::-;17601:4;17639:2;17628:9;17624:18;17616:26;;17688:9;17682:4;17678:20;17674:1;17663:9;17659:17;17652:47;17716:131;17842:4;17716:131;:::i;:::-;17708:139;;17435:419;;;:::o;17860:::-;18026:4;18064:2;18053:9;18049:18;18041:26;;18113:9;18107:4;18103:20;18099:1;18088:9;18084:17;18077:47;18141:131;18267:4;18141:131;:::i;:::-;18133:139;;17860:419;;;:::o;18285:::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:::-;18876:4;18914:2;18903:9;18899:18;18891:26;;18963:9;18957:4;18953:20;18949:1;18938:9;18934:17;18927:47;18991:131;19117:4;18991:131;:::i;:::-;18983:139;;18710:419;;;:::o;19135:::-;19301:4;19339:2;19328:9;19324:18;19316:26;;19388:9;19382:4;19378:20;19374:1;19363:9;19359:17;19352:47;19416:131;19542:4;19416:131;:::i;:::-;19408:139;;19135:419;;;:::o;19560:::-;19726:4;19764:2;19753:9;19749:18;19741:26;;19813:9;19807:4;19803:20;19799:1;19788:9;19784:17;19777:47;19841:131;19967:4;19841:131;:::i;:::-;19833:139;;19560:419;;;:::o;19985:::-;20151:4;20189:2;20178:9;20174:18;20166:26;;20238:9;20232:4;20228:20;20224:1;20213:9;20209:17;20202:47;20266:131;20392:4;20266:131;:::i;:::-;20258:139;;19985:419;;;:::o;20410:::-;20576:4;20614:2;20603:9;20599:18;20591:26;;20663:9;20657:4;20653:20;20649:1;20638:9;20634:17;20627:47;20691:131;20817:4;20691:131;:::i;:::-;20683:139;;20410:419;;;:::o;20835:::-;21001:4;21039:2;21028:9;21024:18;21016:26;;21088:9;21082:4;21078:20;21074:1;21063:9;21059:17;21052:47;21116:131;21242:4;21116:131;:::i;:::-;21108:139;;20835:419;;;:::o;21260:222::-;21353:4;21391:2;21380:9;21376:18;21368:26;;21404:71;21472:1;21461:9;21457:17;21448:6;21404:71;:::i;:::-;21260:222;;;;:::o;21488:831::-;21751:4;21789:3;21778:9;21774:19;21766:27;;21803:71;21871:1;21860:9;21856:17;21847:6;21803:71;:::i;:::-;21884:80;21960:2;21949:9;21945:18;21936:6;21884:80;:::i;:::-;22011:9;22005:4;22001:20;21996:2;21985:9;21981:18;21974:48;22039:108;22142:4;22133:6;22039:108;:::i;:::-;22031:116;;22157:72;22225:2;22214:9;22210:18;22201:6;22157:72;:::i;:::-;22239:73;22307:3;22296:9;22292:19;22283:6;22239:73;:::i;:::-;21488:831;;;;;;;;:::o;22325:332::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22497:71;22565:1;22554:9;22550:17;22541:6;22497:71;:::i;:::-;22578:72;22646:2;22635:9;22631:18;22622:6;22578:72;:::i;:::-;22325:332;;;;;:::o;22663:214::-;22752:4;22790:2;22779:9;22775:18;22767:26;;22803:67;22867:1;22856:9;22852:17;22843:6;22803:67;:::i;:::-;22663:214;;;;:::o;22964:132::-;23031:4;23054:3;23046:11;;23084:4;23079:3;23075:14;23067:22;;22964:132;;;:::o;23102:114::-;23169:6;23203:5;23197:12;23187:22;;23102:114;;;:::o;23222:99::-;23274:6;23308:5;23302:12;23292:22;;23222:99;;;:::o;23327:113::-;23397:4;23429;23424:3;23420:14;23412:22;;23327:113;;;:::o;23446:184::-;23545:11;23579:6;23574:3;23567:19;23619:4;23614:3;23610:14;23595:29;;23446:184;;;;:::o;23636:169::-;23720:11;23754:6;23749:3;23742:19;23794:4;23789:3;23785:14;23770:29;;23636:169;;;;:::o;23811:305::-;23851:3;23870:20;23888:1;23870:20;:::i;:::-;23865:25;;23904:20;23922:1;23904:20;:::i;:::-;23899:25;;24058:1;23990:66;23986:74;23983:1;23980:81;23977:107;;;24064:18;;:::i;:::-;23977:107;24108:1;24105;24101:9;24094:16;;23811:305;;;;:::o;24122:185::-;24162:1;24179:20;24197:1;24179:20;:::i;:::-;24174:25;;24213:20;24231:1;24213:20;:::i;:::-;24208:25;;24252:1;24242:35;;24257:18;;:::i;:::-;24242:35;24299:1;24296;24292:9;24287:14;;24122:185;;;;:::o;24313:348::-;24353:7;24376:20;24394:1;24376:20;:::i;:::-;24371:25;;24410:20;24428:1;24410:20;:::i;:::-;24405:25;;24598:1;24530:66;24526:74;24523:1;24520:81;24515:1;24508:9;24501:17;24497:105;24494:131;;;24605:18;;:::i;:::-;24494:131;24653:1;24650;24646:9;24635:20;;24313:348;;;;:::o;24667:191::-;24707:4;24727:20;24745:1;24727:20;:::i;:::-;24722:25;;24761:20;24779:1;24761:20;:::i;:::-;24756:25;;24800:1;24797;24794:8;24791:34;;;24805:18;;:::i;:::-;24791:34;24850:1;24847;24843:9;24835:17;;24667:191;;;;:::o;24864:96::-;24901:7;24930:24;24948:5;24930:24;:::i;:::-;24919:35;;24864:96;;;:::o;24966:104::-;25011:7;25040:24;25058:5;25040:24;:::i;:::-;25029:35;;24966:104;;;:::o;25076:90::-;25110:7;25153:5;25146:13;25139:21;25128:32;;25076:90;;;:::o;25172:126::-;25209:7;25249:42;25242:5;25238:54;25227:65;;25172:126;;;:::o;25304:77::-;25341:7;25370:5;25359:16;;25304:77;;;:::o;25387:86::-;25422:7;25462:4;25455:5;25451:16;25440:27;;25387:86;;;:::o;25479:152::-;25555:9;25588:37;25619:5;25588:37;:::i;:::-;25575:50;;25479:152;;;:::o;25637:121::-;25695:9;25728:24;25746:5;25728:24;:::i;:::-;25715:37;;25637:121;;;:::o;25764:126::-;25814:9;25847:37;25878:5;25847:37;:::i;:::-;25834:50;;25764:126;;;:::o;25896:113::-;25946:9;25979:24;25997:5;25979:24;:::i;:::-;25966:37;;25896:113;;;:::o;26015:307::-;26083:1;26093:113;26107:6;26104:1;26101:13;26093:113;;;26192:1;26187:3;26183:11;26177:18;26173:1;26168:3;26164:11;26157:39;26129:2;26126:1;26122:10;26117:15;;26093:113;;;26224:6;26221:1;26218:13;26215:101;;;26304:1;26295:6;26290:3;26286:16;26279:27;26215:101;26064:258;26015:307;;;:::o;26328:320::-;26372:6;26409:1;26403:4;26399:12;26389:22;;26456:1;26450:4;26446:12;26477:18;26467:81;;26533:4;26525:6;26521:17;26511:27;;26467:81;26595:2;26587:6;26584:14;26564:18;26561:38;26558:84;;;26614:18;;:::i;:::-;26558:84;26379:269;26328:320;;;:::o;26654:233::-;26693:3;26716:24;26734:5;26716:24;:::i;:::-;26707:33;;26762:66;26755:5;26752:77;26749:103;;;26832:18;;:::i;:::-;26749:103;26879:1;26872:5;26868:13;26861:20;;26654:233;;;:::o;26893:180::-;26941:77;26938:1;26931:88;27038:4;27035:1;27028:15;27062:4;27059:1;27052:15;27079:180;27127:77;27124:1;27117:88;27224:4;27221:1;27214:15;27248:4;27245:1;27238:15;27265:180;27313:77;27310:1;27303:88;27410:4;27407:1;27400:15;27434:4;27431:1;27424:15;27451:180;27499:77;27496:1;27489:88;27596:4;27593:1;27586:15;27620:4;27617:1;27610:15;27637:180;27685:77;27682:1;27675:88;27782:4;27779:1;27772:15;27806:4;27803:1;27796:15;27823:180;27871:77;27868:1;27861:88;27968:4;27965:1;27958:15;27992:4;27989:1;27982:15;28132:117;28241:1;28238;28231:12;28255:102;28296:6;28347:2;28343:7;28338:2;28331:5;28327:14;28323:28;28313:38;;28255:102;;;:::o;28363:222::-;28503:34;28499:1;28491:6;28487:14;28480:58;28572:5;28567:2;28559:6;28555:15;28548:30;28363:222;:::o;28591:229::-;28731:34;28727:1;28719:6;28715:14;28708:58;28800:12;28795:2;28787:6;28783:15;28776:37;28591:229;:::o;28826:221::-;28966:34;28962:1;28954:6;28950:14;28943:58;29035:4;29030:2;29022:6;29018:15;29011:29;28826:221;:::o;29053:177::-;29193:29;29189:1;29181:6;29177:14;29170:53;29053:177;:::o;29236:::-;29376:29;29372:1;29364:6;29360:14;29353:53;29236:177;:::o;29419:180::-;29559:32;29555:1;29547:6;29543:14;29536:56;29419:180;:::o;29605:181::-;29745:33;29741:1;29733:6;29729:14;29722:57;29605:181;:::o;29792:227::-;29932:34;29928:1;29920:6;29916:14;29909:58;30001:10;29996:2;29988:6;29984:15;29977:35;29792:227;:::o;30025:220::-;30165:34;30161:1;30153:6;30149:14;30142:58;30234:3;30229:2;30221:6;30217:15;30210:28;30025:220;:::o;30251:182::-;30391:34;30387:1;30379:6;30375:14;30368:58;30251:182;:::o;30439:228::-;30579:34;30575:1;30567:6;30563:14;30556:58;30648:11;30643:2;30635:6;30631:15;30624:36;30439:228;:::o;30673:176::-;30813:28;30809:1;30801:6;30797:14;30790:52;30673:176;:::o;30855:178::-;30995:30;30991:1;30983:6;30979:14;30972:54;30855:178;:::o;31039:224::-;31179:34;31175:1;31167:6;31163:14;31156:58;31248:7;31243:2;31235:6;31231:15;31224:32;31039:224;:::o;31269:223::-;31409:34;31405:1;31397:6;31393:14;31386:58;31478:6;31473:2;31465:6;31461:15;31454:31;31269:223;:::o;31498:174::-;31638:26;31634:1;31626:6;31622:14;31615:50;31498:174;:::o;31678:173::-;31818:25;31814:1;31806:6;31802:14;31795:49;31678:173;:::o;31857:122::-;31930:24;31948:5;31930:24;:::i;:::-;31923:5;31920:35;31910:63;;31969:1;31966;31959:12;31910:63;31857:122;:::o;31985:116::-;32055:21;32070:5;32055:21;:::i;:::-;32048:5;32045:32;32035:60;;32091:1;32088;32081:12;32035:60;31985:116;:::o;32107:122::-;32180:24;32198:5;32180:24;:::i;:::-;32173:5;32170:35;32160:63;;32219:1;32216;32209:12;32160:63;32107:122;:::o

Swarm Source

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