Token Volt Inu

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
68,996,133,874,761.200074 VOLT

Holders:
159 addresses

Transfers:
-

Contract:
0xF16EC50EC49aBc95FA793C7871682833B6bC47E70xF16EC50EC49aBc95FA793C7871682833B6bC47E7

Decimals:
9

Official Site:

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Volt Inu token contract has migrated to a new address.


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

Contract Source Code Verified (Exact Match)

Contract Name:
VOLT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 
 VOLT INU
 
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @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);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

interface IAirdrop {
    function airdrop(address recipient, uint256 amount) external;
}

contract VOLT is Context, IERC20, Ownable {
    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 botWallets;
    bool constant botscantrade = false;

    bool public canTrade = false;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 69000000000000 * 10 ** 9;
    address public constant burningAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;
    address public devWallet;
    address private migrationWallet;

    string private constant _name = "Volt Inu";
    string private constant _symbol = "VOLT";
    uint8 private constant _decimals = 9;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 69000000000000 * 10 ** 9;
    uint256 public numTokensSellToAddToLiquidity = 6900000000 * 10 ** 9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);

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

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Polygon Mainnet Quickswap Router
        // Create a uniswap pair for this new 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;

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

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        uint256 burnedAmount = tokenFromReflection(_rOwned[burningAddress]);
        return _tTotal - burnedAmount;
    }

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        require(subtractedValue <= _allowances[_msgSender()][spender], "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    function airdrop(address recipient, uint256 amount) external onlyOwner {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10 ** 9);
        restoreAllFee();
    }

    function airdropInternal(address recipient, uint256 amount) internal {
        removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        restoreAllFee();
    }

    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while (iterator < newholders.length) {
            airdropInternal(newholders[iterator], amounts[iterator] * 10 ** 9);
            iterator += 1;
        }
    }

    function deliver(uint256 tAmount) external {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] -= rAmount;
        _rTotal -= rAmount;
        _tFeeTotal += tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external 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 / currentRate;
    }

    function excludeFromReward(address account) external onlyOwner {
        require(account != burningAddress, "We can not exclude burning address.");
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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] -= tAmount;
        _rOwned[sender] -= rAmount;
        _tOwned[recipient] += tTransferAmount;
        _rOwned[recipient] += rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setMarketingWallet(address walletAddress) external onlyOwner {
        marketingWallet = walletAddress;
    }

    function setDevWallet(address walletAddress) external onlyOwner {
        devWallet = walletAddress;
    }

    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner {
        require(SwapThresholdAmount > 69000000, "Swap Threshold Amount cannot be less than 69 Million");
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10 ** 9;
    }

    function claimTokens() external onlyOwner {
        // make sure we capture all BNB that may or may not be sent to this contract
        payable(devWallet).transfer(address(this).balance);
    }

    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }

    function clearStuckBalance(address payable walletaddress) external onlyOwner {
        walletaddress.transfer(address(this).balance);
    }

    function addBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = true;
    }

    function removeBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = false;
    }

    function getBotWalletStatus(address botwallet) external view returns (bool) {
        return botWallets[botwallet];
    }

    function allowtrading() external onlyOwner {
        canTrade = true;
    }

    function setMigrationWallet(address walletAddress) external onlyOwner {
        migrationWallet = walletAddress;
    }

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

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal -= rFee;
        _tFeeTotal += tFee;
    }

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

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

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

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 -= _rOwned[_excluded[i]];
            tSupply -= _tOwned[_excluded[i]];
        }
        if (rSupply < (_rTotal / _tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return (_amount * _liquidityFee) / (10 ** 2);
    }

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // 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;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //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 {
        // split the contract balance into liquidity, marketing, burn and treasury quotas

        uint256 convertQuota = (contractTokenBalance * 3) / 4;
        uint256 burnQuota = contractTokenBalance / 6;
        uint256 liquHalf = contractTokenBalance - convertQuota - burnQuota;

        // burning tokens
        _transferStandard(address(this), burningAddress, burnQuota);

        // swap tokens for ETH

        swapTokensForEth(convertQuota);

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance;
        uint256 marketingshare = (newBalance * 4) / 9;
        payable(marketingWallet).transfer(marketingshare);
        uint256 afterMarketBalance = newBalance - marketingshare;
        uint256 treasshare = (afterMarketBalance * 4) / 5;
        payable(devWallet).transfer(treasshare);
        uint256 afterDevBalance = afterMarketBalance - treasshare;

        // add liquidity to uniswap
        addLiquidity(liquHalf, afterDevBalance);

        emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf);
    }

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!canTrade) {
            require(sender == owner() || sender == migrationWallet); // only owner allowed to trade or add liquidity
        }

        if (botWallets[sender] || botWallets[recipient]) {
            require(botscantrade, "bots arent allowed to trade");
        }

        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] -= rAmount;
        _rOwned[recipient] += 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] -= rAmount;
        _tOwned[recipient] += tTransferAmount;
        _rOwned[recipient] += 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] -= tAmount;
        _rOwned[sender] -= rAmount;
        _rOwned[recipient] += rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"burningAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMigrationWallet","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":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600a60006101000a81548160ff021916908315150217905550690e9c7f5bd655012000006000196200003991906200053f565b600019620000489190620005a6565b600b556001601055601054601155600c6012556012546013556001601460016101000a81548160ff021916908315150217905550690e9c7f5bd65501200000601555675fc1b97136320000601655348015620000a357600080fd5b506000620000b6620004d560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600360006200016b620004d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023491906200064b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c291906200064b565b6040518363ffffffff1660e01b8152600401620002e19291906200068e565b6020604051808303816000875af115801562000301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032791906200064b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620003a4620004dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200045d620004d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef690e9c7f5bd65501200000604051620004c69190620006cc565b60405180910390a350620006e9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200054c8262000506565b9150620005598362000506565b9250826200056c576200056b62000510565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620005b38262000506565b9150620005c08362000506565b9250828203905081811115620005db57620005da62000577565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200061382620005e6565b9050919050565b620006258162000606565b81146200063157600080fd5b50565b60008151905062000645816200061a565b92915050565b600060208284031215620006645762000663620005e1565b5b6000620006748482850162000634565b91505092915050565b620006888162000606565b82525050565b6000604082019050620006a560008301856200067d565b620006b460208301846200067d565b9392505050565b620006c68162000506565b82525050565b6000602082019050620006e36000830184620006bb565b92915050565b60805160a051615f2b6200073960003960008181611c3b0152613216015260008181610cca01528181614064015281816141450152818161416c01528181614208015261422f0152615f2b6000f3fe6080604052600436106102b25760003560e01c80634a74bb02116101755780638ba4cc3c116100dc578063a9059cbb11610095578063d4a3883f1161006f578063d4a3883f14610abb578063dd62ed3e14610ae4578063ea2f0b3714610b21578063f2fde38b14610b4a576102b9565b8063a9059cbb14610a2a578063c49b9a8014610a67578063d12a768814610a90576102b9565b80638ba4cc3c1461092c5780638da5cb5b146109555780638ea5220f1461098057806395d89b41146109ab578063a457c2d7146109d6578063a633423114610a13576102b9565b806370a082311161012e57806370a082311461081c578063715018a61461085957806375f0a87414610870578063764d72bf1461089b5780637d1db4a5146108c457806388f82020146108ef576102b9565b80634a74bb02146106fa57806352390c02146107255780635342acb41461074e5780635d098b381461078b57806360d48489146107b45780636bc87c3a146107f1576102b9565b80632f05205c116102195780633bd5d173116101d25780633bd5d173146105fe578063437823ec146106275780634549b03914610650578063481123961461068d57806348c54b9d146106b857806349bd5a5e146106cf576102b9565b80632f05205c146104ee578063313ce567146105195780633685d41914610544578063395093511461056d5780633ae7dc20146105aa5780633b124fe7146105d3576102b9565b80631f53ac021161026b5780631f53ac02146103d057806323b872dd146103f957806329e04b4a146104365780632a3606311461045f5780632a455592146104885780632d838119146104b1576102b9565b80630305caff146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614a26565b610b73565b005b3480156102f357600080fd5b506102fc610c63565b6040516103099190614ae3565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614b3b565b610ca0565b6040516103469190614b96565b60405180910390f35b34801561035b57600080fd5b50610364610cbe565b6040516103719190614bc0565b60405180910390f35b34801561038657600080fd5b5061038f610cc8565b60405161039c9190614c3a565b60405180910390f35b3480156103b157600080fd5b506103ba610cec565b6040516103c79190614bc0565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614a26565b610d57565b005b34801561040557600080fd5b50610420600480360381019061041b9190614c55565b610e30565b60405161042d9190614b96565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614ca8565b610fae565b005b34801561046b57600080fd5b5061048660048036038101906104819190614a26565b6110a2565b005b34801561049457600080fd5b506104af60048036038101906104aa9190614a26565b611192565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190614ca8565b61126b565b6040516104e59190614bc0565b60405180910390f35b3480156104fa57600080fd5b506105036112d2565b6040516105109190614b96565b60405180910390f35b34801561052557600080fd5b5061052e6112e5565b60405161053b9190614cf1565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190614a26565b6112ee565b005b34801561057957600080fd5b50610594600480360381019061058f9190614b3b565b61163c565b6040516105a19190614b96565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190614d4a565b6116e8565b005b3480156105df57600080fd5b506105e8611879565b6040516105f59190614bc0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190614ca8565b61187f565b005b34801561063357600080fd5b5061064e60048036038101906106499190614a26565b6119b7565b005b34801561065c57600080fd5b5061067760048036038101906106729190614db6565b611aa7565b6040516106849190614bc0565b60405180910390f35b34801561069957600080fd5b506106a2611b33565b6040516106af9190614e05565b60405180910390f35b3480156106c457600080fd5b506106cd611b39565b005b3480156106db57600080fd5b506106e4611c39565b6040516106f19190614e05565b60405180910390f35b34801561070657600080fd5b5061070f611c5d565b60405161071c9190614b96565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614a26565b611c70565b005b34801561075a57600080fd5b5061077560048036038101906107709190614a26565b611f94565b6040516107829190614b96565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190614a26565b611fea565b005b3480156107c057600080fd5b506107db60048036038101906107d69190614a26565b6120c3565b6040516107e89190614b96565b60405180910390f35b3480156107fd57600080fd5b50610806612119565b6040516108139190614bc0565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614a26565b61211f565b6040516108509190614bc0565b60405180910390f35b34801561086557600080fd5b5061086e612248565b005b34801561087c57600080fd5b5061088561239b565b6040516108929190614e05565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614e5e565b6123c1565b005b3480156108d057600080fd5b506108d96124a0565b6040516108e69190614bc0565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190614a26565b6124a6565b6040516109239190614b96565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614b3b565b6124fc565b005b34801561096157600080fd5b5061096a6125c6565b6040516109779190614e05565b60405180910390f35b34801561098c57600080fd5b506109956125ef565b6040516109a29190614e05565b60405180910390f35b3480156109b757600080fd5b506109c0612615565b6040516109cd9190614ae3565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614b3b565b612652565b604051610a0a9190614b96565b60405180910390f35b348015610a1f57600080fd5b50610a286127c4565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614b3b565b612876565b604051610a5e9190614b96565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614e8b565b612894565b005b348015610a9c57600080fd5b50610aa561297d565b604051610ab29190614bc0565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614f73565b612983565b005b348015610af057600080fd5b50610b0b6004803603810190610b069190614ff4565b612ae2565b604051610b189190614bc0565b60405180910390f35b348015610b2d57600080fd5b50610b486004803603810190610b439190614a26565b612b69565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190614a26565b612c59565b005b610b7b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90615080565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600881526020017f566f6c7420496e75000000000000000000000000000000000000000000000000815250905090565b6000610cb4610cad612e1a565b8484612e22565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610d396003600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b905080690e9c7f5bd65501200000610d5191906150cf565b91505090565b610d5f612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390615080565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e3d848484612feb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e86612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90615175565b60405180910390fd5b610fa384610f0f612e1a565b84600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f59612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f9e91906150cf565b612e22565b600190509392505050565b610fb6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90615080565b60405180910390fd5b63041cdb408111611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090615207565b60405180910390fd5b633b9aca00816110999190615227565b60168190555050565b6110aa612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90615080565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61119a612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90615080565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b548211156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a9906152db565b60405180910390fd5b60006112bc613356565b905080836112ca919061532a565b915050919050565b600a60009054906101000a900460ff1681565b60006009905090565b6112f6612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90615080565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906153a7565b60405180910390fd5b60005b600880549050811015611638578173ffffffffffffffffffffffffffffffffffffffff166008828154811061144a576114496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361162557600860016008805490506114a491906150cf565b815481106114b5576114b46153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114f4576114f36153c7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115eb576115ea6153f6565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611638565b808061163090615425565b915050611412565b5050565b60006116de611649612e1a565b848460056000611657612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116d9919061546d565b612e22565b6001905092915050565b6116f0612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490615080565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d39190614e05565b602060405180830381865afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181491906154b6565b6040518363ffffffff1660e01b81526004016118319291906154e3565b6020604051808303816000875af1158015611850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118749190615521565b505050565b60105481565b6000611889612e1a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906155c0565b60405180910390fd5b60006119238361337a565b5050505050905080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197991906150cf565b9250508190555080600b600082825461199291906150cf565b9250508190555082600c60008282546119ab919061546d565b92505081905550505050565b6119bf612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390615080565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000690e9c7f5bd65501200000831115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061562c565b60405180910390fd5b81611b16576000611b068461337a565b5050505050905080915050611b2d565b6000611b218461337a565b50505050915050809150505b92915050565b61dead81565b611b41612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590615080565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611c36573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b611c78612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90615080565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c906156be565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906153a7565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ed657611e92600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ff2612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690615080565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361215f5760009050612243565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121f857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612243565b612240600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126b565b90505b919050565b612250612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c9612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90615080565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561249c573d6000803e3d6000fd5b5050565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612504612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258890615080565b60405180910390fd5b6125996133d6565b6125ba6125a4612e1a565b83633b9aca00846125b59190615227565b612feb565b6125c2613413565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f564f4c5400000000000000000000000000000000000000000000000000000000815250905090565b600060056000612660612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190615750565b60405180910390fd5b6127ba612725612e1a565b848460056000612733612e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906150cf565b612e22565b6001905092915050565b6127cc612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285090615080565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b600061288a612883612e1a565b8484612feb565b6001905092915050565b61289c612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090615080565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516129729190614b96565b60405180910390a150565b60165481565b61298b612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615080565b60405180910390fd5b6000828290508585905014612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906157bc565b60405180910390fd5b5b84849050811015612adb57612ac7858583818110612a8457612a836153c7565b5b9050602002016020810190612a999190614a26565b633b9aca00858585818110612ab157612ab06153c7565b5b90506020020135612ac29190615227565b613427565b600181612ad4919061546d565b9050612a63565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b71612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf590615080565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c61612e1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590615080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d549061584e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e88906158e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef790615972565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612fde9190614bc0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361305a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305190615a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c090615a96565b60405180910390fd5b6000811161310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310390615b28565b60405180910390fd5b6131146125c6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561318257506131526125c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131cd576015548111156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390615bba565b60405180910390fd5b5b60006131d83061211f565b905060155481106131e95760155490505b6000601654821015905080801561320d5750601460009054906101000a900460ff16155b801561326557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561327d5750601460019054906101000a900460ff165b156132915760165491506132908261344d565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133385750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561334257600090505b61334e86868684613663565b505050505050565b6000806000613363613b08565b915091508082613373919061532a565b9250505090565b60008060008060008060008060006133918a613dc6565b92509250925060008060006133af8d86866133aa613356565b613e12565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006010541480156133ea57506000601254145b61341157601054601181905550601254601381905550600060108190555060006012819055505b565b601154601081905550601354601281905550565b61342f6133d6565b61344161343a612e1a565b8383612feb565b613449613413565b5050565b6001601460006101000a81548160ff021916908315150217905550600060046003836134799190615227565b613483919061532a565b90506000600683613494919061532a565b905060008183856134a591906150cf565b6134af91906150cf565b90506134be3061dead84613e78565b6134c783613fc5565b6000479050600060096004836134dd9190615227565b6134e7919061532a565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613551573d6000803e3d6000fd5b506000818361356091906150cf565b9050600060056004836135739190615227565b61357d919061532a565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135e7573d6000803e3d6000fd5b50600081836135f691906150cf565b90506136028682614202565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828860405161363593929190615bda565b60405180910390a150505050505050506000601460006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900460ff1661370f5761367f6125c6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806137055750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b61370e57600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137b05750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137f75760006137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90615c5d565b60405180910390fd5b5b80613805576138046133d6565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138a85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138bd576138b88484846142e3565b613af4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156139605750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561397557613970848484614486565b613af3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a2e57613a29848484613e78565b613af2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ae557613ae0848484614629565b613af1565b613af0848484613e78565b5b5b5b5b80613b0257613b01613413565b5b50505050565b6000806000600b5490506000690e9c7f5bd65501200000905060005b600880549050811015613d8057826003600060088481548110613b4a57613b496153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613c385750816004600060088481548110613bd057613bcf6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613c5757600b54690e9c7f5bd6550120000094509450505050613dc2565b6003600060088381548110613c6f57613c6e6153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ce091906150cf565b92506004600060088381548110613cfa57613cf96153c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613d6b91906150cf565b91508080613d7890615425565b915050613b24565b50690e9c7f5bd65501200000600b54613d99919061532a565b821015613db957600b54690e9c7f5bd65501200000935093505050613dc2565b81819350935050505b9091565b600080600080613dd585614822565b90506000613de286614845565b90506000818388613df391906150cf565b613dfd91906150cf565b90508083839550955095505050509193909250565b6000806000808488613e249190615227565b905060008588613e349190615227565b905060008688613e449190615227565b90506000818385613e5591906150cf565b613e5f91906150cf565b9050838184965096509650505050509450945094915050565b600080600080600080613e8a8761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ee591906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f3b919061546d565b92505081905550613f4b81614868565b613f558483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb29190614bc0565b60405180910390a3505050505050505050565b6000600267ffffffffffffffff811115613fe257613fe1615c7d565b5b6040519080825280602002602001820160405280156140105781602001602082028036833780820191505090505b5090503081600081518110614028576140276153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f19190615cc1565b81600181518110614105576141046153c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061416a307f000000000000000000000000000000000000000000000000000000000000000084612e22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141cc959493929190615de7565b600060405180830381600087803b1580156141e657600080fd5b505af11580156141fa573d6000803e3d6000fd5b505050505050565b61422d307f000000000000000000000000000000000000000000000000000000000000000084612e22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806142776125c6565b426040518863ffffffff1660e01b815260040161429996959493929190615e41565b60606040518083038185885af11580156142b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142dc9190615ea2565b5050505050565b6000806000806000806142f58761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461435091906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143a691906150cf565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143fc919061546d565b9250508190555061440c81614868565b6144168483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144739190614bc0565b60405180910390a3505050505050505050565b6000806000806000806144988761337a565b95509550955095509550955085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144f391906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614549919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461459f919061546d565b925050819055506145af81614868565b6145b98483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146169190614bc0565b60405180910390a3505050505050505050565b60008060008060008061463b8761337a565b95509550955095509550955086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461469691906150cf565b9250508190555085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546146ec91906150cf565b9250508190555082600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614742919061546d565b9250508190555084600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614798919061546d565b925050819055506147a881614868565b6147b28483614988565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161480f9190614bc0565b60405180910390a3505050505050505050565b60006064601054836148349190615227565b61483e919061532a565b9050919050565b60006064601254836148579190615227565b614861919061532a565b9050919050565b6000614872613356565b9050600081836148829190615227565b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546148d3919061546d565b92505081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149835782600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461497b919061546d565b925050819055505b505050565b81600b600082825461499a91906150cf565b9250508190555080600c60008282546149b3919061546d565b925050819055505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149f3826149c8565b9050919050565b614a03816149e8565b8114614a0e57600080fd5b50565b600081359050614a20816149fa565b92915050565b600060208284031215614a3c57614a3b6149be565b5b6000614a4a84828501614a11565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a8d578082015181840152602081019050614a72565b60008484015250505050565b6000601f19601f8301169050919050565b6000614ab582614a53565b614abf8185614a5e565b9350614acf818560208601614a6f565b614ad881614a99565b840191505092915050565b60006020820190508181036000830152614afd8184614aaa565b905092915050565b6000819050919050565b614b1881614b05565b8114614b2357600080fd5b50565b600081359050614b3581614b0f565b92915050565b60008060408385031215614b5257614b516149be565b5b6000614b6085828601614a11565b9250506020614b7185828601614b26565b9150509250929050565b60008115159050919050565b614b9081614b7b565b82525050565b6000602082019050614bab6000830184614b87565b92915050565b614bba81614b05565b82525050565b6000602082019050614bd56000830184614bb1565b92915050565b6000819050919050565b6000614c00614bfb614bf6846149c8565b614bdb565b6149c8565b9050919050565b6000614c1282614be5565b9050919050565b6000614c2482614c07565b9050919050565b614c3481614c19565b82525050565b6000602082019050614c4f6000830184614c2b565b92915050565b600080600060608486031215614c6e57614c6d6149be565b5b6000614c7c86828701614a11565b9350506020614c8d86828701614a11565b9250506040614c9e86828701614b26565b9150509250925092565b600060208284031215614cbe57614cbd6149be565b5b6000614ccc84828501614b26565b91505092915050565b600060ff82169050919050565b614ceb81614cd5565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b6000614d17826149e8565b9050919050565b614d2781614d0c565b8114614d3257600080fd5b50565b600081359050614d4481614d1e565b92915050565b60008060408385031215614d6157614d606149be565b5b6000614d6f85828601614d35565b9250506020614d8085828601614a11565b9150509250929050565b614d9381614b7b565b8114614d9e57600080fd5b50565b600081359050614db081614d8a565b92915050565b60008060408385031215614dcd57614dcc6149be565b5b6000614ddb85828601614b26565b9250506020614dec85828601614da1565b9150509250929050565b614dff816149e8565b82525050565b6000602082019050614e1a6000830184614df6565b92915050565b6000614e2b826149c8565b9050919050565b614e3b81614e20565b8114614e4657600080fd5b50565b600081359050614e5881614e32565b92915050565b600060208284031215614e7457614e736149be565b5b6000614e8284828501614e49565b91505092915050565b600060208284031215614ea157614ea06149be565b5b6000614eaf84828501614da1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614edd57614edc614eb8565b5b8235905067ffffffffffffffff811115614efa57614ef9614ebd565b5b602083019150836020820283011115614f1657614f15614ec2565b5b9250929050565b60008083601f840112614f3357614f32614eb8565b5b8235905067ffffffffffffffff811115614f5057614f4f614ebd565b5b602083019150836020820283011115614f6c57614f6b614ec2565b5b9250929050565b60008060008060408587031215614f8d57614f8c6149be565b5b600085013567ffffffffffffffff811115614fab57614faa6149c3565b5b614fb787828801614ec7565b9450945050602085013567ffffffffffffffff811115614fda57614fd96149c3565b5b614fe687828801614f1d565b925092505092959194509250565b6000806040838503121561500b5761500a6149be565b5b600061501985828601614a11565b925050602061502a85828601614a11565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061506a602083614a5e565b915061507582615034565b602082019050919050565b600060208201905081810360008301526150998161505d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150da82614b05565b91506150e583614b05565b92508282039050818111156150fd576150fc6150a0565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061515f602883614a5e565b915061516a82615103565b604082019050919050565b6000602082019050818103600083015261518e81615152565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b60006151f1603483614a5e565b91506151fc82615195565b604082019050919050565b60006020820190508181036000830152615220816151e4565b9050919050565b600061523282614b05565b915061523d83614b05565b925082820261524b81614b05565b91508282048414831517615262576152616150a0565b5b5092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006152c5602a83614a5e565b91506152d082615269565b604082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533582614b05565b915061534083614b05565b9250826153505761534f6152fb565b5b828204905092915050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615391601b83614a5e565b915061539c8261535b565b602082019050919050565b600060208201905081810360008301526153c081615384565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061543082614b05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615462576154616150a0565b5b600182019050919050565b600061547882614b05565b915061548383614b05565b925082820190508082111561549b5761549a6150a0565b5b92915050565b6000815190506154b081614b0f565b92915050565b6000602082840312156154cc576154cb6149be565b5b60006154da848285016154a1565b91505092915050565b60006040820190506154f86000830185614df6565b6155056020830184614bb1565b9392505050565b60008151905061551b81614d8a565b92915050565b600060208284031215615537576155366149be565b5b60006155458482850161550c565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006155aa602c83614a5e565b91506155b58261554e565b604082019050919050565b600060208201905081810360008301526155d98161559d565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615616601f83614a5e565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f57652063616e206e6f74206578636c756465206275726e696e6720616464726560008201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b60006156a8602383614a5e565b91506156b38261564c565b604082019050919050565b600060208201905081810360008301526156d78161569b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061573a602583614a5e565b9150615745826156de565b604082019050919050565b600060208201905081810360008301526157698161572d565b9050919050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b60006157a6601783614a5e565b91506157b182615770565b602082019050919050565b600060208201905081810360008301526157d581615799565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615838602683614a5e565b9150615843826157dc565b604082019050919050565b600060208201905081810360008301526158678161582b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158ca602483614a5e565b91506158d58261586e565b604082019050919050565b600060208201905081810360008301526158f9816158bd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061595c602283614a5e565b915061596782615900565b604082019050919050565b6000602082019050818103600083015261598b8161594f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159ee602583614a5e565b91506159f982615992565b604082019050919050565b60006020820190508181036000830152615a1d816159e1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615a80602383614a5e565b9150615a8b82615a24565b604082019050919050565b60006020820190508181036000830152615aaf81615a73565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615b12602983614a5e565b9150615b1d82615ab6565b604082019050919050565b60006020820190508181036000830152615b4181615b05565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615ba4602883614a5e565b9150615baf82615b48565b604082019050919050565b60006020820190508181036000830152615bd381615b97565b9050919050565b6000606082019050615bef6000830186614bb1565b615bfc6020830185614bb1565b615c096040830184614bb1565b949350505050565b7f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b6000615c47601b83614a5e565b9150615c5282615c11565b602082019050919050565b60006020820190508181036000830152615c7681615c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615cbb816149fa565b92915050565b600060208284031215615cd757615cd66149be565b5b6000615ce584828501615cac565b91505092915050565b6000819050919050565b6000615d13615d0e615d0984615cee565b614bdb565b614b05565b9050919050565b615d2381615cf8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d5e816149e8565b82525050565b6000615d708383615d55565b60208301905092915050565b6000602082019050919050565b6000615d9482615d29565b615d9e8185615d34565b9350615da983615d45565b8060005b83811015615dda578151615dc18882615d64565b9750615dcc83615d7c565b925050600181019050615dad565b5085935050505092915050565b600060a082019050615dfc6000830188614bb1565b615e096020830187615d1a565b8181036040830152615e1b8186615d89565b9050615e2a6060830185614df6565b615e376080830184614bb1565b9695505050505050565b600060c082019050615e566000830189614df6565b615e636020830188614bb1565b615e706040830187615d1a565b615e7d6060830186615d1a565b615e8a6080830185614df6565b615e9760a0830184614bb1565b979650505050505050565b600080600060608486031215615ebb57615eba6149be565b5b6000615ec9868287016154a1565b9350506020615eda868287016154a1565b9250506040615eeb868287016154a1565b915050925092509256fea2646970667358221220c6ad6a5ecf834c4ef8b3693e21d385fe1de83578b6c115c080d9317e8d79913d64736f6c63430008120033

Deployed ByteCode Sourcemap

19998:21165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30026:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22668:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23735:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24993:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21262:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22951:190;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28976:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23906:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29092:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29911:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30361:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26679:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20497:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22858:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27477:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24289:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29571:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21077:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25877:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28607:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26222:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20649:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29366:197;;;;;;;;;;;;;:::i;:::-;;21320:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26937:532;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33780:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28848:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30145:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21160:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23149:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11120:148;;;;;;;;;;;;;:::i;:::-;;20828:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29762:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21444:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24863:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25090:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10478:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20865:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22761:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24514:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30276:77;;;;;;;;;;;;;:::i;:::-;;23405:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30489:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21505:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23582:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11423:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30026:111;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:5:::1;30100:10;:21;30111:9;30100:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30026:111:::0;:::o;22668:85::-;22707:13;22740:5;;;;;;;;;;;;;;;;;22733:12;;22668:85;:::o;23735:163::-;23812:4;23829:39;23838:12;:10;:12::i;:::-;23852:7;23861:6;23829:8;:39::i;:::-;23886:4;23879:11;;23735:163;;;;:::o;24993:89::-;25037:7;25064:10;;25057:17;;24993:89;:::o;21262:51::-;;;:::o;22951:190::-;23006:7;23026:20;23049:44;23069:7;:23;20690:42;23069:23;;;;;;;;;;;;;;;;23049:19;:44::i;:::-;23026:67;;23121:12;20618:24;23111:22;;;;:::i;:::-;23104:29;;;22951:190;:::o;28976:108::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29063:13:::1;29051:9;;:25;;;;;;;;;;;;;;;;;;28976:108:::0;:::o;23906:375::-;24006:4;24023:36;24033:6;24041:9;24052:6;24023:9;:36::i;:::-;24088:11;:19;24100:6;24088:19;;;;;;;;;;;;;;;:33;24108:12;:10;:12::i;:::-;24088:33;;;;;;;;;;;;;;;;24078:6;:43;;24070:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;24177:74;24186:6;24194:12;:10;:12::i;:::-;24244:6;24208:11;:19;24220:6;24208:19;;;;;;;;;;;;;;;:33;24228:12;:10;:12::i;:::-;24208:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;24177:8;:74::i;:::-;24269:4;24262:11;;23906:375;;;;;:::o;29092:266::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29213:8:::1;29191:19;:30;29183:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;29343:7;29321:19;:29;;;;:::i;:::-;29289;:61;;;;29092:266:::0;:::o;29911:107::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30006:4:::1;29982:10;:21;29993:9;29982:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29911:107:::0;:::o;30361:120::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30460:13:::1;30442:15;;:31;;;;;;;;;;;;;;;;;;30361:120:::0;:::o;26679:250::-;26746:7;26785;;26774;:18;;26766:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26850:19;26872:10;:8;:10::i;:::-;26850:32;;26910:11;26900:7;:21;;;;:::i;:::-;26893:28;;;26679:250;;;:::o;20497:28::-;;;;;;;;;;;;;:::o;22858:85::-;22901:5;21067:1;22919:16;;22858:85;:::o;27477:477::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27557:11:::1;:20;27569:7;27557:20;;;;;;;;;;;;;;;;;;;;;;;;;27549:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27625:9;27620:327;27644:9;:16;;;;27640:1;:20;27620:327;;;27702:7;27686:23;;:9;27696:1;27686:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;27682:254:::1;;27745:9;27774:1;27755:9;:16;;;;:20;;;;:::i;:::-;27745:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27730:9;27740:1;27730:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27814:1;27795:7;:16;27803:7;27795:16;;;;;;;;;;;;;;;:20;;;;27857:5;27834:11;:20;27846:7;27834:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27881:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;27915:5;;27682:254;27662:3;;;;;:::i;:::-;;;;27620:327;;;;27477:477:::0;:::o;24289:217::-;24379:4;24396:80;24405:12;:10;:12::i;:::-;24419:7;24465:10;24428:11;:25;24440:12;:10;:12::i;:::-;24428:25;;;;;;;;;;;;;;;:34;24454:7;24428:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;24396:8;:80::i;:::-;24494:4;24487:11;;24289:217;;;;:::o;29571:183::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29671:12:::1;:21;;;29693:13;29708:12;:22;;;29739:4;29708:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29671:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29571:183:::0;;:::o;21077:26::-;;;;:::o;25877:337::-;25931:14;25948:12;:10;:12::i;:::-;25931:29;;25980:11;:19;25992:6;25980:19;;;;;;;;;;;;;;;;;;;;;;;;;25979:20;25971:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:15;26089:19;26100:7;26089:10;:19::i;:::-;26059:49;;;;;;;26138:7;26119;:15;26127:6;26119:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;26167:7;26156;;:18;;;;;;;:::i;:::-;;;;;;;;26199:7;26185:10;;:21;;;;;;;:::i;:::-;;;;;;;;25920:294;;25877:337;:::o;28607:113::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28708:4:::1;28678:18;:27;28697:7;28678:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28607:113:::0;:::o;26222:449::-;26315:7;20618:24;26343:7;:18;;26335:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26413:17;26408:256;;26448:15;26477:19;26488:7;26477:10;:19::i;:::-;26447:49;;;;;;;26518:7;26511:14;;;;;26408:256;26561:23;26596:19;26607:7;26596:10;:19::i;:::-;26558:57;;;;;;;26637:15;26630:22;;;26222:449;;;;;:::o;20649:83::-;20690:42;20649:83;:::o;29366:197::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29513:9:::1;;;;;;;;;;;29505:27;;:50;29533:21;29505:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29366:197::o:0;21320:38::-;;;:::o;21395:40::-;;;;;;;;;;;;;:::o;26937:532::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20690:42:::1;27019:25;;:7;:25;;::::0;27011:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27218:11;:20;27230:7;27218:20;;;;;;;;;;;;;;;;;;;;;;;;;27217:21;27209:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27304:1;27285:7;:16;27293:7;27285:16;;;;;;;;;;;;;;;;:20;27281:109;;;27341:37;27361:7;:16;27369:7;27361:16;;;;;;;;;;;;;;;;27341:19;:37::i;:::-;27322:7;:16;27330:7;27322:16;;;;;;;;;;;;;;;:56;;;;27281:109;27423:4;27400:11;:20;27412:7;27400:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27438:9;27453:7;27438:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26937:532:::0;:::o;33780:126::-;33847:4;33871:18;:27;33890:7;33871:27;;;;;;;;;;;;;;;;;;;;;;;;;33864:34;;33780:126;;;:::o;28848:120::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28947:13:::1;28929:15;;:31;;;;;;;;;;;;;;;;;;28848:120:::0;:::o;30145:123::-;30215:4;30239:10;:21;30250:9;30239:21;;;;;;;;;;;;;;;;;;;;;;;;;30232:28;;30145:123;;;:::o;21160:33::-;;;;:::o;23149:248::-;23215:7;20690:42;23239:25;;:7;:25;;;23235:39;;23273:1;23266:8;;;;23235:39;23289:11;:20;23301:7;23289:20;;;;;;;;;;;;;;;;;;;;;;;;;23285:49;;;23318:7;:16;23326:7;23318:16;;;;;;;;;;;;;;;;23311:23;;;;23285:49;23352:37;23372:7;:16;23380:7;23372:16;;;;;;;;;;;;;;;;23352:19;:37::i;:::-;23345:44;;23149:248;;;;:::o;11120:148::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11227:1:::1;11190:40;;11211:6;::::0;::::1;;;;;;;;11190:40;;;;;;;;;;;;11258:1;11241:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11120:148::o:0;20828:30::-;;;;;;;;;;;;;:::o;29762:141::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29850:13:::1;:22;;:45;29873:21;29850:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29762:141:::0;:::o;21444:54::-;;;;:::o;24863:122::-;24933:4;24957:11;:20;24969:7;24957:20;;;;;;;;;;;;;;;;;;;;;;;;;24950:27;;24863:122;;;:::o;25090:193::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25172:14:::1;:12;:14::i;:::-;25197:52;25207:12;:10;:12::i;:::-;25221:9;25241:7;25232:6;:16;;;;:::i;:::-;25197:9;:52::i;:::-;25260:15;:13;:15::i;:::-;25090:193:::0;;:::o;10478:79::-;10516:7;10543:6;;;;;;;;;;;10536:13;;10478:79;:::o;20865:24::-;;;;;;;;;;;;;:::o;22761:89::-;22802:13;22835:7;;;;;;;;;;;;;;;;;22828:14;;22761:89;:::o;24514:341::-;24609:4;24653:11;:25;24665:12;:10;:12::i;:::-;24653:25;;;;;;;;;;;;;;;:34;24679:7;24653:34;;;;;;;;;;;;;;;;24634:15;:53;;24626:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24740:85;24749:12;:10;:12::i;:::-;24763:7;24809:15;24772:11;:25;24784:12;:10;:12::i;:::-;24772:25;;;;;;;;;;;;;;;:34;24798:7;24772:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;24740:8;:85::i;:::-;24843:4;24836:11;;24514:341;;;;:::o;30276:77::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30341:4:::1;30330:8;;:15;;;;;;;;;;;;;;;;;;30276:77::o:0;23405:169::-;23485:4;23502:42;23512:12;:10;:12::i;:::-;23526:9;23537:6;23502:9;:42::i;:::-;23562:4;23555:11;;23405:169;;;;:::o;30489:173::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30592:8:::1;30568:21;;:32;;;;;;;;;;;;;;;;;;30616:38;30645:8;30616:38;;;;;;:::i;:::-;;;;;;;;30489:173:::0;:::o;21505:67::-;;;;:::o;25480:389::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25591:16:::1;25651:7;;:14;;25630:10;;:17;;:35;25622:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25704:158;25722:10;;:17;;25711:8;:28;25704:158;;;25756:66;25772:10;;25783:8;25772:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25814:7;25794;;25802:8;25794:17;;;;;;;:::i;:::-;;;;;;;;:27;;;;:::i;:::-;25756:15;:66::i;:::-;25849:1;25837:13;;;;;:::i;:::-;;;25704:158;;;25580:289;25480:389:::0;;;;:::o;23582:145::-;23665:7;23692:11;:18;23704:5;23692:18;;;;;;;;;;;;;;;:27;23711:7;23692:27;;;;;;;;;;;;;;;;23685:34;;23582:145;;;;:::o;28728:112::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28827:5:::1;28797:18;:27;28816:7;28797:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28728:112:::0;:::o;11423:244::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11532:1:::1;11512:22;;:8;:22;;::::0;11504:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11622:8;11593:38;;11614:6;::::0;::::1;;;;;;;;11593:38;;;;;;;;;;;;11651:8;11642:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;11423:244:::0;:::o;2766:98::-;2819:7;2846:10;2839:17;;2766:98;:::o;33914:337::-;34024:1;34007:19;;:5;:19;;;33999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34105:1;34086:21;;:7;:21;;;34078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34189:6;34159:11;:18;34171:5;34159:18;;;;;;;;;;;;;;;:27;34178:7;34159:27;;;;;;;;;;;;;;;:36;;;;34227:7;34211:32;;34220:5;34211:32;;;34236:6;34211:32;;;;;;:::i;:::-;;;;;;;;33914:337;;;:::o;34259:1674::-;34363:1;34347:18;;:4;:18;;;34339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34440:1;34426:16;;:2;:16;;;34418:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34510:1;34501:6;:10;34493:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34580:7;:5;:7::i;:::-;34572:15;;:4;:15;;;;:32;;;;;34597:7;:5;:7::i;:::-;34591:13;;:2;:13;;;;34572:32;34568:126;;;34637:12;;34627:6;:22;;34619:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34568:126;34989:28;35020:24;35038:4;35020:9;:24::i;:::-;34989:55;;35085:12;;35061:20;:36;35057:104;;35137:12;;35114:35;;35057:104;35173:24;35224:29;;35200:20;:53;;35173:80;;35268:19;:40;;;;;35292:16;;;;;;;;;;;35291:17;35268:40;:65;;;;;35320:13;35312:21;;:4;:21;;;;35268:65;:90;;;;;35337:21;;;;;;;;;;;35268:90;35264:255;;;35398:29;;35375:52;;35471:36;35486:20;35471:14;:36::i;:::-;35264:255;35592:12;35607:4;35592:19;;35712:18;:24;35731:4;35712:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35740:18;:22;35759:2;35740:22;;;;;;;;;;;;;;;;;;;;;;;;;35712:50;35708:98;;;35789:5;35779:15;;35708:98;35884:41;35899:4;35905:2;35909:6;35917:7;35884:14;:41::i;:::-;34328:1605;;;34259:1674;;;:::o;32115:161::-;32157:7;32178:15;32195;32214:19;:17;:19::i;:::-;32177:56;;;;32261:7;32251;:17;;;;:::i;:::-;32244:24;;;;32115:161;:::o;30891:419::-;30950:7;30959;30968;30977;30986;30995;31016:23;31041:12;31055:18;31077:20;31089:7;31077:11;:20::i;:::-;31015:82;;;;;;31109:15;31126:23;31151:12;31167:50;31179:7;31188:4;31194:10;31206;:8;:10::i;:::-;31167:11;:50::i;:::-;31108:109;;;;;;31236:7;31245:15;31262:4;31268:15;31285:4;31291:10;31228:74;;;;;;;;;;;;;;;;;;30891:419;;;;;;;:::o;33404:235::-;33462:1;33451:7;;:12;:34;;;;;33484:1;33467:13;;:18;33451:34;33487:7;33447:47;33524:7;;33506:15;:25;;;;33566:13;;33542:21;:37;;;;33602:1;33592:7;:11;;;;33630:1;33614:13;:17;;;;33404:235;:::o;33647:125::-;33701:15;;33691:7;:25;;;;33743:21;;33727:13;:37;;;;33647:125::o;25291:181::-;25371:14;:12;:14::i;:::-;25396:42;25406:12;:10;:12::i;:::-;25420:9;25431:6;25396:9;:42::i;:::-;25449:15;:13;:15::i;:::-;25291:181;;:::o;35941:1169::-;21858:4;21839:16;;:23;;;;;;;;;;;;;;;;;;36119:20:::1;36171:1;36166;36143:20;:24;;;;:::i;:::-;36142:30;;;;:::i;:::-;36119:53;;36183:17;36226:1;36203:20;:24;;;;:::i;:::-;36183:44;;36238:16;36295:9;36280:12;36257:20;:35;;;;:::i;:::-;:47;;;;:::i;:::-;36238:66;;36344:59;36370:4;20690:42;36393:9;36344:17;:59::i;:::-;36450:30;36467:12;36450:16;:30::i;:::-;36541:18;36562:21;36541:42;;36594:22;36638:1;36633;36620:10;:14;;;;:::i;:::-;36619:20;;;;:::i;:::-;36594:45;;36658:15;;;;;;;;;;;36650:33;;:49;36684:14;36650:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36710:26;36752:14;36739:10;:27;;;;:::i;:::-;36710:56;;36777:18;36825:1;36820;36799:18;:22;;;;:::i;:::-;36798:28;;;;:::i;:::-;36777:49;;36845:9;;;;;;;;;;;36837:27;;:39;36865:10;36837:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36887:23;36934:10;36913:18;:31;;;;:::i;:::-;36887:57;;36994:39;37007:8;37017:15;36994:12;:39::i;:::-;37051:51;37066:8;37076:15;37093:8;37051:51;;;;;;;;:::i;:::-;;;;;;;;36015:1095;;;;;;;;21904:5:::0;21885:16;;:24;;;;;;;;;;;;;;;;;;35941:1169;:::o;38309:1092::-;38422:8;;;;;;;;;;;38417:145;;38465:7;:5;:7::i;:::-;38455:17;;:6;:17;;;:46;;;;38486:15;;;;;;;;;;;38476:25;;:6;:25;;;38455:46;38447:55;;;;;;38417:145;38578:10;:18;38589:6;38578:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;38600:10;:21;38611:9;38600:21;;;;;;;;;;;;;;;;;;;;;;;;;38578:43;38574:128;;;20483:5;38638:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38574:128;38719:7;38714:28;;38728:14;:12;:14::i;:::-;38714:28;38759:11;:19;38771:6;38759:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;38783:11;:22;38795:9;38783:22;;;;;;;;;;;;;;;;;;;;;;;;;38782:23;38759:46;38755:597;;;38822:48;38844:6;38852:9;38863:6;38822:21;:48::i;:::-;38755:597;;;38893:11;:19;38905:6;38893:19;;;;;;;;;;;;;;;;;;;;;;;;;38892:20;:46;;;;;38916:11;:22;38928:9;38916:22;;;;;;;;;;;;;;;;;;;;;;;;;38892:46;38888:464;;;38955:46;38975:6;38983:9;38994:6;38955:19;:46::i;:::-;38888:464;;;39024:11;:19;39036:6;39024:19;;;;;;;;;;;;;;;;;;;;;;;;;39023:20;:47;;;;;39048:11;:22;39060:9;39048:22;;;;;;;;;;;;;;;;;;;;;;;;;39047:23;39023:47;39019:333;;;39087:44;39105:6;39113:9;39124:6;39087:17;:44::i;:::-;39019:333;;;39153:11;:19;39165:6;39153:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;39176:11;:22;39188:9;39176:22;;;;;;;;;;;;;;;;;;;;;;;;;39153:45;39149:203;;;39215:48;39237:6;39245:9;39256:6;39215:21;:48::i;:::-;39149:203;;;39296:44;39314:6;39322:9;39333:6;39296:17;:44::i;:::-;39149:203;39019:333;38888:464;38755:597;39369:7;39364:29;;39378:15;:13;:15::i;:::-;39364:29;38309:1092;;;;:::o;32284:531::-;32335:7;32344;32364:15;32382:7;;32364:25;;32400:15;20618:24;32400:25;;32441:9;32436:265;32460:9;:16;;;;32456:1;:20;32436:265;;;32526:7;32502;:21;32510:9;32520:1;32510:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32502:21;;;;;;;;;;;;;;;;:31;:66;;;;32561:7;32537;:21;32545:9;32555:1;32545:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32537:21;;;;;;;;;;;;;;;;:31;32502:66;32498:97;;;32578:7;;20618:24;32570:25;;;;;;;;;32498:97;32621:7;:21;32629:9;32639:1;32629:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32621:21;;;;;;;;;;;;;;;;32610:32;;;;;:::i;:::-;;;32668:7;:21;32676:9;32686:1;32676:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32668:21;;;;;;;;;;;;;;;;32657:32;;;;;:::i;:::-;;;32478:3;;;;;:::i;:::-;;;;32436:265;;;;20618:24;32726:7;;:17;;;;:::i;:::-;32715:7;:29;32711:60;;;32754:7;;20618:24;32746:25;;;;;;;;32711:60;32790:7;32799;32782:25;;;;;;32284:531;;;:::o;31318:324::-;31378:7;31387;31396;31416:12;31431:24;31447:7;31431:15;:24::i;:::-;31416:39;;31466:18;31487:30;31509:7;31487:21;:30::i;:::-;31466:51;;31528:23;31571:10;31564:4;31554:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;31528:53;;31600:15;31617:4;31623:10;31592:42;;;;;;;;;31318:324;;;;;:::o;31650:457::-;31808:7;31817;31826;31846:15;31874:11;31864:7;:21;;;;:::i;:::-;31846:39;;31896:12;31918:11;31911:4;:18;;;;:::i;:::-;31896:33;;31940:18;31974:11;31961:10;:24;;;;:::i;:::-;31940:45;;31996:23;32039:10;32032:4;32022:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;31996:53;;32068:7;32077:15;32094:4;32060:39;;;;;;;;;;31650:457;;;;;;;;:::o;39409:548::-;39522:15;39552:23;39590:12;39617:23;39655:12;39682:18;39714:19;39725:7;39714:10;:19::i;:::-;39507:226;;;;;;;;;;;;39763:7;39744;:15;39752:6;39744:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39803:15;39781:7;:18;39789:9;39781:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;39829:26;39844:10;39829:14;:26::i;:::-;39866:23;39878:4;39884;39866:11;:23::i;:::-;39922:9;39905:44;;39914:6;39905:44;;;39933:15;39905:44;;;;;;:::i;:::-;;;;;;;;39496:461;;;;;;39409:548;;;:::o;37118:589::-;37244:21;37282:1;37268:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37244:40;;37313:4;37295;37300:1;37295:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37339:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37329:4;37334:1;37329:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37374:62;37391:4;37406:15;37424:11;37374:8;:62::i;:::-;37475:15;:66;;;37556:11;37582:1;37626:4;37653;37673:15;37475:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37173:534;37118:589;:::o;37715:513::-;37863:62;37880:4;37895:15;37913:11;37863:8;:62::i;:::-;37968:15;:31;;;38007:9;38040:4;38060:11;38086:1;38129;38172:7;:5;:7::i;:::-;38194:15;37968:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37715:513;;:::o;40571:589::-;40688:15;40718:23;40756:12;40783:23;40821:12;40848:18;40880:19;40891:7;40880:10;:19::i;:::-;40673:226;;;;;;;;;;;;40929:7;40910;:15;40918:6;40910:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;40966:7;40947;:15;40955:6;40947:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;41006:15;40984:7;:18;40992:9;40984:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;41032:26;41047:10;41032:14;:26::i;:::-;41069:23;41081:4;41087;41069:11;:23::i;:::-;41125:9;41108:44;;41117:6;41108:44;;;41136:15;41108:44;;;;;;:::i;:::-;;;;;;;;40662:498;;;;;;40571:589;;;:::o;39965:598::-;40080:15;40110:23;40148:12;40175:23;40213:12;40240:18;40272:19;40283:7;40272:10;:19::i;:::-;40065:226;;;;;;;;;;;;40321:7;40302;:15;40310:6;40302:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;40361:15;40339:7;:18;40347:9;40339:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;40409:15;40387:7;:18;40395:9;40387:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;40435:26;40450:10;40435:14;:26::i;:::-;40472:23;40484:4;40490;40472:11;:23::i;:::-;40528:9;40511:44;;40520:6;40511:44;;;40539:15;40511:44;;;;;;:::i;:::-;;;;;;;;40054:509;;;;;;39965:598;;;:::o;27962:637::-;28079:15;28109:23;28147:12;28174:23;28212:12;28239:18;28271:19;28282:7;28271:10;:19::i;:::-;28064:226;;;;;;;;;;;;28320:7;28301;:15;28309:6;28301:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;28357:7;28338;:15;28346:6;28338:15;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;28397:15;28375:7;:18;28383:9;28375:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;28445:15;28423:7;:18;28431:9;28423:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;28471:26;28486:10;28471:14;:26::i;:::-;28508:23;28520:4;28526;28508:11;:23::i;:::-;28564:9;28547:44;;28556:6;28547:44;;;28575:15;28547:44;;;;;;:::i;:::-;;;;;;;;28053:546;;;;;;27962:637;;;:::o;33116:130::-;33180:7;33230;33218;;33208;:17;;;;:::i;:::-;33207:31;;;;:::i;:::-;33200:38;;33116:130;;;:::o;33254:142::-;33324:7;33380;33362:13;;33352:7;:23;;;;:::i;:::-;33351:37;;;;:::i;:::-;33344:44;;33254:142;;;:::o;32823:285::-;32886:19;32908:10;:8;:10::i;:::-;32886:32;;32929:18;32963:11;32950:10;:24;;;;:::i;:::-;32929:45;;33011:10;32985:7;:22;33001:4;32985:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;33036:11;:26;33056:4;33036:26;;;;;;;;;;;;;;;;;;;;;;;;;33032:68;;;33090:10;33064:7;:22;33080:4;33064:22;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;33032:68;32875:233;;32823:285;:::o;30763:120::-;30842:4;30831:7;;:15;;;;;;;:::i;:::-;;;;;;;;30871:4;30857:10;;:18;;;;;;;:::i;:::-;;;;;;;;30763:120;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:329::-;5795:6;5844:2;5832:9;5823:7;5819:23;5815:32;5812:119;;;5850:79;;:::i;:::-;5812:119;5970:1;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5941:117;5736:329;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:109::-;6551:7;6580:24;6598:5;6580:24;:::i;:::-;6569:35;;6501:109;;;:::o;6616:148::-;6702:37;6733:5;6702:37;:::i;:::-;6695:5;6692:48;6682:76;;6754:1;6751;6744:12;6682:76;6616:148;:::o;6770:165::-;6829:5;6867:6;6854:20;6845:29;;6883:46;6923:5;6883:46;:::i;:::-;6770:165;;;;:::o;6941:500::-;7022:6;7030;7079:2;7067:9;7058:7;7054:23;7050:32;7047:119;;;7085:79;;:::i;:::-;7047:119;7205:1;7230:66;7288:7;7279:6;7268:9;7264:22;7230:66;:::i;:::-;7220:76;;7176:130;7345:2;7371:53;7416:7;7407:6;7396:9;7392:22;7371:53;:::i;:::-;7361:63;;7316:118;6941:500;;;;;:::o;7447:116::-;7517:21;7532:5;7517:21;:::i;:::-;7510:5;7507:32;7497:60;;7553:1;7550;7543:12;7497:60;7447:116;:::o;7569:133::-;7612:5;7650:6;7637:20;7628:29;;7666:30;7690:5;7666:30;:::i;:::-;7569:133;;;;:::o;7708:468::-;7773:6;7781;7830:2;7818:9;7809:7;7805:23;7801:32;7798:119;;;7836:79;;:::i;:::-;7798:119;7956:1;7981:53;8026:7;8017:6;8006:9;8002:22;7981:53;:::i;:::-;7971:63;;7927:117;8083:2;8109:50;8151:7;8142:6;8131:9;8127:22;8109:50;:::i;:::-;8099:60;;8054:115;7708:468;;;;;:::o;8182:118::-;8269:24;8287:5;8269:24;:::i;:::-;8264:3;8257:37;8182:118;;:::o;8306:222::-;8399:4;8437:2;8426:9;8422:18;8414:26;;8450:71;8518:1;8507:9;8503:17;8494:6;8450:71;:::i;:::-;8306:222;;;;:::o;8534:104::-;8579:7;8608:24;8626:5;8608:24;:::i;:::-;8597:35;;8534:104;;;:::o;8644:138::-;8725:32;8751:5;8725:32;:::i;:::-;8718:5;8715:43;8705:71;;8772:1;8769;8762:12;8705:71;8644:138;:::o;8788:155::-;8842:5;8880:6;8867:20;8858:29;;8896:41;8931:5;8896:41;:::i;:::-;8788:155;;;;:::o;8949:345::-;9016:6;9065:2;9053:9;9044:7;9040:23;9036:32;9033:119;;;9071:79;;:::i;:::-;9033:119;9191:1;9216:61;9269:7;9260:6;9249:9;9245:22;9216:61;:::i;:::-;9206:71;;9162:125;8949:345;;;;:::o;9300:323::-;9356:6;9405:2;9393:9;9384:7;9380:23;9376:32;9373:119;;;9411:79;;:::i;:::-;9373:119;9531:1;9556:50;9598:7;9589:6;9578:9;9574:22;9556:50;:::i;:::-;9546:60;;9502:114;9300:323;;;;:::o;9629:117::-;9738:1;9735;9728:12;9752:117;9861:1;9858;9851:12;9875:117;9984:1;9981;9974:12;10015:568;10088:8;10098:6;10148:3;10141:4;10133:6;10129:17;10125:27;10115:122;;10156:79;;:::i;:::-;10115:122;10269:6;10256:20;10246:30;;10299:18;10291:6;10288:30;10285:117;;;10321:79;;:::i;:::-;10285:117;10435:4;10427:6;10423:17;10411:29;;10489:3;10481:4;10473:6;10469:17;10459:8;10455:32;10452:41;10449:128;;;10496:79;;:::i;:::-;10449:128;10015:568;;;;;:::o;10606:::-;10679:8;10689:6;10739:3;10732:4;10724:6;10720:17;10716:27;10706:122;;10747:79;;:::i;:::-;10706:122;10860:6;10847:20;10837:30;;10890:18;10882:6;10879:30;10876:117;;;10912:79;;:::i;:::-;10876:117;11026:4;11018:6;11014:17;11002:29;;11080:3;11072:4;11064:6;11060:17;11050:8;11046:32;11043:41;11040:128;;;11087:79;;:::i;:::-;11040:128;10606:568;;;;;:::o;11180:934::-;11302:6;11310;11318;11326;11375:2;11363:9;11354:7;11350:23;11346:32;11343:119;;;11381:79;;:::i;:::-;11343:119;11529:1;11518:9;11514:17;11501:31;11559:18;11551:6;11548:30;11545:117;;;11581:79;;:::i;:::-;11545:117;11694:80;11766:7;11757:6;11746:9;11742:22;11694:80;:::i;:::-;11676:98;;;;11472:312;11851:2;11840:9;11836:18;11823:32;11882:18;11874:6;11871:30;11868:117;;;11904:79;;:::i;:::-;11868:117;12017:80;12089:7;12080:6;12069:9;12065:22;12017:80;:::i;:::-;11999:98;;;;11794:313;11180:934;;;;;;;:::o;12120:474::-;12188:6;12196;12245:2;12233:9;12224:7;12220:23;12216:32;12213:119;;;12251:79;;:::i;:::-;12213:119;12371:1;12396:53;12441:7;12432:6;12421:9;12417:22;12396:53;:::i;:::-;12386:63;;12342:117;12498:2;12524:53;12569:7;12560:6;12549:9;12545:22;12524:53;:::i;:::-;12514:63;;12469:118;12120:474;;;;;:::o;12600:182::-;12740:34;12736:1;12728:6;12724:14;12717:58;12600:182;:::o;12788:366::-;12930:3;12951:67;13015:2;13010:3;12951:67;:::i;:::-;12944:74;;13027:93;13116:3;13027:93;:::i;:::-;13145:2;13140:3;13136:12;13129:19;;12788:366;;;:::o;13160:419::-;13326:4;13364:2;13353:9;13349:18;13341:26;;13413:9;13407:4;13403:20;13399:1;13388:9;13384:17;13377:47;13441:131;13567:4;13441:131;:::i;:::-;13433:139;;13160:419;;;:::o;13585:180::-;13633:77;13630:1;13623:88;13730:4;13727:1;13720:15;13754:4;13751:1;13744:15;13771:194;13811:4;13831:20;13849:1;13831:20;:::i;:::-;13826:25;;13865:20;13883:1;13865:20;:::i;:::-;13860:25;;13909:1;13906;13902:9;13894:17;;13933:1;13927:4;13924:11;13921:37;;;13938:18;;:::i;:::-;13921:37;13771:194;;;;:::o;13971:227::-;14111:34;14107:1;14099:6;14095:14;14088:58;14180:10;14175:2;14167:6;14163:15;14156:35;13971:227;:::o;14204:366::-;14346:3;14367:67;14431:2;14426:3;14367:67;:::i;:::-;14360:74;;14443:93;14532:3;14443:93;:::i;:::-;14561:2;14556:3;14552:12;14545:19;;14204:366;;;:::o;14576:419::-;14742:4;14780:2;14769:9;14765:18;14757:26;;14829:9;14823:4;14819:20;14815:1;14804:9;14800:17;14793:47;14857:131;14983:4;14857:131;:::i;:::-;14849:139;;14576:419;;;:::o;15001:239::-;15141:34;15137:1;15129:6;15125:14;15118:58;15210:22;15205:2;15197:6;15193:15;15186:47;15001:239;:::o;15246:366::-;15388:3;15409:67;15473:2;15468:3;15409:67;:::i;:::-;15402:74;;15485:93;15574:3;15485:93;:::i;:::-;15603:2;15598:3;15594:12;15587:19;;15246:366;;;:::o;15618:419::-;15784:4;15822:2;15811:9;15807:18;15799:26;;15871:9;15865:4;15861:20;15857:1;15846:9;15842:17;15835:47;15899:131;16025:4;15899:131;:::i;:::-;15891:139;;15618:419;;;:::o;16043:410::-;16083:7;16106:20;16124:1;16106:20;:::i;:::-;16101:25;;16140:20;16158:1;16140:20;:::i;:::-;16135:25;;16195:1;16192;16188:9;16217:30;16235:11;16217:30;:::i;:::-;16206:41;;16396:1;16387:7;16383:15;16380:1;16377:22;16357:1;16350:9;16330:83;16307:139;;16426:18;;:::i;:::-;16307:139;16091:362;16043:410;;;;:::o;16459:229::-;16599:34;16595:1;16587:6;16583:14;16576:58;16668:12;16663:2;16655:6;16651:15;16644:37;16459:229;:::o;16694:366::-;16836:3;16857:67;16921:2;16916:3;16857:67;:::i;:::-;16850:74;;16933:93;17022:3;16933:93;:::i;:::-;17051:2;17046:3;17042:12;17035:19;;16694:366;;;:::o;17066:419::-;17232:4;17270:2;17259:9;17255:18;17247:26;;17319:9;17313:4;17309:20;17305:1;17294:9;17290:17;17283:47;17347:131;17473:4;17347:131;:::i;:::-;17339:139;;17066:419;;;:::o;17491:180::-;17539:77;17536:1;17529:88;17636:4;17633:1;17626:15;17660:4;17657:1;17650:15;17677:185;17717:1;17734:20;17752:1;17734:20;:::i;:::-;17729:25;;17768:20;17786:1;17768:20;:::i;:::-;17763:25;;17807:1;17797:35;;17812:18;;:::i;:::-;17797:35;17854:1;17851;17847:9;17842:14;;17677:185;;;;:::o;17868:177::-;18008:29;18004:1;17996:6;17992:14;17985:53;17868:177;:::o;18051:366::-;18193:3;18214:67;18278:2;18273:3;18214:67;:::i;:::-;18207:74;;18290:93;18379:3;18290:93;:::i;:::-;18408:2;18403:3;18399:12;18392:19;;18051:366;;;:::o;18423:419::-;18589:4;18627:2;18616:9;18612:18;18604:26;;18676:9;18670:4;18666:20;18662:1;18651:9;18647:17;18640:47;18704:131;18830:4;18704:131;:::i;:::-;18696:139;;18423:419;;;:::o;18848:180::-;18896:77;18893:1;18886:88;18993:4;18990:1;18983:15;19017:4;19014:1;19007:15;19034:180;19082:77;19079:1;19072:88;19179:4;19176:1;19169:15;19203:4;19200:1;19193:15;19220:233;19259:3;19282:24;19300:5;19282:24;:::i;:::-;19273:33;;19328:66;19321:5;19318:77;19315:103;;19398:18;;:::i;:::-;19315:103;19445:1;19438:5;19434:13;19427:20;;19220:233;;;:::o;19459:191::-;19499:3;19518:20;19536:1;19518:20;:::i;:::-;19513:25;;19552:20;19570:1;19552:20;:::i;:::-;19547:25;;19595:1;19592;19588:9;19581:16;;19616:3;19613:1;19610:10;19607:36;;;19623:18;;:::i;:::-;19607:36;19459:191;;;;:::o;19656:143::-;19713:5;19744:6;19738:13;19729:22;;19760:33;19787:5;19760:33;:::i;:::-;19656:143;;;;:::o;19805:351::-;19875:6;19924:2;19912:9;19903:7;19899:23;19895:32;19892:119;;;19930:79;;:::i;:::-;19892:119;20050:1;20075:64;20131:7;20122:6;20111:9;20107:22;20075:64;:::i;:::-;20065:74;;20021:128;19805:351;;;;:::o;20162:332::-;20283:4;20321:2;20310:9;20306:18;20298:26;;20334:71;20402:1;20391:9;20387:17;20378:6;20334:71;:::i;:::-;20415:72;20483:2;20472:9;20468:18;20459:6;20415:72;:::i;:::-;20162:332;;;;;:::o;20500:137::-;20554:5;20585:6;20579:13;20570:22;;20601:30;20625:5;20601:30;:::i;:::-;20500:137;;;;:::o;20643:345::-;20710:6;20759:2;20747:9;20738:7;20734:23;20730:32;20727:119;;;20765:79;;:::i;:::-;20727:119;20885:1;20910:61;20963:7;20954:6;20943:9;20939:22;20910:61;:::i;:::-;20900:71;;20856:125;20643:345;;;;:::o;20994:231::-;21134:34;21130:1;21122:6;21118:14;21111:58;21203:14;21198:2;21190:6;21186:15;21179:39;20994:231;:::o;21231:366::-;21373:3;21394:67;21458:2;21453:3;21394:67;:::i;:::-;21387:74;;21470:93;21559:3;21470:93;:::i;:::-;21588:2;21583:3;21579:12;21572:19;;21231:366;;;:::o;21603:419::-;21769:4;21807:2;21796:9;21792:18;21784:26;;21856:9;21850:4;21846:20;21842:1;21831:9;21827:17;21820:47;21884:131;22010:4;21884:131;:::i;:::-;21876:139;;21603:419;;;:::o;22028:181::-;22168:33;22164:1;22156:6;22152:14;22145:57;22028:181;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:222::-;23152:34;23148:1;23140:6;23136:14;23129:58;23221:5;23216:2;23208:6;23204:15;23197:30;23012:222;:::o;23240:366::-;23382:3;23403:67;23467:2;23462:3;23403:67;:::i;:::-;23396:74;;23479:93;23568:3;23479:93;:::i;:::-;23597:2;23592:3;23588:12;23581:19;;23240:366;;;:::o;23612:419::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23865:9;23859:4;23855:20;23851:1;23840:9;23836:17;23829:47;23893:131;24019:4;23893:131;:::i;:::-;23885:139;;23612:419;;;:::o;24037:224::-;24177:34;24173:1;24165:6;24161:14;24154:58;24246:7;24241:2;24233:6;24229:15;24222:32;24037:224;:::o;24267:366::-;24409:3;24430:67;24494:2;24489:3;24430:67;:::i;:::-;24423:74;;24506:93;24595:3;24506:93;:::i;:::-;24624:2;24619:3;24615:12;24608:19;;24267:366;;;:::o;24639:419::-;24805:4;24843:2;24832:9;24828:18;24820:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24920:131;25046:4;24920:131;:::i;:::-;24912:139;;24639:419;;;:::o;25064:173::-;25204:25;25200:1;25192:6;25188:14;25181:49;25064:173;:::o;25243:366::-;25385:3;25406:67;25470:2;25465:3;25406:67;:::i;:::-;25399:74;;25482:93;25571:3;25482:93;:::i;:::-;25600:2;25595:3;25591:12;25584:19;;25243:366;;;:::o;25615:419::-;25781:4;25819:2;25808:9;25804:18;25796:26;;25868:9;25862:4;25858:20;25854:1;25843:9;25839:17;25832:47;25896:131;26022:4;25896:131;:::i;:::-;25888:139;;25615:419;;;:::o;26040:225::-;26180:34;26176:1;26168:6;26164:14;26157:58;26249:8;26244:2;26236:6;26232:15;26225:33;26040:225;:::o;26271:366::-;26413:3;26434:67;26498:2;26493:3;26434:67;:::i;:::-;26427:74;;26510:93;26599:3;26510:93;:::i;:::-;26628:2;26623:3;26619:12;26612:19;;26271:366;;;:::o;26643:419::-;26809:4;26847:2;26836:9;26832:18;26824:26;;26896:9;26890:4;26886:20;26882:1;26871:9;26867:17;26860:47;26924:131;27050:4;26924:131;:::i;:::-;26916:139;;26643:419;;;:::o;27068:223::-;27208:34;27204:1;27196:6;27192:14;27185:58;27277:6;27272:2;27264:6;27260:15;27253:31;27068:223;:::o;27297:366::-;27439:3;27460:67;27524:2;27519:3;27460:67;:::i;:::-;27453:74;;27536:93;27625:3;27536:93;:::i;:::-;27654:2;27649:3;27645:12;27638:19;;27297:366;;;:::o;27669:419::-;27835:4;27873:2;27862:9;27858:18;27850:26;;27922:9;27916:4;27912:20;27908:1;27897:9;27893:17;27886:47;27950:131;28076:4;27950:131;:::i;:::-;27942:139;;27669:419;;;:::o;28094:221::-;28234:34;28230:1;28222:6;28218:14;28211:58;28303:4;28298:2;28290:6;28286:15;28279:29;28094:221;:::o;28321:366::-;28463:3;28484:67;28548:2;28543:3;28484:67;:::i;:::-;28477:74;;28560:93;28649:3;28560:93;:::i;:::-;28678:2;28673:3;28669:12;28662:19;;28321:366;;;:::o;28693:419::-;28859:4;28897:2;28886:9;28882:18;28874:26;;28946:9;28940:4;28936:20;28932:1;28921:9;28917:17;28910:47;28974:131;29100:4;28974:131;:::i;:::-;28966:139;;28693:419;;;:::o;29118:224::-;29258:34;29254:1;29246:6;29242:14;29235:58;29327:7;29322:2;29314:6;29310:15;29303:32;29118:224;:::o;29348:366::-;29490:3;29511:67;29575:2;29570:3;29511:67;:::i;:::-;29504:74;;29587:93;29676:3;29587:93;:::i;:::-;29705:2;29700:3;29696:12;29689:19;;29348:366;;;:::o;29720:419::-;29886:4;29924:2;29913:9;29909:18;29901:26;;29973:9;29967:4;29963:20;29959:1;29948:9;29944:17;29937:47;30001:131;30127:4;30001:131;:::i;:::-;29993:139;;29720:419;;;:::o;30145:222::-;30285:34;30281:1;30273:6;30269:14;30262:58;30354:5;30349:2;30341:6;30337:15;30330:30;30145:222;:::o;30373:366::-;30515:3;30536:67;30600:2;30595:3;30536:67;:::i;:::-;30529:74;;30612:93;30701:3;30612:93;:::i;:::-;30730:2;30725:3;30721:12;30714:19;;30373:366;;;:::o;30745:419::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:228::-;31310:34;31306:1;31298:6;31294:14;31287:58;31379:11;31374:2;31366:6;31362:15;31355:36;31170:228;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:227::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:10;32405:2;32397:6;32393:15;32386:35;32201:227;:::o;32434:366::-;32576:3;32597:67;32661:2;32656:3;32597:67;:::i;:::-;32590:74;;32673:93;32762:3;32673:93;:::i;:::-;32791:2;32786:3;32782:12;32775:19;;32434:366;;;:::o;32806:419::-;32972:4;33010:2;32999:9;32995:18;32987:26;;33059:9;33053:4;33049:20;33045:1;33034:9;33030:17;33023:47;33087:131;33213:4;33087:131;:::i;:::-;33079:139;;32806:419;;;:::o;33231:442::-;33380:4;33418:2;33407:9;33403:18;33395:26;;33431:71;33499:1;33488:9;33484:17;33475:6;33431:71;:::i;:::-;33512:72;33580:2;33569:9;33565:18;33556:6;33512:72;:::i;:::-;33594;33662:2;33651:9;33647:18;33638:6;33594:72;:::i;:::-;33231:442;;;;;;:::o;33679:177::-;33819:29;33815:1;33807:6;33803:14;33796:53;33679:177;:::o;33862:366::-;34004:3;34025:67;34089:2;34084:3;34025:67;:::i;:::-;34018:74;;34101:93;34190:3;34101:93;:::i;:::-;34219:2;34214:3;34210:12;34203:19;;33862:366;;;:::o;34234:419::-;34400:4;34438:2;34427:9;34423:18;34415:26;;34487:9;34481:4;34477:20;34473:1;34462:9;34458:17;34451:47;34515:131;34641:4;34515:131;:::i;:::-;34507:139;;34234:419;;;:::o;34659:180::-;34707:77;34704:1;34697:88;34804:4;34801:1;34794:15;34828:4;34825:1;34818:15;34845:143;34902:5;34933:6;34927:13;34918:22;;34949:33;34976:5;34949:33;:::i;:::-;34845:143;;;;:::o;34994:351::-;35064:6;35113:2;35101:9;35092:7;35088:23;35084:32;35081:119;;;35119:79;;:::i;:::-;35081:119;35239:1;35264:64;35320:7;35311:6;35300:9;35296:22;35264:64;:::i;:::-;35254:74;;35210:128;34994:351;;;;:::o;35351:85::-;35396:7;35425:5;35414:16;;35351:85;;;:::o;35442:158::-;35500:9;35533:61;35551:42;35560:32;35586:5;35560:32;:::i;:::-;35551:42;:::i;:::-;35533:61;:::i;:::-;35520:74;;35442:158;;;:::o;35606:147::-;35701:45;35740:5;35701:45;:::i;:::-;35696:3;35689:58;35606:147;;:::o;35759:114::-;35826:6;35860:5;35854:12;35844:22;;35759:114;;;:::o;35879:184::-;35978:11;36012:6;36007:3;36000:19;36052:4;36047:3;36043:14;36028:29;;35879:184;;;;:::o;36069:132::-;36136:4;36159:3;36151:11;;36189:4;36184:3;36180:14;36172:22;;36069:132;;;:::o;36207:108::-;36284:24;36302:5;36284:24;:::i;:::-;36279:3;36272:37;36207:108;;:::o;36321:179::-;36390:10;36411:46;36453:3;36445:6;36411:46;:::i;:::-;36489:4;36484:3;36480:14;36466:28;;36321:179;;;;:::o;36506:113::-;36576:4;36608;36603:3;36599:14;36591:22;;36506:113;;;:::o;36655:732::-;36774:3;36803:54;36851:5;36803:54;:::i;:::-;36873:86;36952:6;36947:3;36873:86;:::i;:::-;36866:93;;36983:56;37033:5;36983:56;:::i;:::-;37062:7;37093:1;37078:284;37103:6;37100:1;37097:13;37078:284;;;37179:6;37173:13;37206:63;37265:3;37250:13;37206:63;:::i;:::-;37199:70;;37292:60;37345:6;37292:60;:::i;:::-;37282:70;;37138:224;37125:1;37122;37118:9;37113:14;;37078:284;;;37082:14;37378:3;37371:10;;36779:608;;;36655:732;;;;:::o;37393:831::-;37656:4;37694:3;37683:9;37679:19;37671:27;;37708:71;37776:1;37765:9;37761:17;37752:6;37708:71;:::i;:::-;37789:80;37865:2;37854:9;37850:18;37841:6;37789:80;:::i;:::-;37916:9;37910:4;37906:20;37901:2;37890:9;37886:18;37879:48;37944:108;38047:4;38038:6;37944:108;:::i;:::-;37936:116;;38062:72;38130:2;38119:9;38115:18;38106:6;38062:72;:::i;:::-;38144:73;38212:3;38201:9;38197:19;38188:6;38144:73;:::i;:::-;37393:831;;;;;;;;:::o;38230:807::-;38479:4;38517:3;38506:9;38502:19;38494:27;;38531:71;38599:1;38588:9;38584:17;38575:6;38531:71;:::i;:::-;38612:72;38680:2;38669:9;38665:18;38656:6;38612:72;:::i;:::-;38694:80;38770:2;38759:9;38755:18;38746:6;38694:80;:::i;:::-;38784;38860:2;38849:9;38845:18;38836:6;38784:80;:::i;:::-;38874:73;38942:3;38931:9;38927:19;38918:6;38874:73;:::i;:::-;38957;39025:3;39014:9;39010:19;39001:6;38957:73;:::i;:::-;38230:807;;;;;;;;;:::o;39043:663::-;39131:6;39139;39147;39196:2;39184:9;39175:7;39171:23;39167:32;39164:119;;;39202:79;;:::i;:::-;39164:119;39322:1;39347:64;39403:7;39394:6;39383:9;39379:22;39347:64;:::i;:::-;39337:74;;39293:128;39460:2;39486:64;39542:7;39533:6;39522:9;39518:22;39486:64;:::i;:::-;39476:74;;39431:129;39599:2;39625:64;39681:7;39672:6;39661:9;39657:22;39625:64;:::i;:::-;39615:74;;39570:129;39043:663;;;;;:::o

Swarm Source

ipfs://c6ad6a5ecf834c4ef8b3693e21d385fe1de83578b6c115c080d9317e8d79913d
Loading