ETH Price: $2,304.82 (-4.78%)

Token

TheMuv (Muv)
 

Overview

Max Total Supply

22,000,000 Muv

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,135.50744882 Muv

Value
$0.00
0x19b641cd213ae6a120c7303cd96340f053afdd49
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TheMuv

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-06
*/

// SPDX-License-Identifier: MIT


pragma solidity 0.8.12;



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


}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }


    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }


    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }


    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }


    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }


    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }


    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


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

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


/**
 * @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(), "OnlyOwner");
        _;
    }

     /**
     * @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: address(0)");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }


    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
   
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "onlyOwner");
        require(block.timestamp > _lockTime , "Contract is locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}






pragma solidity >=0.5.5;

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

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

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

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

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


pragma solidity >=0.5.5;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}




pragma solidity >=0.6.8;

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

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

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





pragma solidity >=0.6.8;

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

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


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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    struct Sold{
        uint256 soldToday;
        uint256 originalBalance;
        uint256 timestampLast;
    }
    mapping(address => Sold) soldData;

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

    string private _name = "TheMuv";
    string private _symbol = "Muv";
    uint8 private _decimals = 9;
   
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
   
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 0;
    uint256 private _previousBurnFee = _burnFee;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
   
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    uint256 public  unlockTimestamp;
    uint256 public numTokensSellToAddToLiquidity = 2000000 * 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;
        unlockTimestamp = block.timestamp + 28 weeks;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // 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() public view returns (string memory) {
        return _name;
    }

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

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

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

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


    function transfer(address recipient, uint256 amount) public override returns (bool) {

        _transfer(_msgSender(), recipient, amount);
        return true;
    }


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


    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    mapping(address=>bool) isBlacklisted;
    bool blackListEnabled;
    function setBlackListStatus(bool blacklist) public onlyOwner {
        blackListEnabled = blacklist;
    }

    function blacklistUser(address user, bool blacklisted) public onlyOwner {
        isBlacklisted[user] = blacklisted;
    }

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


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


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


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

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


    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }


    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount > 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 > reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "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], "Not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }




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

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

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


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

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


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

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


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

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

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


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


    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee==0) return;
       
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
       
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
    }
   

    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _burnFee = _previousBurnFee;
    }
   
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
         if(blackListEnabled) {
         require(!isBlacklisted[from] && !isBlacklisted[to], "blacklisted");}
        require(from != address(0), "ERC20: address(0)");
         
        // 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));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
       
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
       
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

    function handleLimit(address sender, uint amount) internal {
        Sold storage s = soldData[sender];
        if(s.timestampLast <= block.timestamp - 1 days) {
            s.originalBalance = balanceOf(sender);
            s.soldToday = amount;
            s.timestampLast = block.timestamp;
        }
        else {
            s.soldToday += amount;
        }
        require(s.soldToday <= s.originalBalance / 10, "sell treshold reached");

    }
    function unlockNow() public onlyOwner {
        unlockTimestamp = block.timestamp;
    }
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private
    {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {  
           removeAllFee();
        }
        else  
        {
            if(recipient == uniswapV2Pair) {
                require(block.timestamp >= unlockTimestamp, "locked");
                handleLimit(sender, amount);
            }
        }

        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(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            restoreAllFee();
        }
    }



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



    function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256)
    {
        if(_burnFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tBurn = tAmount.div(100).mul(_burnFee);
        uint256 rBurn = tBurn.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rBurn);
        tTransferAmount = tTransferAmount.sub(tBurn);
        _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn);
        emit Transfer(sender, deadAddress, tBurn);
        return(tTransferAmount, rTransferAmount);
    }

   

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


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

    function afterPresale() external onlyOwner() {
       _taxFee = 5;
       _previousTaxFee = _taxFee;
       _liquidityFee = 2;
       _previousLiquidityFee = _liquidityFee;
       _burnFee = 1;
       _previousBurnFee = _burnFee;
       setSwapAndLiquifyEnabled(false);
    }


    function setFeeStatus(address account, bool fees) public onlyOwner {
        _isExcludedFromFee[account] = fees;
    }
    
    function setFees(uint256 taxFee, uint liquidityFee, uint burnFee) external onlyOwner() {
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
        _burnFee = burnFee;
    }
   
    function setNumTokensSellToAddToLiquidity(uint256 newAmt) external onlyOwner() {
        numTokensSellToAddToLiquidity = newAmt*10**_decimals;
    } 

    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        uniswapV2Router = _newPancakeRouter;
    }
   
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
}

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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPresale","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"blacklist","type":"bool"}],"name":"setBlackListStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"fees","type":"bool"}],"name":"setFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockNow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052664e28e2290f0000600a55600a54600019620000219190620006f8565b6000196200003091906200075f565b600b556040518060400160405280600681526020017f5468654d75760000000000000000000000000000000000000000000000000000815250600d9080519060200190620000809291906200060f565b506040518060400160405280600381526020017f4d75760000000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000ce9291906200060f565b506009600f60006101000a81548160ff021916908360ff16021790555060006010556010546011556000601255601254601355600060145560145460155561dead601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860156101000a81548160ff02191690831515021790555066071afd498d0000601a553480156200018257600080fd5b50600062000195620005de60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600360006200024a620005de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506301026600426200029a91906200079a565b6019819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b919062000861565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000861565b6040518363ffffffff1660e01b8152600401620003d8929190620008a4565b6020604051808303816000875af1158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e919062000861565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620004b5620005e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200056e620005de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005cf9190620008e2565b60405180910390a35062000964565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200061d906200092e565b90600052602060002090601f0160209004810192826200064157600085556200068d565b82601f106200065c57805160ff19168380011785556200068d565b828001600101855582156200068d579182015b828111156200068c5782518255916020019190600101906200066f565b5b5090506200069c9190620006a0565b5090565b5b80821115620006bb576000816000905550600101620006a1565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200070582620006bf565b91506200071283620006bf565b925082620007255762000724620006c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200076c82620006bf565b91506200077983620006bf565b9250828210156200078f576200078e62000730565b5b828203905092915050565b6000620007a782620006bf565b9150620007b483620006bf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007ec57620007eb62000730565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082982620007fc565b9050919050565b6200083b816200081c565b81146200084757600080fd5b50565b6000815190506200085b8162000830565b92915050565b6000602082840312156200087a5762000879620007f7565b5b60006200088a848285016200084a565b91505092915050565b6200089e816200081c565b82525050565b6000604082019050620008bb600083018562000893565b620008ca602083018462000893565b9392505050565b620008dc81620006bf565b82525050565b6000602082019050620008f96000830184620008d1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094757607f821691505b602082108114156200095e576200095d620008ff565b5b50919050565b615f5180620009746000396000f3fe6080604052600436106102605760003560e01c806370a0823111610144578063c0b0fda2116100b6578063dd4670641161007a578063dd4670641461090b578063dd62ed3e14610934578063ed77d40614610971578063f0f165af1461099a578063f2fde38b146109c3578063f9bc64db146109ec57610267565b8063c0b0fda21461083a578063c49b9a8014610865578063cbd2e8011461088e578063cec10c11146108b7578063d12a7688146108e057610267565b806395d89b411161010857806395d89b4114610728578063a457c2d714610753578063a69df4b514610790578063a9059cbb146107a7578063aa082a9d146107e4578063b6c523241461080f57610267565b806370a0823114610655578063715018a61461069257806388f82020146106a9578063899e8689146106e65780638da5cb5b146106fd57610267565b80633685d419116101dd5780634549b039116101a15780634549b0391461053157806349bd5a5e1461056e5780634a74bb021461059957806352390c02146105c45780635342acb4146105ed5780636bc87c3a1461062a57610267565b80633685d4191461044e57806339509351146104775780633b124fe7146104b45780633bd5d173146104df57806341cb87fc1461050857610267565b806323b872dd1161022457806323b872dd1461035557806327c8f835146103925780632d052432146103bd5780632d838119146103e6578063313ce5671461042357610267565b806306fdde031461026c578063095ea7b31461029757806313114a9d146102d45780631694505e146102ff57806318160ddd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a03565b60405161028e9190614c48565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614d03565b610a95565b6040516102cb9190614d5e565b60405180910390f35b3480156102e057600080fd5b506102e9610ab3565b6040516102f69190614d88565b60405180910390f35b34801561030b57600080fd5b50610314610abd565b6040516103219190614e02565b60405180910390f35b34801561033657600080fd5b5061033f610ae3565b60405161034c9190614d88565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614e1d565b610aed565b6040516103899190614d5e565b60405180910390f35b34801561039e57600080fd5b506103a7610be3565b6040516103b49190614e7f565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190614ec6565b610c09565b005b3480156103f257600080fd5b5061040d60048036038101906104089190614f06565b610cf9565b60405161041a9190614d88565b60405180910390f35b34801561042f57600080fd5b50610438610d67565b6040516104459190614f4f565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614f6a565b610d7e565b005b34801561048357600080fd5b5061049e60048036038101906104999190614d03565b6110cd565b6040516104ab9190614d5e565b60405180910390f35b3480156104c057600080fd5b506104c9611180565b6040516104d69190614d88565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614f06565b611186565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614f6a565b611301565b005b34801561053d57600080fd5b5061055860048036038101906105539190614f97565b61157a565b6040516105659190614d88565b60405180910390f35b34801561057a57600080fd5b506105836115fe565b6040516105909190614e7f565b60405180910390f35b3480156105a557600080fd5b506105ae611624565b6040516105bb9190614d5e565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614f6a565b611637565b005b3480156105f957600080fd5b50610614600480360381019061060f9190614f6a565b6118eb565b6040516106219190614d5e565b60405180910390f35b34801561063657600080fd5b5061063f611941565b60405161064c9190614d88565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614f6a565b611947565b6040516106899190614d88565b60405180910390f35b34801561069e57600080fd5b506106a7611a32565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614f6a565b611b85565b6040516106dd9190614d5e565b60405180910390f35b3480156106f257600080fd5b506106fb611bdb565b005b34801561070957600080fd5b50610712611caf565b60405161071f9190614e7f565b60405180910390f35b34801561073457600080fd5b5061073d611cd8565b60405161074a9190614c48565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614d03565b611d6a565b6040516107879190614d5e565b60405180910390f35b34801561079c57600080fd5b506107a5611e54565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190614d03565b612028565b6040516107db9190614d5e565b60405180910390f35b3480156107f057600080fd5b506107f9612046565b6040516108069190614d88565b60405180910390f35b34801561081b57600080fd5b5061082461204c565b6040516108319190614d88565b60405180910390f35b34801561084657600080fd5b5061084f612056565b60405161085c9190614d88565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190614fd7565b61205c565b005b34801561089a57600080fd5b506108b560048036038101906108b09190614fd7565b612145565b005b3480156108c357600080fd5b506108de60048036038101906108d99190615004565b6121f7565b005b3480156108ec57600080fd5b506108f56122a6565b6040516109029190614d88565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614f06565b6122ac565b005b34801561094057600080fd5b5061095b60048036038101906109569190615057565b612473565b6040516109689190614d88565b60405180910390f35b34801561097d57600080fd5b5061099860048036038101906109939190614ec6565b6124fa565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614f06565b6125ea565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190614f6a565b6126af565b005b3480156109f857600080fd5b50610a01612871565b005b6060600d8054610a12906150c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906150c6565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b5050505050905090565b6000610aa9610aa261290f565b8484612917565b6001905092915050565b6000600c54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610afa848484612ae2565b610bd884610b0661290f565b610bd3856040518060400160405280601081526020017f45524332303a20616c6c6f77616e636500000000000000000000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8961290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149092919063ffffffff16565b612917565b600190509392505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1161290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590615144565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600b54821115610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d37906151b0565b60405180910390fd5b6000610d4a612d78565b9050610d5f8184612da390919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610d8661290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90615144565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e969061521c565b60405180910390fd5b60005b6008805490508110156110c9578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610eda57610ed961523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110b65760086001600880549050610f35919061529a565b81548110610f4657610f4561523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f8557610f8461523c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061107c5761107b6152ce565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110c9565b80806110c1906152fd565b915050610ea2565b5050565b60006111766110da61290f565b8461117185600560006110eb61290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b612917565b6001905092915050565b60105481565b600061119061290f565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690615392565b60405180910390fd5b600061122a83612e4b565b5050505050905061128381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112db81600b54612ea790919063ffffffff16565b600b819055506112f683600c54612ded90919063ffffffff16565b600c81905550505050565b61130961290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90615144565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906153c7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149591906153c7565b6040518363ffffffff1660e01b81526004016114b29291906153f4565b6020604051808303816000875af11580156114d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f591906153c7565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600a548311156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890615469565b60405180910390fd5b816115e15760006115d184612e4b565b50505050509050809150506115f8565b60006115ec84612e4b565b50505050915050809150505b92915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b61163f61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390615144565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906154d5565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561182d576117e9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf9565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119e257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a2d565b611a2a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf9565b90505b919050565b611a3a61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90615144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611be361290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790615144565b60405180910390fd5b600560108190555060105460118190555060026012819055506012546013819055506001601481905550601454601581905550611cad600061205c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611ce7906150c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611d13906150c6565b8015611d605780601f10611d3557610100808354040283529160200191611d60565b820191906000526020600020905b815481529060010190602001808311611d4357829003601f168201915b5050505050905090565b6000611e4a611d7761290f565b84611e45856040518060400160405280601481526020017f45524332303a20616c6c6f77616e6365203c203000000000000000000000000081525060056000611dbe61290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149092919063ffffffff16565b612917565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90615541565b60405180910390fd5b6002544211611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f906155ad565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061203c61203561290f565b8484612ae2565b6001905092915050565b60195481565b6000600254905090565b60145481565b61206461290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890615144565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161213a9190614d5e565b60405180910390a150565b61214d61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190615144565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b6121ff61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390615144565b60405180910390fd5b826010819055508160128190555080601481905550505050565b601a5481565b6122b461290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890615144565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426123ef91906155cd565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61250261290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690615144565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125f261290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690615144565b60405180910390fd5b600f60009054906101000a900460ff16600a61269b9190615756565b816126a691906157a1565b601a8190555050565b6126b761290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90615144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90615847565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61287961290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd90615144565b60405180910390fd5b42601981905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e906158d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee9061596b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad59190614d88565b60405180910390a3505050565b601c60009054906101000a900460ff1615612bdb57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b9b5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906159d7565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290615a43565b60405180910390fd5b6000612c5630611947565b90506000601a548210159050808015612c7c5750601860149054906101000a900460ff16155b8015612cd65750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cee5750601860159054906101000a900460ff165b15612d0257601a549150612d0182612ef1565b5b612d0d858585612fc7565b5050505050565b6000838311158290612d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d539190614c48565b60405180910390fd5b5060008385612d6b919061529a565b9050809150509392505050565b6000806000612d856134c4565b91509150612d9c8183612da390919063ffffffff16565b9250505090565b6000612de583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613777565b905092915050565b6000808284612dfc91906155cd565b905083811015612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3890615aaf565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612e628a6137da565b9250925092506000806000612e808d8686612e7b612d78565b613834565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ee983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d14565b905092915050565b6001601860146101000a81548160ff0219169083151502179055506000612f22600283612da390919063ffffffff16565b90506000612f398284612ea790919063ffffffff16565b90506000479050612f49836138bd565b6000612f5e8247612ea790919063ffffffff16565b9050612f6a8382613b00565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612f9d93929190615acf565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130685750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561307a57613075613be5565b613121565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312057601954421015613115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310c90615b52565b60405180910390fd5b61311f8382613c47565b5b5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c45750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d9576131d4838383613d43565b613410565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132915761328c838383613fa3565b61340f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133355750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561334a57613345838383614203565b61340e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133ec5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613401576133fc8383836143e2565b61340d565b61340c838383614203565b5b5b5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134b15750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134bf576134be6146d7565b5b505050565b6000806000600b5490506000600a54905060005b60088054905081101561373a578260036000600884815481106134fe576134fd61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135ec57508160046000600884815481106135845761358361523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360357600b54600a5494509450505050613773565b613693600360006008848154811061361e5761361d61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ea790919063ffffffff16565b925061372560046000600884815481106136b0576136af61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ea790919063ffffffff16565b91508080613732906152fd565b9150506134d8565b50613752600a54600b54612da390919063ffffffff16565b82101561376a57600b54600a54935093505050613773565b81819350935050505b9091565b600080831182906137be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b59190614c48565b60405180910390fd5b50600083856137cd9190615ba1565b9050809150509392505050565b6000806000806137e9856146f4565b905060006137f686614725565b9050600061381f82613811858a612ea790919063ffffffff16565b612ea790919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061384d858961475690919063ffffffff16565b90506000613864868961475690919063ffffffff16565b9050600061387b878961475690919063ffffffff16565b905060006138a4826138968587612ea790919063ffffffff16565b612ea790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138da576138d9615bd2565b5b6040519080825280602002602001820160405280156139085781602001602082028036833780820191505090505b50905030816000815181106139205761391f61523c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139eb91906153c7565b816001815181106139ff576139fe61523c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6630601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612917565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aca959493929190615cfa565b600060405180830381600087803b158015613ae457600080fd5b505af1158015613af8573d6000803e3d6000fd5b505050505050565b613b2d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612917565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b79611caf565b426040518863ffffffff1660e01b8152600401613b9b96959493929190615d54565b60606040518083038185885af1158015613bb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bde9190615dca565b5050505050565b6000601054148015613bf957506000601254145b8015613c0757506000601454145b15613c1157613c45565b6010546011819055506012546013819055506014546015819055506000601081905550600060128190555060006014819055505b565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506201518042613c99919061529a565b816002015411613ccb57613cac83611947565b8160010181905550818160000181905550428160020181905550613ce7565b81816000016000828254613cdf91906155cd565b925050819055505b600a8160010154613cf89190615ba1565b81600001541115613d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3590615e69565b60405180910390fd5b505050565b600080600080600080613d5587612e4b565b955095509550955095509550613db387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e4886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613edd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f29816147d1565b613f338483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f909190614d88565b60405180910390a3505050505050505050565b600080600080600080613fb587612e4b565b95509550955095509550955061401386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614189816147d1565b6141938483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141f09190614d88565b60405180910390a3505050505050505050565b60008060008060008061421587612e4b565b95509550955095509550955061422d8984878a6149b0565b809650819450505061428786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614368816147d1565b6143728483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143cf9190614d88565b60405180910390a3505050505050505050565b6000806000806000806143f487612e4b565b95509550955095509550955061445287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144e786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457c83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465d816147d1565b6146678483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146c49190614d88565b60405180910390a3505050505050505050565b601154601081905550601354601281905550601554601481905550565b600061471e60646147106010548561475690919063ffffffff16565b612da390919063ffffffff16565b9050919050565b600061474f60646147416012548561475690919063ffffffff16565b612da390919063ffffffff16565b9050919050565b60008083141561476957600090506147cb565b6000828461477791906157a1565b90508284826147869190615ba1565b146147c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147bd90615efb565b60405180910390fd5b809150505b92915050565b60006147db612d78565b905060006147f2828461475690919063ffffffff16565b905061484681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149715761492d83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61498b82600b54612ea790919063ffffffff16565b600b819055506149a681600c54612ded90919063ffffffff16565b600c819055505050565b600080600060145414156149c957848491509150614ba6565b60006149f36014546149e5606487612da390919063ffffffff16565b61475690919063ffffffff16565b90506000614a11614a02612d78565b8361475690919063ffffffff16565b9050614a268187612ea790919063ffffffff16565b9550614a3b8288612ea790919063ffffffff16565b9650614ab18160036000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b60036000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614b959190614d88565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614be9578082015181840152602081019050614bce565b83811115614bf8576000848401525b50505050565b6000601f19601f8301169050919050565b6000614c1a82614baf565b614c248185614bba565b9350614c34818560208601614bcb565b614c3d81614bfe565b840191505092915050565b60006020820190508181036000830152614c628184614c0f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c9a82614c6f565b9050919050565b614caa81614c8f565b8114614cb557600080fd5b50565b600081359050614cc781614ca1565b92915050565b6000819050919050565b614ce081614ccd565b8114614ceb57600080fd5b50565b600081359050614cfd81614cd7565b92915050565b60008060408385031215614d1a57614d19614c6a565b5b6000614d2885828601614cb8565b9250506020614d3985828601614cee565b9150509250929050565b60008115159050919050565b614d5881614d43565b82525050565b6000602082019050614d736000830184614d4f565b92915050565b614d8281614ccd565b82525050565b6000602082019050614d9d6000830184614d79565b92915050565b6000819050919050565b6000614dc8614dc3614dbe84614c6f565b614da3565b614c6f565b9050919050565b6000614dda82614dad565b9050919050565b6000614dec82614dcf565b9050919050565b614dfc81614de1565b82525050565b6000602082019050614e176000830184614df3565b92915050565b600080600060608486031215614e3657614e35614c6a565b5b6000614e4486828701614cb8565b9350506020614e5586828701614cb8565b9250506040614e6686828701614cee565b9150509250925092565b614e7981614c8f565b82525050565b6000602082019050614e946000830184614e70565b92915050565b614ea381614d43565b8114614eae57600080fd5b50565b600081359050614ec081614e9a565b92915050565b60008060408385031215614edd57614edc614c6a565b5b6000614eeb85828601614cb8565b9250506020614efc85828601614eb1565b9150509250929050565b600060208284031215614f1c57614f1b614c6a565b5b6000614f2a84828501614cee565b91505092915050565b600060ff82169050919050565b614f4981614f33565b82525050565b6000602082019050614f646000830184614f40565b92915050565b600060208284031215614f8057614f7f614c6a565b5b6000614f8e84828501614cb8565b91505092915050565b60008060408385031215614fae57614fad614c6a565b5b6000614fbc85828601614cee565b9250506020614fcd85828601614eb1565b9150509250929050565b600060208284031215614fed57614fec614c6a565b5b6000614ffb84828501614eb1565b91505092915050565b60008060006060848603121561501d5761501c614c6a565b5b600061502b86828701614cee565b935050602061503c86828701614cee565b925050604061504d86828701614cee565b9150509250925092565b6000806040838503121561506e5761506d614c6a565b5b600061507c85828601614cb8565b925050602061508d85828601614cb8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150de57607f821691505b602082108114156150f2576150f1615097565b5b50919050565b7f4f6e6c794f776e65720000000000000000000000000000000000000000000000600082015250565b600061512e600983614bba565b9150615139826150f8565b602082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f416d6f756e74203e207265666c656374696f6e73000000000000000000000000600082015250565b600061519a601483614bba565b91506151a582615164565b602082019050919050565b600060208201905081810360008301526151c98161518d565b9050919050565b7f4e6f74206578636c756465640000000000000000000000000000000000000000600082015250565b6000615206600c83614bba565b9150615211826151d0565b602082019050919050565b60006020820190508181036000830152615235816151f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152a582614ccd565b91506152b083614ccd565b9250828210156152c3576152c261526b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061530882614ccd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533b5761533a61526b565b5b600182019050919050565b7f4578636c75646564000000000000000000000000000000000000000000000000600082015250565b600061537c600883614bba565b915061538782615346565b602082019050919050565b600060208201905081810360008301526153ab8161536f565b9050919050565b6000815190506153c181614ca1565b92915050565b6000602082840312156153dd576153dc614c6a565b5b60006153eb848285016153b2565b91505092915050565b60006040820190506154096000830185614e70565b6154166020830184614e70565b9392505050565b7f416d6f756e74203e20737570706c790000000000000000000000000000000000600082015250565b6000615453600f83614bba565b915061545e8261541d565b602082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b7f6578636c75646564000000000000000000000000000000000000000000000000600082015250565b60006154bf600883614bba565b91506154ca82615489565b602082019050919050565b600060208201905081810360008301526154ee816154b2565b9050919050565b7f6f6e6c794f776e65720000000000000000000000000000000000000000000000600082015250565b600061552b600983614bba565b9150615536826154f5565b602082019050919050565b6000602082019050818103600083015261555a8161551e565b9050919050565b7f436f6e7472616374206973206c6f636b65640000000000000000000000000000600082015250565b6000615597601283614bba565b91506155a282615561565b602082019050919050565b600060208201905081810360008301526155c68161558a565b9050919050565b60006155d882614ccd565b91506155e383614ccd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156185761561761526b565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b600185111561567a578086048111156156565761565561526b565b5b60018516156156655780820291505b808102905061567385615623565b945061563a565b94509492505050565b600082615693576001905061574f565b816156a1576000905061574f565b81600181146156b757600281146156c1576156f0565b600191505061574f565b60ff8411156156d3576156d261526b565b5b8360020a9150848211156156ea576156e961526b565b5b5061574f565b5060208310610133831016604e8410600b84101617156157255782820a9050838111156157205761571f61526b565b5b61574f565b6157328484846001615630565b925090508184048111156157495761574861526b565b5b81810290505b9392505050565b600061576182614ccd565b915061576c83614f33565b92506157997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615683565b905092915050565b60006157ac82614ccd565b91506157b783614ccd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157f0576157ef61526b565b5b828202905092915050565b7f4f776e61626c653a206164647265737328302900000000000000000000000000600082015250565b6000615831601383614bba565b915061583c826157fb565b602082019050919050565b6000602082019050818103600083015261586081615824565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158c3602483614bba565b91506158ce82615867565b604082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615955602283614bba565b9150615960826158f9565b604082019050919050565b6000602082019050818103600083015261598481615948565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006159c1600b83614bba565b91506159cc8261598b565b602082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f45524332303a2061646472657373283029000000000000000000000000000000600082015250565b6000615a2d601183614bba565b9150615a38826159f7565b602082019050919050565b60006020820190508181036000830152615a5c81615a20565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a99601b83614bba565b9150615aa482615a63565b602082019050919050565b60006020820190508181036000830152615ac881615a8c565b9050919050565b6000606082019050615ae46000830186614d79565b615af16020830185614d79565b615afe6040830184614d79565b949350505050565b7f6c6f636b65640000000000000000000000000000000000000000000000000000600082015250565b6000615b3c600683614bba565b9150615b4782615b06565b602082019050919050565b60006020820190508181036000830152615b6b81615b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615bac82614ccd565b9150615bb783614ccd565b925082615bc757615bc6615b72565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615c26615c21615c1c84615c01565b614da3565b614ccd565b9050919050565b615c3681615c0b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7181614c8f565b82525050565b6000615c838383615c68565b60208301905092915050565b6000602082019050919050565b6000615ca782615c3c565b615cb18185615c47565b9350615cbc83615c58565b8060005b83811015615ced578151615cd48882615c77565b9750615cdf83615c8f565b925050600181019050615cc0565b5085935050505092915050565b600060a082019050615d0f6000830188614d79565b615d1c6020830187615c2d565b8181036040830152615d2e8186615c9c565b9050615d3d6060830185614e70565b615d4a6080830184614d79565b9695505050505050565b600060c082019050615d696000830189614e70565b615d766020830188614d79565b615d836040830187615c2d565b615d906060830186615c2d565b615d9d6080830185614e70565b615daa60a0830184614d79565b979650505050505050565b600081519050615dc481614cd7565b92915050565b600080600060608486031215615de357615de2614c6a565b5b6000615df186828701615db5565b9350506020615e0286828701615db5565b9250506040615e1386828701615db5565b9150509250925092565b7f73656c6c2074726573686f6c6420726561636865640000000000000000000000600082015250565b6000615e53601583614bba565b9150615e5e82615e1d565b602082019050919050565b60006020820190508181036000830152615e8281615e46565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615ee5602183614bba565b9150615ef082615e89565b604082019050919050565b60006020820190508181036000830152615f1481615ed8565b905091905056fea2646970667358221220fa2e793b1eae37be96a3cc63a6085342e53031a4bef0d21f298e1f1f9b6df93064736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a0823111610144578063c0b0fda2116100b6578063dd4670641161007a578063dd4670641461090b578063dd62ed3e14610934578063ed77d40614610971578063f0f165af1461099a578063f2fde38b146109c3578063f9bc64db146109ec57610267565b8063c0b0fda21461083a578063c49b9a8014610865578063cbd2e8011461088e578063cec10c11146108b7578063d12a7688146108e057610267565b806395d89b411161010857806395d89b4114610728578063a457c2d714610753578063a69df4b514610790578063a9059cbb146107a7578063aa082a9d146107e4578063b6c523241461080f57610267565b806370a0823114610655578063715018a61461069257806388f82020146106a9578063899e8689146106e65780638da5cb5b146106fd57610267565b80633685d419116101dd5780634549b039116101a15780634549b0391461053157806349bd5a5e1461056e5780634a74bb021461059957806352390c02146105c45780635342acb4146105ed5780636bc87c3a1461062a57610267565b80633685d4191461044e57806339509351146104775780633b124fe7146104b45780633bd5d173146104df57806341cb87fc1461050857610267565b806323b872dd1161022457806323b872dd1461035557806327c8f835146103925780632d052432146103bd5780632d838119146103e6578063313ce5671461042357610267565b806306fdde031461026c578063095ea7b31461029757806313114a9d146102d45780631694505e146102ff57806318160ddd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a03565b60405161028e9190614c48565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614d03565b610a95565b6040516102cb9190614d5e565b60405180910390f35b3480156102e057600080fd5b506102e9610ab3565b6040516102f69190614d88565b60405180910390f35b34801561030b57600080fd5b50610314610abd565b6040516103219190614e02565b60405180910390f35b34801561033657600080fd5b5061033f610ae3565b60405161034c9190614d88565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614e1d565b610aed565b6040516103899190614d5e565b60405180910390f35b34801561039e57600080fd5b506103a7610be3565b6040516103b49190614e7f565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190614ec6565b610c09565b005b3480156103f257600080fd5b5061040d60048036038101906104089190614f06565b610cf9565b60405161041a9190614d88565b60405180910390f35b34801561042f57600080fd5b50610438610d67565b6040516104459190614f4f565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614f6a565b610d7e565b005b34801561048357600080fd5b5061049e60048036038101906104999190614d03565b6110cd565b6040516104ab9190614d5e565b60405180910390f35b3480156104c057600080fd5b506104c9611180565b6040516104d69190614d88565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614f06565b611186565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614f6a565b611301565b005b34801561053d57600080fd5b5061055860048036038101906105539190614f97565b61157a565b6040516105659190614d88565b60405180910390f35b34801561057a57600080fd5b506105836115fe565b6040516105909190614e7f565b60405180910390f35b3480156105a557600080fd5b506105ae611624565b6040516105bb9190614d5e565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614f6a565b611637565b005b3480156105f957600080fd5b50610614600480360381019061060f9190614f6a565b6118eb565b6040516106219190614d5e565b60405180910390f35b34801561063657600080fd5b5061063f611941565b60405161064c9190614d88565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614f6a565b611947565b6040516106899190614d88565b60405180910390f35b34801561069e57600080fd5b506106a7611a32565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614f6a565b611b85565b6040516106dd9190614d5e565b60405180910390f35b3480156106f257600080fd5b506106fb611bdb565b005b34801561070957600080fd5b50610712611caf565b60405161071f9190614e7f565b60405180910390f35b34801561073457600080fd5b5061073d611cd8565b60405161074a9190614c48565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614d03565b611d6a565b6040516107879190614d5e565b60405180910390f35b34801561079c57600080fd5b506107a5611e54565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190614d03565b612028565b6040516107db9190614d5e565b60405180910390f35b3480156107f057600080fd5b506107f9612046565b6040516108069190614d88565b60405180910390f35b34801561081b57600080fd5b5061082461204c565b6040516108319190614d88565b60405180910390f35b34801561084657600080fd5b5061084f612056565b60405161085c9190614d88565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190614fd7565b61205c565b005b34801561089a57600080fd5b506108b560048036038101906108b09190614fd7565b612145565b005b3480156108c357600080fd5b506108de60048036038101906108d99190615004565b6121f7565b005b3480156108ec57600080fd5b506108f56122a6565b6040516109029190614d88565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614f06565b6122ac565b005b34801561094057600080fd5b5061095b60048036038101906109569190615057565b612473565b6040516109689190614d88565b60405180910390f35b34801561097d57600080fd5b5061099860048036038101906109939190614ec6565b6124fa565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614f06565b6125ea565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190614f6a565b6126af565b005b3480156109f857600080fd5b50610a01612871565b005b6060600d8054610a12906150c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906150c6565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b5050505050905090565b6000610aa9610aa261290f565b8484612917565b6001905092915050565b6000600c54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610afa848484612ae2565b610bd884610b0661290f565b610bd3856040518060400160405280601081526020017f45524332303a20616c6c6f77616e636500000000000000000000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8961290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149092919063ffffffff16565b612917565b600190509392505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1161290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590615144565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600b54821115610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d37906151b0565b60405180910390fd5b6000610d4a612d78565b9050610d5f8184612da390919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610d8661290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90615144565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e969061521c565b60405180910390fd5b60005b6008805490508110156110c9578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610eda57610ed961523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110b65760086001600880549050610f35919061529a565b81548110610f4657610f4561523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f8557610f8461523c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061107c5761107b6152ce565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110c9565b80806110c1906152fd565b915050610ea2565b5050565b60006111766110da61290f565b8461117185600560006110eb61290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b612917565b6001905092915050565b60105481565b600061119061290f565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690615392565b60405180910390fd5b600061122a83612e4b565b5050505050905061128381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112db81600b54612ea790919063ffffffff16565b600b819055506112f683600c54612ded90919063ffffffff16565b600c81905550505050565b61130961290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90615144565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906153c7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149591906153c7565b6040518363ffffffff1660e01b81526004016114b29291906153f4565b6020604051808303816000875af11580156114d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f591906153c7565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600a548311156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890615469565b60405180910390fd5b816115e15760006115d184612e4b565b50505050509050809150506115f8565b60006115ec84612e4b565b50505050915050809150505b92915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b61163f61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390615144565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906154d5565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561182d576117e9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf9565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119e257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a2d565b611a2a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf9565b90505b919050565b611a3a61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90615144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611be361290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790615144565b60405180910390fd5b600560108190555060105460118190555060026012819055506012546013819055506001601481905550601454601581905550611cad600061205c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611ce7906150c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611d13906150c6565b8015611d605780601f10611d3557610100808354040283529160200191611d60565b820191906000526020600020905b815481529060010190602001808311611d4357829003601f168201915b5050505050905090565b6000611e4a611d7761290f565b84611e45856040518060400160405280601481526020017f45524332303a20616c6c6f77616e6365203c203000000000000000000000000081525060056000611dbe61290f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d149092919063ffffffff16565b612917565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90615541565b60405180910390fd5b6002544211611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f906155ad565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061203c61203561290f565b8484612ae2565b6001905092915050565b60195481565b6000600254905090565b60145481565b61206461290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890615144565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161213a9190614d5e565b60405180910390a150565b61214d61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190615144565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b6121ff61290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390615144565b60405180910390fd5b826010819055508160128190555080601481905550505050565b601a5481565b6122b461290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890615144565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426123ef91906155cd565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61250261290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690615144565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125f261290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690615144565b60405180910390fd5b600f60009054906101000a900460ff16600a61269b9190615756565b816126a691906157a1565b601a8190555050565b6126b761290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90615144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90615847565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61287961290f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd90615144565b60405180910390fd5b42601981905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e906158d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee9061596b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad59190614d88565b60405180910390a3505050565b601c60009054906101000a900460ff1615612bdb57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b9b5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906159d7565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290615a43565b60405180910390fd5b6000612c5630611947565b90506000601a548210159050808015612c7c5750601860149054906101000a900460ff16155b8015612cd65750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cee5750601860159054906101000a900460ff165b15612d0257601a549150612d0182612ef1565b5b612d0d858585612fc7565b5050505050565b6000838311158290612d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d539190614c48565b60405180910390fd5b5060008385612d6b919061529a565b9050809150509392505050565b6000806000612d856134c4565b91509150612d9c8183612da390919063ffffffff16565b9250505090565b6000612de583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613777565b905092915050565b6000808284612dfc91906155cd565b905083811015612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3890615aaf565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612e628a6137da565b9250925092506000806000612e808d8686612e7b612d78565b613834565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ee983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d14565b905092915050565b6001601860146101000a81548160ff0219169083151502179055506000612f22600283612da390919063ffffffff16565b90506000612f398284612ea790919063ffffffff16565b90506000479050612f49836138bd565b6000612f5e8247612ea790919063ffffffff16565b9050612f6a8382613b00565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612f9d93929190615acf565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130685750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561307a57613075613be5565b613121565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312057601954421015613115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310c90615b52565b60405180910390fd5b61311f8382613c47565b5b5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c45750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d9576131d4838383613d43565b613410565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132915761328c838383613fa3565b61340f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133355750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561334a57613345838383614203565b61340e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133ec5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613401576133fc8383836143e2565b61340d565b61340c838383614203565b5b5b5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134b15750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134bf576134be6146d7565b5b505050565b6000806000600b5490506000600a54905060005b60088054905081101561373a578260036000600884815481106134fe576134fd61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135ec57508160046000600884815481106135845761358361523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360357600b54600a5494509450505050613773565b613693600360006008848154811061361e5761361d61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ea790919063ffffffff16565b925061372560046000600884815481106136b0576136af61523c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ea790919063ffffffff16565b91508080613732906152fd565b9150506134d8565b50613752600a54600b54612da390919063ffffffff16565b82101561376a57600b54600a54935093505050613773565b81819350935050505b9091565b600080831182906137be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b59190614c48565b60405180910390fd5b50600083856137cd9190615ba1565b9050809150509392505050565b6000806000806137e9856146f4565b905060006137f686614725565b9050600061381f82613811858a612ea790919063ffffffff16565b612ea790919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061384d858961475690919063ffffffff16565b90506000613864868961475690919063ffffffff16565b9050600061387b878961475690919063ffffffff16565b905060006138a4826138968587612ea790919063ffffffff16565b612ea790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138da576138d9615bd2565b5b6040519080825280602002602001820160405280156139085781602001602082028036833780820191505090505b50905030816000815181106139205761391f61523c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139eb91906153c7565b816001815181106139ff576139fe61523c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a6630601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612917565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613aca959493929190615cfa565b600060405180830381600087803b158015613ae457600080fd5b505af1158015613af8573d6000803e3d6000fd5b505050505050565b613b2d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612917565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b79611caf565b426040518863ffffffff1660e01b8152600401613b9b96959493929190615d54565b60606040518083038185885af1158015613bb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bde9190615dca565b5050505050565b6000601054148015613bf957506000601254145b8015613c0757506000601454145b15613c1157613c45565b6010546011819055506012546013819055506014546015819055506000601081905550600060128190555060006014819055505b565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506201518042613c99919061529a565b816002015411613ccb57613cac83611947565b8160010181905550818160000181905550428160020181905550613ce7565b81816000016000828254613cdf91906155cd565b925050819055505b600a8160010154613cf89190615ba1565b81600001541115613d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3590615e69565b60405180910390fd5b505050565b600080600080600080613d5587612e4b565b955095509550955095509550613db387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e4886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613edd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f29816147d1565b613f338483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f909190614d88565b60405180910390a3505050505050505050565b600080600080600080613fb587612e4b565b95509550955095509550955061401386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614189816147d1565b6141938483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141f09190614d88565b60405180910390a3505050505050505050565b60008060008060008061421587612e4b565b95509550955095509550955061422d8984878a6149b0565b809650819450505061428786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614368816147d1565b6143728483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143cf9190614d88565b60405180910390a3505050505050505050565b6000806000806000806143f487612e4b565b95509550955095509550955061445287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144e786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457c83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465d816147d1565b6146678483614976565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146c49190614d88565b60405180910390a3505050505050505050565b601154601081905550601354601281905550601554601481905550565b600061471e60646147106010548561475690919063ffffffff16565b612da390919063ffffffff16565b9050919050565b600061474f60646147416012548561475690919063ffffffff16565b612da390919063ffffffff16565b9050919050565b60008083141561476957600090506147cb565b6000828461477791906157a1565b90508284826147869190615ba1565b146147c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147bd90615efb565b60405180910390fd5b809150505b92915050565b60006147db612d78565b905060006147f2828461475690919063ffffffff16565b905061484681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149715761492d83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61498b82600b54612ea790919063ffffffff16565b600b819055506149a681600c54612ded90919063ffffffff16565b600c819055505050565b600080600060145414156149c957848491509150614ba6565b60006149f36014546149e5606487612da390919063ffffffff16565b61475690919063ffffffff16565b90506000614a11614a02612d78565b8361475690919063ffffffff16565b9050614a268187612ea790919063ffffffff16565b9550614a3b8288612ea790919063ffffffff16565b9650614ab18160036000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded90919063ffffffff16565b60036000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614b959190614d88565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614be9578082015181840152602081019050614bce565b83811115614bf8576000848401525b50505050565b6000601f19601f8301169050919050565b6000614c1a82614baf565b614c248185614bba565b9350614c34818560208601614bcb565b614c3d81614bfe565b840191505092915050565b60006020820190508181036000830152614c628184614c0f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c9a82614c6f565b9050919050565b614caa81614c8f565b8114614cb557600080fd5b50565b600081359050614cc781614ca1565b92915050565b6000819050919050565b614ce081614ccd565b8114614ceb57600080fd5b50565b600081359050614cfd81614cd7565b92915050565b60008060408385031215614d1a57614d19614c6a565b5b6000614d2885828601614cb8565b9250506020614d3985828601614cee565b9150509250929050565b60008115159050919050565b614d5881614d43565b82525050565b6000602082019050614d736000830184614d4f565b92915050565b614d8281614ccd565b82525050565b6000602082019050614d9d6000830184614d79565b92915050565b6000819050919050565b6000614dc8614dc3614dbe84614c6f565b614da3565b614c6f565b9050919050565b6000614dda82614dad565b9050919050565b6000614dec82614dcf565b9050919050565b614dfc81614de1565b82525050565b6000602082019050614e176000830184614df3565b92915050565b600080600060608486031215614e3657614e35614c6a565b5b6000614e4486828701614cb8565b9350506020614e5586828701614cb8565b9250506040614e6686828701614cee565b9150509250925092565b614e7981614c8f565b82525050565b6000602082019050614e946000830184614e70565b92915050565b614ea381614d43565b8114614eae57600080fd5b50565b600081359050614ec081614e9a565b92915050565b60008060408385031215614edd57614edc614c6a565b5b6000614eeb85828601614cb8565b9250506020614efc85828601614eb1565b9150509250929050565b600060208284031215614f1c57614f1b614c6a565b5b6000614f2a84828501614cee565b91505092915050565b600060ff82169050919050565b614f4981614f33565b82525050565b6000602082019050614f646000830184614f40565b92915050565b600060208284031215614f8057614f7f614c6a565b5b6000614f8e84828501614cb8565b91505092915050565b60008060408385031215614fae57614fad614c6a565b5b6000614fbc85828601614cee565b9250506020614fcd85828601614eb1565b9150509250929050565b600060208284031215614fed57614fec614c6a565b5b6000614ffb84828501614eb1565b91505092915050565b60008060006060848603121561501d5761501c614c6a565b5b600061502b86828701614cee565b935050602061503c86828701614cee565b925050604061504d86828701614cee565b9150509250925092565b6000806040838503121561506e5761506d614c6a565b5b600061507c85828601614cb8565b925050602061508d85828601614cb8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150de57607f821691505b602082108114156150f2576150f1615097565b5b50919050565b7f4f6e6c794f776e65720000000000000000000000000000000000000000000000600082015250565b600061512e600983614bba565b9150615139826150f8565b602082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f416d6f756e74203e207265666c656374696f6e73000000000000000000000000600082015250565b600061519a601483614bba565b91506151a582615164565b602082019050919050565b600060208201905081810360008301526151c98161518d565b9050919050565b7f4e6f74206578636c756465640000000000000000000000000000000000000000600082015250565b6000615206600c83614bba565b9150615211826151d0565b602082019050919050565b60006020820190508181036000830152615235816151f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152a582614ccd565b91506152b083614ccd565b9250828210156152c3576152c261526b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061530882614ccd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533b5761533a61526b565b5b600182019050919050565b7f4578636c75646564000000000000000000000000000000000000000000000000600082015250565b600061537c600883614bba565b915061538782615346565b602082019050919050565b600060208201905081810360008301526153ab8161536f565b9050919050565b6000815190506153c181614ca1565b92915050565b6000602082840312156153dd576153dc614c6a565b5b60006153eb848285016153b2565b91505092915050565b60006040820190506154096000830185614e70565b6154166020830184614e70565b9392505050565b7f416d6f756e74203e20737570706c790000000000000000000000000000000000600082015250565b6000615453600f83614bba565b915061545e8261541d565b602082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b7f6578636c75646564000000000000000000000000000000000000000000000000600082015250565b60006154bf600883614bba565b91506154ca82615489565b602082019050919050565b600060208201905081810360008301526154ee816154b2565b9050919050565b7f6f6e6c794f776e65720000000000000000000000000000000000000000000000600082015250565b600061552b600983614bba565b9150615536826154f5565b602082019050919050565b6000602082019050818103600083015261555a8161551e565b9050919050565b7f436f6e7472616374206973206c6f636b65640000000000000000000000000000600082015250565b6000615597601283614bba565b91506155a282615561565b602082019050919050565b600060208201905081810360008301526155c68161558a565b9050919050565b60006155d882614ccd565b91506155e383614ccd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156185761561761526b565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b600185111561567a578086048111156156565761565561526b565b5b60018516156156655780820291505b808102905061567385615623565b945061563a565b94509492505050565b600082615693576001905061574f565b816156a1576000905061574f565b81600181146156b757600281146156c1576156f0565b600191505061574f565b60ff8411156156d3576156d261526b565b5b8360020a9150848211156156ea576156e961526b565b5b5061574f565b5060208310610133831016604e8410600b84101617156157255782820a9050838111156157205761571f61526b565b5b61574f565b6157328484846001615630565b925090508184048111156157495761574861526b565b5b81810290505b9392505050565b600061576182614ccd565b915061576c83614f33565b92506157997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615683565b905092915050565b60006157ac82614ccd565b91506157b783614ccd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157f0576157ef61526b565b5b828202905092915050565b7f4f776e61626c653a206164647265737328302900000000000000000000000000600082015250565b6000615831601383614bba565b915061583c826157fb565b602082019050919050565b6000602082019050818103600083015261586081615824565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158c3602483614bba565b91506158ce82615867565b604082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615955602283614bba565b9150615960826158f9565b604082019050919050565b6000602082019050818103600083015261598481615948565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006159c1600b83614bba565b91506159cc8261598b565b602082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f45524332303a2061646472657373283029000000000000000000000000000000600082015250565b6000615a2d601183614bba565b9150615a38826159f7565b602082019050919050565b60006020820190508181036000830152615a5c81615a20565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a99601b83614bba565b9150615aa482615a63565b602082019050919050565b60006020820190508181036000830152615ac881615a8c565b9050919050565b6000606082019050615ae46000830186614d79565b615af16020830185614d79565b615afe6040830184614d79565b949350505050565b7f6c6f636b65640000000000000000000000000000000000000000000000000000600082015250565b6000615b3c600683614bba565b9150615b4782615b06565b602082019050919050565b60006020820190508181036000830152615b6b81615b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615bac82614ccd565b9150615bb783614ccd565b925082615bc757615bc6615b72565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615c26615c21615c1c84615c01565b614da3565b614ccd565b9050919050565b615c3681615c0b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7181614c8f565b82525050565b6000615c838383615c68565b60208301905092915050565b6000602082019050919050565b6000615ca782615c3c565b615cb18185615c47565b9350615cbc83615c58565b8060005b83811015615ced578151615cd48882615c77565b9750615cdf83615c8f565b925050600181019050615cc0565b5085935050505092915050565b600060a082019050615d0f6000830188614d79565b615d1c6020830187615c2d565b8181036040830152615d2e8186615c9c565b9050615d3d6060830185614e70565b615d4a6080830184614d79565b9695505050505050565b600060c082019050615d696000830189614e70565b615d766020830188614d79565b615d836040830187615c2d565b615d906060830186615c2d565b615d9d6080830185614e70565b615daa60a0830184614d79565b979650505050505050565b600081519050615dc481614cd7565b92915050565b600080600060608486031215615de357615de2614c6a565b5b6000615df186828701615db5565b9350506020615e0286828701615db5565b9250506040615e1386828701615db5565b9150509250925092565b7f73656c6c2074726573686f6c6420726561636865640000000000000000000000600082015250565b6000615e53601583614bba565b9150615e5e82615e1d565b602082019050919050565b60006020820190508181036000830152615e8281615e46565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615ee5602183614bba565b9150615ef082615e89565b604082019050919050565b60006020820190508181036000830152615f1481615ed8565b905091905056fea2646970667358221220fa2e793b1eae37be96a3cc63a6085342e53031a4bef0d21f298e1f1f9b6df93064736f6c634300080c0033

Deployed Bytecode Sourcemap

25475:20324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29072:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30475:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26740:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28429:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29558:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26660:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29426:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31353:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28338:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31914:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29857:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26389:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30572:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45292:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30923:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26789:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26858:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31592:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36475:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26475:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28532:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16228:148;;;;;;;;;;;;;:::i;:::-;;30347:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44507:283;;;;;;;;;;;;;:::i;:::-;;15606:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28243:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30085:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17234:266;;;;;;;;;;;;;:::i;:::-;;28740:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26906:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16768:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26576:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45625:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29310:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44932:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26944:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16933:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28919:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44800:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45133:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16533:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40722:90;;;;;;;;;;;;;:::i;:::-;;28152:83;28189:13;28222:5;28215:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:83;:::o;29072:161::-;29147:4;29164:39;29173:12;:10;:12::i;:::-;29187:7;29196:6;29164:8;:39::i;:::-;29221:4;29214:11;;29072:161;;;;:::o;30475:87::-;30517:7;30544:10;;30537:17;;30475:87;:::o;26740:42::-;;;;;;;;;;;;;:::o;28429:95::-;28482:7;28509;;28502:14;;28429:95;:::o;29558:289::-;29656:4;29673:36;29683:6;29691:9;29702:6;29673:9;:36::i;:::-;29720:97;29729:6;29737:12;:10;:12::i;:::-;29751:65;29789:6;29751:65;;;;;;;;;;;;;;;;;:11;:19;29763:6;29751:19;;;;;;;;;;;;;;;:33;29771:12;:10;:12::i;:::-;29751:33;;;;;;;;;;;;;;;;:37;;:65;;;;;:::i;:::-;29720:8;:97::i;:::-;29835:4;29828:11;;29558:289;;;;;:::o;26660:71::-;;;;;;;;;;;;;:::o;29426:124::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;29531:11:::1;29509:13;:19;29523:4;29509:19;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;29426:124:::0;;:::o;31353:231::-;31419:7;31458;;31447;:18;;31439:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:19;31524:10;:8;:10::i;:::-;31501:33;;31552:24;31564:11;31552:7;:11;;:24;;;;:::i;:::-;31545:31;;;31353:231;;;:::o;28338:83::-;28379:5;28404:9;;;;;;;;;;;28397:16;;28338:83;:::o;31914:464::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31996:11:::1;:20;32008:7;31996:20;;;;;;;;;;;;;;;;;;;;;;;;;31988:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;32049:9;32044:327;32068:9;:16;;;;32064:1;:20;32044:327;;;32126:7;32110:23;;:9;32120:1;32110:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;32106:254;;;32169:9;32198:1;32179:9;:16;;;;:20;;;;:::i;:::-;32169:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32154:9;32164:1;32154:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32238:1;32219:7;:16;32227:7;32219:16;;;;;;;;;;;;;;;:20;;;;32281:5;32258:11;:20;32270:7;32258:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32305:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32339:5;;32106:254;32086:3;;;;;:::i;:::-;;;;32044:327;;;;31914:464:::0;:::o;29857:218::-;29945:4;29962:83;29971:12;:10;:12::i;:::-;29985:7;29994:50;30033:10;29994:11;:25;30006:12;:10;:12::i;:::-;29994:25;;;;;;;;;;;;;;;:34;30020:7;29994:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29962:8;:83::i;:::-;30063:4;30056:11;;29857:218;;;;:::o;26389:26::-;;;;:::o;30572:341::-;30624:14;30641:12;:10;:12::i;:::-;30624:29;;30673:11;:19;30685:6;30673:19;;;;;;;;;;;;;;;;;;;;;;;;;30672:20;30664:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30717:15;30741:19;30752:7;30741:10;:19::i;:::-;30716:44;;;;;;;30789:28;30809:7;30789;:15;30797:6;30789:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30771:7;:15;30779:6;30771:15;;;;;;;;;;;;;;;:46;;;;30838:20;30850:7;30838;;:11;;:20;;;;:::i;:::-;30828:7;:30;;;;30882:23;30897:7;30882:10;;:14;;:23;;;;:::i;:::-;30869:10;:36;;;;30613:300;;30572:341;:::o;45292:322::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45367:36:::1;45425:9;45367:68;;45480:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45462:57;;;45528:4;45535:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45462:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45446:13;;:114;;;;;;;;;;;;;;;;;;45589:17;45571:15;;:35;;;;;;;;;;;;;;;;;;45356:258;45292:322:::0;:::o;30923:420::-;31013:7;31052;;31041;:18;;31033:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;31095:17;31090:246;;31130:15;31154:19;31165:7;31154:10;:19::i;:::-;31129:44;;;;;;;31195:7;31188:14;;;;;31090:246;31237:23;31268:19;31279:7;31268:10;:19::i;:::-;31235:52;;;;;;;31309:15;31302:22;;;30923:420;;;;;:::o;26789:29::-;;;;;;;;;;;;;:::o;26858:41::-;;;;;;;;;;;;;:::o;31592:314::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31675:11:::1;:20;31687:7;31675:20;;;;;;;;;;;;;;;;;;;;;;;;;31674:21;31666:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;31741:1;31722:7;:16;31730:7;31722:16;;;;;;;;;;;;;;;;:20;31719:108;;;31778:37;31798:7;:16;31806:7;31798:16;;;;;;;;;;;;;;;;31778:19;:37::i;:::-;31759:7;:16;31767:7;31759:16;;;;;;;;;;;;;;;:56;;;;31719:108;31860:4;31837:11;:20;31849:7;31837:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31875:9;31890:7;31875:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31592:314:::0;:::o;36475:123::-;36539:4;36563:18;:27;36582:7;36563:27;;;;;;;;;;;;;;;;;;;;;;;;;36556:34;;36475:123;;;:::o;26475:32::-;;;;:::o;28532:198::-;28598:7;28622:11;:20;28634:7;28622:20;;;;;;;;;;;;;;;;;;;;;;;;;28618:49;;;28651:7;:16;28659:7;28651:16;;;;;;;;;;;;;;;;28644:23;;;;28618:49;28685:37;28705:7;:16;28713:7;28705:16;;;;;;;;;;;;;;;;28685:19;:37::i;:::-;28678:44;;28532:198;;;;:::o;16228:148::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;16335:1:::1;16298:40;;16319:6;::::0;::::1;;;;;;;;16298:40;;;;;;;;;;;;16366:1;16349:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16228:148::o:0;30347:120::-;30415:4;30439:11;:20;30451:7;30439:20;;;;;;;;;;;;;;;;;;;;;;;;;30432:27;;30347:120;;;:::o;44507:283::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44572:1:::1;44562:7;:11;;;;44601:7;;44583:15;:25;;;;44634:1;44618:13;:17;;;;44669:13;;44645:21;:37;;;;44703:1;44692:8;:12;;;;44733:8;;44714:16;:27;;;;44751:31;44776:5;44751:24;:31::i;:::-;44507:283::o:0;15606:79::-;15644:7;15671:6;;;;;;;;;;;15664:13;;15606:79;:::o;28243:87::-;28282:13;28315:7;28308:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28243:87;:::o;30085:252::-;30178:4;30195:112;30204:12;:10;:12::i;:::-;30218:7;30227:79;30266:15;30227:79;;;;;;;;;;;;;;;;;:11;:25;30239:12;:10;:12::i;:::-;30227:25;;;;;;;;;;;;;;;:34;30253:7;30227:34;;;;;;;;;;;;;;;;:38;;:79;;;;;:::i;:::-;30195:8;:112::i;:::-;30325:4;30318:11;;30085:252;;;;:::o;17234:266::-;17304:10;17286:28;;:14;;;;;;;;;;;:28;;;17278:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;17365:9;;17347:15;:27;17339:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;17443:14;;;;;;;;;;;17414:44;;17435:6;;;;;;;;;;17414:44;;;;;;;;;;;;17478:14;;;;;;;;;;;17469:6;;:23;;;;;;;;;;;;;;;;;;17234:266::o;28740:169::-;28818:4;28837:42;28847:12;:10;:12::i;:::-;28861:9;28872:6;28837:9;:42::i;:::-;28897:4;28890:11;;28740:169;;;;:::o;26906:31::-;;;;:::o;16768:89::-;16813:7;16840:9;;16833:16;;16768:89;:::o;26576:27::-;;;;:::o;45625:171::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45726:8:::1;45702:21;;:32;;;;;;;;;;;;;;;;;;45750:38;45779:8;45750:38;;;;;;:::i;:::-;;;;;;;;45625:171:::0;:::o;29310:108::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;29401:9:::1;29382:16;;:28;;;;;;;;;;;;;;;;;;29310:108:::0;:::o;44932:190::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45040:6:::1;45030:7;:16;;;;45073:12;45057:13;:28;;;;45107:7;45096:8;:18;;;;44932:190:::0;;;:::o;26944:62::-;;;;:::o;16933:226::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;17014:6:::1;::::0;::::1;;;;;;;;16997:14;;:23;;;;;;;;;;;;;;;;;;17048:1;17031:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17091:4;17073:15;:22;;;;:::i;:::-;17061:9;:34;;;;17148:1;17111:40;;17132:6;::::0;::::1;;;;;;;;17111:40;;;;;;;;;;;;16933:226:::0;:::o;28919:143::-;29000:7;29027:11;:18;29039:5;29027:18;;;;;;;;;;;;;;;:27;29046:7;29027:27;;;;;;;;;;;;;;;;29020:34;;28919:143;;;;:::o;44800:120::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;44908:4:::1;44878:18;:27;44897:7;44878:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44800:120:::0;;:::o;45133:150::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45266:9:::1;;;;;;;;;;;45262:2;:13;;;;:::i;:::-;45255:6;:20;;;;:::i;:::-;45223:29;:52;;;;45133:150:::0;:::o;16533:225::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;16642:1:::1;16622:22;;:8;:22;;;;16614:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16713:8;16684:38;;16705:6;::::0;::::1;;;;;;;;16684:38;;;;;;;;;;;;16742:8;16733:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16533:225:::0;:::o;40722:90::-;15830:12;:10;:12::i;:::-;15820:22;;:6;;;;;;;;;;:22;;;15812:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40789:15:::1;40771;:33;;;;40722:90::o:0;7999:115::-;8052:15;8095:10;8080:26;;7999:115;:::o;36606:337::-;36716:1;36699:19;;:5;:19;;;;36691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36797:1;36778:21;;:7;:21;;;;36770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36881:6;36851:11;:18;36863:5;36851:18;;;;;;;;;;;;;;;:27;36870:7;36851:27;;;;;;;;;;;;;;;:36;;;;36919:7;36903:32;;36912:5;36903:32;;;36928:6;36903:32;;;;;;:::i;:::-;;;;;;;;36606:337;;;:::o;36951:1184::-;37069:16;;;;;;;;;;;37066:101;;;37108:13;:19;37122:4;37108:19;;;;;;;;;;;;;;;;;;;;;;;;;37107:20;:42;;;;;37132:13;:17;37146:2;37132:17;;;;;;;;;;;;;;;;;;;;;;;;;37131:18;37107:42;37099:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37066:101;37201:1;37185:18;;:4;:18;;;;37177:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37529:28;37560:24;37578:4;37560:9;:24::i;:::-;37529:55;;37603:24;37654:29;;37630:20;:53;;37603:80;;37712:19;:53;;;;;37749:16;;;;;;;;;;;37748:17;37712:53;:91;;;;;37790:13;;;;;;;;;;;37782:21;;:4;:21;;;;37712:91;:129;;;;;37820:21;;;;;;;;;;;37712:129;37694:318;;;37891:29;;37868:52;;37964:36;37979:20;37964:14;:36::i;:::-;37694:318;38097:30;38112:4;38117:2;38120:6;38097:14;:30::i;:::-;37054:1081;;36951:1184;;;:::o;4397:192::-;4483:7;4516:1;4511;:6;;4519:12;4503:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4543:9;4559:1;4555;:5;;;;:::i;:::-;4543:17;;4580:1;4573:8;;;4397:192;;;;;:::o;34507:163::-;34548:7;34569:15;34586;34605:19;:17;:19::i;:::-;34568:56;;;;34642:20;34654:7;34642;:11;;:20;;;;:::i;:::-;34635:27;;;;34507:163;:::o;5799:132::-;5857:7;5884:39;5888:1;5891;5884:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5877:46;;5799:132;;;;:::o;3490:181::-;3548:7;3568:9;3584:1;3580;:5;;;;:::i;:::-;3568:17;;3609:1;3604;:6;;3596:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3662:1;3655:8;;;3490:181;;;;:::o;33303:419::-;33362:7;33371;33380;33389;33398;33407;33428:23;33453:12;33467:18;33489:20;33501:7;33489:11;:20::i;:::-;33427:82;;;;;;33521:15;33538:23;33563:12;33579:50;33591:7;33600:4;33606:10;33618;:8;:10::i;:::-;33579:11;:50::i;:::-;33520:109;;;;;;33648:7;33657:15;33674:4;33680:15;33697:4;33703:10;33640:74;;;;;;;;;;;;;;;;;;33303:419;;;;;;;:::o;3956:136::-;4014:7;4041:43;4045:1;4048;4041:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4034:50;;3956:136;;;;:::o;38143:984::-;27330:4;27311:16;;:23;;;;;;;;;;;;;;;;;;38279:12:::1;38294:27;38319:1;38294:20;:24;;:27;;;;:::i;:::-;38279:42;;38332:17;38352:30;38377:4;38352:20;:24;;:30;;;;:::i;:::-;38332:50;;38660:22;38685:21;38660:46;;38751:22;38768:4;38751:16;:22::i;:::-;38904:18;38925:41;38951:14;38925:21;:25;;:41;;;;:::i;:::-;38904:62;;39016:35;39029:9;39040:10;39016:12;:35::i;:::-;39076:43;39091:4;39097:10;39109:9;39076:43;;;;;;;;:::i;:::-;;;;;;;;38217:910;;;;27376:5:::0;27357:16;;:24;;;;;;;;;;;;;;;;;;38143:984;:::o;40891:1181::-;40993:18;:26;41012:6;40993:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41023:18;:29;41042:9;41023:29;;;;;;;;;;;;;;;;;;;;;;;;;40993:59;40990:332;;;41079:14;:12;:14::i;:::-;40990:332;;;41162:13;;;;;;;;;;;41149:26;;:9;:26;;;41146:165;;;41223:15;;41204;:34;;41196:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41268:27;41280:6;41288;41268:11;:27::i;:::-;41146:165;40990:332;41338:11;:19;41350:6;41338:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41362:11;:22;41374:9;41362:22;;;;;;;;;;;;;;;;;;;;;;;;;41361:23;41338:46;41334:597;;;41401:48;41423:6;41431:9;41442:6;41401:21;:48::i;:::-;41334:597;;;41472:11;:19;41484:6;41472:19;;;;;;;;;;;;;;;;;;;;;;;;;41471:20;:46;;;;;41495:11;:22;41507:9;41495:22;;;;;;;;;;;;;;;;;;;;;;;;;41471:46;41467:464;;;41534:46;41554:6;41562:9;41573:6;41534:19;:46::i;:::-;41467:464;;;41603:11;:19;41615:6;41603:19;;;;;;;;;;;;;;;;;;;;;;;;;41602:20;:47;;;;;41627:11;:22;41639:9;41627:22;;;;;;;;;;;;;;;;;;;;;;;;;41626:23;41602:47;41598:333;;;41666:44;41684:6;41692:9;41703:6;41666:17;:44::i;:::-;41598:333;;;41732:11;:19;41744:6;41732:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41755:11;:22;41767:9;41755:22;;;;;;;;;;;;;;;;;;;;;;;;;41732:45;41728:203;;;41794:48;41816:6;41824:9;41835:6;41794:21;:48::i;:::-;41728:203;;;41875:44;41893:6;41901:9;41912:6;41875:17;:44::i;:::-;41728:203;41598:333;41467:464;41334:597;41953:18;:26;41972:6;41953:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41983:18;:29;42002:9;41983:29;;;;;;;;;;;;;;;;;;;;;;;;;41953:59;41950:115;;;42038:15;:13;:15::i;:::-;41950:115;40891:1181;;;:::o;34680:561::-;34730:7;34739;34759:15;34777:7;;34759:25;;34795:15;34813:7;;34795:25;;34842:9;34837:289;34861:9;:16;;;;34857:1;:20;34837:289;;;34927:7;34903;:21;34911:9;34921:1;34911:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34903:21;;;;;;;;;;;;;;;;:31;:66;;;;34962:7;34938;:21;34946:9;34956:1;34946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34938:21;;;;;;;;;;;;;;;;:31;34903:66;34899:97;;;34979:7;;34988;;34971:25;;;;;;;;;34899:97;35021:34;35033:7;:21;35041:9;35051:1;35041:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35033:21;;;;;;;;;;;;;;;;35021:7;:11;;:34;;;;:::i;:::-;35011:44;;35080:34;35092:7;:21;35100:9;35110:1;35100:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35092:21;;;;;;;;;;;;;;;;35080:7;:11;;:34;;;;:::i;:::-;35070:44;;34879:3;;;;;:::i;:::-;;;;34837:289;;;;35150:20;35162:7;;35150;;:11;;:20;;;;:::i;:::-;35140:7;:30;35136:61;;;35180:7;;35189;;35172:25;;;;;;;;35136:61;35216:7;35225;35208:25;;;;;;34680:561;;;:::o;6429:278::-;6515:7;6547:1;6543;:5;6550:12;6535:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6574:9;6590:1;6586;:5;;;;:::i;:::-;6574:17;;6698:1;6691:8;;;6429:278;;;;;:::o;33730:330::-;33790:7;33799;33808;33828:12;33843:24;33859:7;33843:15;:24::i;:::-;33828:39;;33878:18;33899:30;33921:7;33899:21;:30::i;:::-;33878:51;;33940:23;33966:33;33988:10;33966:17;33978:4;33966:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33940:59;;34018:15;34035:4;34041:10;34010:42;;;;;;;;;33730:330;;;;;:::o;34070:429::-;34185:7;34194;34203;34223:15;34241:24;34253:11;34241:7;:11;;:24;;;;:::i;:::-;34223:42;;34276:12;34291:21;34300:11;34291:4;:8;;:21;;;;:::i;:::-;34276:36;;34323:18;34344:27;34359:11;34344:10;:14;;:27;;;;:::i;:::-;34323:48;;34382:23;34408:33;34430:10;34408:17;34420:4;34408:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34382:59;;34460:7;34469:15;34486:4;34452:39;;;;;;;;;;34070:429;;;;;;;;:::o;39135:589::-;39261:21;39299:1;39285:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39261:40;;39330:4;39312;39317:1;39312:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39356:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39346:4;39351:1;39346:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39391:62;39408:4;39423:15;;;;;;;;;;;39441:11;39391:8;:62::i;:::-;39492:15;;;;;;;;;;;:66;;;39573:11;39599:1;39643:4;39670;39690:15;39492:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39190:534;39135:589;:::o;39732:513::-;39880:62;39897:4;39912:15;;;;;;;;;;;39930:11;39880:8;:62::i;:::-;39985:15;;;;;;;;;;;:31;;;40024:9;40057:4;40077:11;40103:1;40146;40189:7;:5;:7::i;:::-;40211:15;39985:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39732:513;;:::o;35967:324::-;36024:1;36013:7;;:12;:34;;;;;36046:1;36029:13;;:18;36013:34;:49;;;;;36061:1;36051:8;;:11;36013:49;36010:61;;;36064:7;;36010:61;36108:7;;36090:15;:25;;;;36150:13;;36126:21;:37;;;;36193:8;;36174:16;:27;;;;36231:1;36221:7;:11;;;;36259:1;36243:13;:17;;;;36282:1;36271:8;:12;;;;35967:324;:::o;40253:463::-;40323:14;40340:8;:16;40349:6;40340:16;;;;;;;;;;;;;;;40323:33;;40407:6;40389:15;:24;;;;:::i;:::-;40370:1;:15;;;:43;40367:258;;40450:17;40460:6;40450:9;:17::i;:::-;40430:1;:17;;:37;;;;40496:6;40482:1;:11;;:20;;;;40535:15;40517:1;:15;;:33;;;;40367:258;;;40607:6;40592:1;:11;;;:21;;;;;;;:::i;:::-;;;;;;;;40367:258;40678:2;40658:1;:17;;;:22;;;;:::i;:::-;40643:1;:11;;;:37;;40635:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40312:404;40253:463;;:::o;43929:565::-;44032:15;44049:23;44074:12;44088:23;44113:12;44127:18;44149:19;44160:7;44149:10;:19::i;:::-;44031:137;;;;;;;;;;;;44197:28;44217:7;44197;:15;44205:6;44197:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44179:7;:15;44187:6;44179:15;;;;;;;;;;;;;;;:46;;;;44254:28;44274:7;44254;:15;44262:6;44254:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44236:7;:15;44244:6;44236:15;;;;;;;;;;;;;;;:46;;;;44314:39;44337:15;44314:7;:18;44322:9;44314:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44293:7;:18;44301:9;44293:18;;;;;;;;;;;;;;;:60;;;;44366:26;44381:10;44366:14;:26::i;:::-;44403:23;44415:4;44421;44403:11;:23::i;:::-;44459:9;44442:44;;44451:6;44442:44;;;44470:15;44442:44;;;;;;:::i;:::-;;;;;;;;44020:474;;;;;;43929:565;;;:::o;43334:585::-;43435:15;43452:23;43477:12;43491:23;43516:12;43530:18;43552:19;43563:7;43552:10;:19::i;:::-;43434:137;;;;;;;;;;;;43600:28;43620:7;43600;:15;43608:6;43600:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43582:7;:15;43590:6;43582:15;;;;;;;;;;;;;;;:46;;;;43660:39;43683:15;43660:7;:18;43668:9;43660:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43639:7;:18;43647:9;43639:18;;;;;;;;;;;;;;;:60;;;;43731:39;43754:15;43731:7;:18;43739:9;43731:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43710:7;:18;43718:9;43710:18;;;;;;;;;;;;;;;:60;;;;43791:26;43806:10;43791:14;:26::i;:::-;43828:23;43840:4;43846;43828:11;:23::i;:::-;43884:9;43867:44;;43876:6;43867:44;;;43895:15;43867:44;;;;;;:::i;:::-;;;;;;;;43423:496;;;;;;43334:585;;;:::o;42084:614::-;42188:15;42205:23;42230:12;42244:23;42269:12;42283:18;42305:19;42316:7;42305:10;:19::i;:::-;42187:137;;;;;;;;;;;;42372:59;42381:6;42389:15;42406;42423:7;42372:8;:59::i;:::-;42335:96;;;;;;;;42460:28;42480:7;42460;:15;42468:6;42460:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42442:7;:15;42450:6;42442:15;;;;;;;;;;;;;;;:46;;;;42520:39;42543:15;42520:7;:18;42528:9;42520:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42499:7;:18;42507:9;42499:18;;;;;;;;;;;;;;;:60;;;;42570:26;42585:10;42570:14;:26::i;:::-;42607:23;42619:4;42625;42607:11;:23::i;:::-;42663:9;42646:44;;42655:6;42646:44;;;42674:15;42646:44;;;;;;:::i;:::-;;;;;;;;42176:522;;;;;;42084:614;;;:::o;32392:642::-;32495:15;32512:23;32537:12;32551:23;32576:12;32590:18;32612:19;32623:7;32612:10;:19::i;:::-;32494:137;;;;;;;;;;;;32660:28;32680:7;32660;:15;32668:6;32660:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32642:7;:15;32650:6;32642:15;;;;;;;;;;;;;;;:46;;;;32717:28;32737:7;32717;:15;32725:6;32717:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32699:7;:15;32707:6;32699:15;;;;;;;;;;;;;;;:46;;;;32777:39;32800:15;32777:7;:18;32785:9;32777:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32756:7;:18;32764:9;32756:18;;;;;;;;;;;;;;;:60;;;;32848:39;32871:15;32848:7;:18;32856:9;32848:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32827:7;:18;32835:9;32827:18;;;;;;;;;;;;;;;:60;;;;32906:26;32921:10;32906:14;:26::i;:::-;32943:23;32955:4;32961;32943:11;:23::i;:::-;32999:9;32982:44;;32991:6;32982:44;;;33010:15;32982:44;;;;;;:::i;:::-;;;;;;;;32483:551;;;;;;32392:642;;;:::o;36304:160::-;36357:15;;36347:7;:25;;;;36398:21;;36382:13;:37;;;;36440:16;;36429:8;:27;;;;36304:160::o;35622:154::-;35686:7;35713:55;35752:5;35713:20;35725:7;;35713;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35706:62;;35622:154;;;:::o;35786:166::-;35856:7;35883:61;35928:5;35883:26;35895:13;;35883:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35876:68;;35786:166;;;:::o;4850:471::-;4908:7;5158:1;5153;:6;5149:47;;;5183:1;5176:8;;;;5149:47;5208:9;5224:1;5220;:5;;;;:::i;:::-;5208:17;;5253:1;5248;5244;:5;;;;:::i;:::-;:10;5236:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5312:1;5305:8;;;4850:471;;;;;:::o;35254:355::-;35317:19;35340:10;:8;:10::i;:::-;35317:33;;35361:18;35382:27;35397:11;35382:10;:14;;:27;;;;:::i;:::-;35361:48;;35445:38;35472:10;35445:7;:22;35461:4;35445:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35420:7;:22;35436:4;35420:22;;;;;;;;;;;;;;;:63;;;;35497:11;:26;35517:4;35497:26;;;;;;;;;;;;;;;;;;;;;;;;;35494:107;;;35563:38;35590:10;35563:7;:22;35579:4;35563:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35538:7;:22;35554:4;35538:22;;;;;;;;;;;;;;;:63;;;;35494:107;35306:303;;35254:355;:::o;33146:147::-;33224:17;33236:4;33224:7;;:11;;:17;;;;:::i;:::-;33214:7;:27;;;;33265:20;33280:4;33265:10;;:14;;:20;;;;:::i;:::-;33252:10;:33;;;;33146:147;;:::o;42710:609::-;42833:7;42842;42880:1;42870:8;;:11;42867:62;;;42893:15;42910;42886:40;;;;;;42867:62;42939:13;42955:30;42976:8;;42955:16;42967:3;42955:7;:11;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;42939:46;;42996:13;43012:21;43022:10;:8;:10::i;:::-;43012:5;:9;;:21;;;;:::i;:::-;42996:37;;43062:26;43082:5;43062:15;:19;;:26;;;;:::i;:::-;43044:44;;43117:26;43137:5;43117:15;:19;;:26;;;;:::i;:::-;43099:44;;43177:31;43202:5;43177:7;:20;43185:11;;;;;;;;;;;43177:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;43154:7;:20;43162:11;;;;;;;;;;;43154:20;;;;;;;;;;;;;;;:54;;;;43241:11;;;;;;;;;;;43224:36;;43233:6;43224:36;;;43254:5;43224:36;;;;;;:::i;:::-;;;;;;;;43278:15;43295;43271:40;;;;;;42710:609;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:116::-;5871:21;5886:5;5871:21;:::i;:::-;5864:5;5861:32;5851:60;;5907:1;5904;5897:12;5851:60;5801:116;:::o;5923:133::-;5966:5;6004:6;5991:20;5982:29;;6020:30;6044:5;6020:30;:::i;:::-;5923:133;;;;:::o;6062:468::-;6127:6;6135;6184:2;6172:9;6163:7;6159:23;6155:32;6152:119;;;6190:79;;:::i;:::-;6152:119;6310:1;6335:53;6380:7;6371:6;6360:9;6356:22;6335:53;:::i;:::-;6325:63;;6281:117;6437:2;6463:50;6505:7;6496:6;6485:9;6481:22;6463:50;:::i;:::-;6453:60;;6408:115;6062:468;;;;;:::o;6536:329::-;6595:6;6644:2;6632:9;6623:7;6619:23;6615:32;6612:119;;;6650:79;;:::i;:::-;6612:119;6770:1;6795:53;6840:7;6831:6;6820:9;6816:22;6795:53;:::i;:::-;6785:63;;6741:117;6536:329;;;;:::o;6871:86::-;6906:7;6946:4;6939:5;6935:16;6924:27;;6871:86;;;:::o;6963:112::-;7046:22;7062:5;7046:22;:::i;:::-;7041:3;7034:35;6963:112;;:::o;7081:214::-;7170:4;7208:2;7197:9;7193:18;7185:26;;7221:67;7285:1;7274:9;7270:17;7261:6;7221:67;:::i;:::-;7081:214;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:468::-;7701:6;7709;7758:2;7746:9;7737:7;7733:23;7729:32;7726:119;;;7764:79;;:::i;:::-;7726:119;7884:1;7909:53;7954:7;7945:6;7934:9;7930:22;7909:53;:::i;:::-;7899:63;;7855:117;8011:2;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7982:115;7636:468;;;;;:::o;8110:323::-;8166:6;8215:2;8203:9;8194:7;8190:23;8186:32;8183:119;;;8221:79;;:::i;:::-;8183:119;8341:1;8366:50;8408:7;8399:6;8388:9;8384:22;8366:50;:::i;:::-;8356:60;;8312:114;8110:323;;;;:::o;8439:619::-;8516:6;8524;8532;8581:2;8569:9;8560:7;8556:23;8552:32;8549:119;;;8587:79;;:::i;:::-;8549:119;8707:1;8732:53;8777:7;8768:6;8757:9;8753:22;8732:53;:::i;:::-;8722:63;;8678:117;8834:2;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8805:118;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8439:619;;;;;:::o;9064:474::-;9132:6;9140;9189:2;9177:9;9168:7;9164:23;9160:32;9157:119;;;9195:79;;:::i;:::-;9157:119;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9064:474;;;;;:::o;9544:180::-;9592:77;9589:1;9582:88;9689:4;9686:1;9679:15;9713:4;9710:1;9703:15;9730:320;9774:6;9811:1;9805:4;9801:12;9791:22;;9858:1;9852:4;9848:12;9879:18;9869:81;;9935:4;9927:6;9923:17;9913:27;;9869:81;9997:2;9989:6;9986:14;9966:18;9963:38;9960:84;;;10016:18;;:::i;:::-;9960:84;9781:269;9730:320;;;:::o;10056:159::-;10196:11;10192:1;10184:6;10180:14;10173:35;10056:159;:::o;10221:365::-;10363:3;10384:66;10448:1;10443:3;10384:66;:::i;:::-;10377:73;;10459:93;10548:3;10459:93;:::i;:::-;10577:2;10572:3;10568:12;10561:19;;10221:365;;;:::o;10592:419::-;10758:4;10796:2;10785:9;10781:18;10773:26;;10845:9;10839:4;10835:20;10831:1;10820:9;10816:17;10809:47;10873:131;10999:4;10873:131;:::i;:::-;10865:139;;10592:419;;;:::o;11017:170::-;11157:22;11153:1;11145:6;11141:14;11134:46;11017:170;:::o;11193:366::-;11335:3;11356:67;11420:2;11415:3;11356:67;:::i;:::-;11349:74;;11432:93;11521:3;11432:93;:::i;:::-;11550:2;11545:3;11541:12;11534:19;;11193:366;;;:::o;11565:419::-;11731:4;11769:2;11758:9;11754:18;11746:26;;11818:9;11812:4;11808:20;11804:1;11793:9;11789:17;11782:47;11846:131;11972:4;11846:131;:::i;:::-;11838:139;;11565:419;;;:::o;11990:162::-;12130:14;12126:1;12118:6;12114:14;12107:38;11990:162;:::o;12158:366::-;12300:3;12321:67;12385:2;12380:3;12321:67;:::i;:::-;12314:74;;12397:93;12486:3;12397:93;:::i;:::-;12515:2;12510:3;12506:12;12499:19;;12158:366;;;:::o;12530:419::-;12696:4;12734:2;12723:9;12719:18;12711:26;;12783:9;12777:4;12773:20;12769:1;12758:9;12754:17;12747:47;12811:131;12937:4;12811:131;:::i;:::-;12803:139;;12530:419;;;:::o;12955:180::-;13003:77;13000:1;12993:88;13100:4;13097:1;13090:15;13124:4;13121:1;13114:15;13141:180;13189:77;13186:1;13179:88;13286:4;13283:1;13276:15;13310:4;13307:1;13300:15;13327:191;13367:4;13387:20;13405:1;13387:20;:::i;:::-;13382:25;;13421:20;13439:1;13421:20;:::i;:::-;13416:25;;13460:1;13457;13454:8;13451:34;;;13465:18;;:::i;:::-;13451:34;13510:1;13507;13503:9;13495:17;;13327:191;;;;:::o;13524:180::-;13572:77;13569:1;13562:88;13669:4;13666:1;13659:15;13693:4;13690:1;13683:15;13710:233;13749:3;13772:24;13790:5;13772:24;:::i;:::-;13763:33;;13818:66;13811:5;13808:77;13805:103;;;13888:18;;:::i;:::-;13805:103;13935:1;13928:5;13924:13;13917:20;;13710:233;;;:::o;13949:158::-;14089:10;14085:1;14077:6;14073:14;14066:34;13949:158;:::o;14113:365::-;14255:3;14276:66;14340:1;14335:3;14276:66;:::i;:::-;14269:73;;14351:93;14440:3;14351:93;:::i;:::-;14469:2;14464:3;14460:12;14453:19;;14113:365;;;:::o;14484:419::-;14650:4;14688:2;14677:9;14673:18;14665:26;;14737:9;14731:4;14727:20;14723:1;14712:9;14708:17;14701:47;14765:131;14891:4;14765:131;:::i;:::-;14757:139;;14484:419;;;:::o;14909:143::-;14966:5;14997:6;14991:13;14982:22;;15013:33;15040:5;15013:33;:::i;:::-;14909:143;;;;:::o;15058:351::-;15128:6;15177:2;15165:9;15156:7;15152:23;15148:32;15145:119;;;15183:79;;:::i;:::-;15145:119;15303:1;15328:64;15384:7;15375:6;15364:9;15360:22;15328:64;:::i;:::-;15318:74;;15274:128;15058:351;;;;:::o;15415:332::-;15536:4;15574:2;15563:9;15559:18;15551:26;;15587:71;15655:1;15644:9;15640:17;15631:6;15587:71;:::i;:::-;15668:72;15736:2;15725:9;15721:18;15712:6;15668:72;:::i;:::-;15415:332;;;;;:::o;15753:165::-;15893:17;15889:1;15881:6;15877:14;15870:41;15753:165;:::o;15924:366::-;16066:3;16087:67;16151:2;16146:3;16087:67;:::i;:::-;16080:74;;16163:93;16252:3;16163:93;:::i;:::-;16281:2;16276:3;16272:12;16265:19;;15924:366;;;:::o;16296:419::-;16462:4;16500:2;16489:9;16485:18;16477:26;;16549:9;16543:4;16539:20;16535:1;16524:9;16520:17;16513:47;16577:131;16703:4;16577:131;:::i;:::-;16569:139;;16296:419;;;:::o;16721:158::-;16861:10;16857:1;16849:6;16845:14;16838:34;16721:158;:::o;16885:365::-;17027:3;17048:66;17112:1;17107:3;17048:66;:::i;:::-;17041:73;;17123:93;17212:3;17123:93;:::i;:::-;17241:2;17236:3;17232:12;17225:19;;16885:365;;;:::o;17256:419::-;17422:4;17460:2;17449:9;17445:18;17437:26;;17509:9;17503:4;17499:20;17495:1;17484:9;17480:17;17473:47;17537:131;17663:4;17537:131;:::i;:::-;17529:139;;17256:419;;;:::o;17681:159::-;17821:11;17817:1;17809:6;17805:14;17798:35;17681:159;:::o;17846:365::-;17988:3;18009:66;18073:1;18068:3;18009:66;:::i;:::-;18002:73;;18084:93;18173:3;18084:93;:::i;:::-;18202:2;18197:3;18193:12;18186:19;;17846:365;;;:::o;18217:419::-;18383:4;18421:2;18410:9;18406:18;18398:26;;18470:9;18464:4;18460:20;18456:1;18445:9;18441:17;18434:47;18498:131;18624:4;18498:131;:::i;:::-;18490:139;;18217:419;;;:::o;18642:168::-;18782:20;18778:1;18770:6;18766:14;18759:44;18642:168;:::o;18816:366::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:419::-;19354:4;19392:2;19381:9;19377:18;19369:26;;19441:9;19435:4;19431:20;19427:1;19416:9;19412:17;19405:47;19469:131;19595:4;19469:131;:::i;:::-;19461:139;;19188:419;;;:::o;19613:305::-;19653:3;19672:20;19690:1;19672:20;:::i;:::-;19667:25;;19706:20;19724:1;19706:20;:::i;:::-;19701:25;;19860:1;19792:66;19788:74;19785:1;19782:81;19779:107;;;19866:18;;:::i;:::-;19779:107;19910:1;19907;19903:9;19896:16;;19613:305;;;;:::o;19924:102::-;19966:8;20013:5;20010:1;20006:13;19985:34;;19924:102;;;:::o;20032:848::-;20093:5;20100:4;20124:6;20115:15;;20148:5;20139:14;;20162:712;20183:1;20173:8;20170:15;20162:712;;;20278:4;20273:3;20269:14;20263:4;20260:24;20257:50;;;20287:18;;:::i;:::-;20257:50;20337:1;20327:8;20323:16;20320:451;;;20752:4;20745:5;20741:16;20732:25;;20320:451;20802:4;20796;20792:15;20784:23;;20832:32;20855:8;20832:32;:::i;:::-;20820:44;;20162:712;;;20032:848;;;;;;;:::o;20886:1073::-;20940:5;21131:8;21121:40;;21152:1;21143:10;;21154:5;;21121:40;21180:4;21170:36;;21197:1;21188:10;;21199:5;;21170:36;21266:4;21314:1;21309:27;;;;21350:1;21345:191;;;;21259:277;;21309:27;21327:1;21318:10;;21329:5;;;21345:191;21390:3;21380:8;21377:17;21374:43;;;21397:18;;:::i;:::-;21374:43;21446:8;21443:1;21439:16;21430:25;;21481:3;21474:5;21471:14;21468:40;;;21488:18;;:::i;:::-;21468:40;21521:5;;;21259:277;;21645:2;21635:8;21632:16;21626:3;21620:4;21617:13;21613:36;21595:2;21585:8;21582:16;21577:2;21571:4;21568:12;21564:35;21548:111;21545:246;;;21701:8;21695:4;21691:19;21682:28;;21736:3;21729:5;21726:14;21723:40;;;21743:18;;:::i;:::-;21723:40;21776:5;;21545:246;21816:42;21854:3;21844:8;21838:4;21835:1;21816:42;:::i;:::-;21801:57;;;;21890:4;21885:3;21881:14;21874:5;21871:25;21868:51;;;21899:18;;:::i;:::-;21868:51;21948:4;21941:5;21937:16;21928:25;;20886:1073;;;;;;:::o;21965:281::-;22023:5;22047:23;22065:4;22047:23;:::i;:::-;22039:31;;22091:25;22107:8;22091:25;:::i;:::-;22079:37;;22135:104;22172:66;22162:8;22156:4;22135:104;:::i;:::-;22126:113;;21965:281;;;;:::o;22252:348::-;22292:7;22315:20;22333:1;22315:20;:::i;:::-;22310:25;;22349:20;22367:1;22349:20;:::i;:::-;22344:25;;22537:1;22469:66;22465:74;22462:1;22459:81;22454:1;22447:9;22440:17;22436:105;22433:131;;;22544:18;;:::i;:::-;22433:131;22592:1;22589;22585:9;22574:20;;22252:348;;;;:::o;22606:169::-;22746:21;22742:1;22734:6;22730:14;22723:45;22606:169;:::o;22781:366::-;22923:3;22944:67;23008:2;23003:3;22944:67;:::i;:::-;22937:74;;23020:93;23109:3;23020:93;:::i;:::-;23138:2;23133:3;23129:12;23122:19;;22781:366;;;:::o;23153:419::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23153:419;;;:::o;23578:223::-;23718:34;23714:1;23706:6;23702:14;23695:58;23787:6;23782:2;23774:6;23770:15;23763:31;23578:223;:::o;23807:366::-;23949:3;23970:67;24034:2;24029:3;23970:67;:::i;:::-;23963:74;;24046:93;24135:3;24046:93;:::i;:::-;24164:2;24159:3;24155:12;24148:19;;23807:366;;;:::o;24179:419::-;24345:4;24383:2;24372:9;24368:18;24360:26;;24432:9;24426:4;24422:20;24418:1;24407:9;24403:17;24396:47;24460:131;24586:4;24460:131;:::i;:::-;24452:139;;24179:419;;;:::o;24604:221::-;24744:34;24740:1;24732:6;24728:14;24721:58;24813:4;24808:2;24800:6;24796:15;24789:29;24604:221;:::o;24831:366::-;24973:3;24994:67;25058:2;25053:3;24994:67;:::i;:::-;24987:74;;25070:93;25159:3;25070:93;:::i;:::-;25188:2;25183:3;25179:12;25172:19;;24831:366;;;:::o;25203:419::-;25369:4;25407:2;25396:9;25392:18;25384:26;;25456:9;25450:4;25446:20;25442:1;25431:9;25427:17;25420:47;25484:131;25610:4;25484:131;:::i;:::-;25476:139;;25203:419;;;:::o;25628:161::-;25768:13;25764:1;25756:6;25752:14;25745:37;25628:161;:::o;25795:366::-;25937:3;25958:67;26022:2;26017:3;25958:67;:::i;:::-;25951:74;;26034:93;26123:3;26034:93;:::i;:::-;26152:2;26147:3;26143:12;26136:19;;25795:366;;;:::o;26167:419::-;26333:4;26371:2;26360:9;26356:18;26348:26;;26420:9;26414:4;26410:20;26406:1;26395:9;26391:17;26384:47;26448:131;26574:4;26448:131;:::i;:::-;26440:139;;26167:419;;;:::o;26592:167::-;26732:19;26728:1;26720:6;26716:14;26709:43;26592:167;:::o;26765:366::-;26907:3;26928:67;26992:2;26987:3;26928:67;:::i;:::-;26921:74;;27004:93;27093:3;27004:93;:::i;:::-;27122:2;27117:3;27113:12;27106:19;;26765:366;;;:::o;27137:419::-;27303:4;27341:2;27330:9;27326:18;27318:26;;27390:9;27384:4;27380:20;27376:1;27365:9;27361:17;27354:47;27418:131;27544:4;27418:131;:::i;:::-;27410:139;;27137:419;;;:::o;27562:177::-;27702:29;27698:1;27690:6;27686:14;27679:53;27562:177;:::o;27745:366::-;27887:3;27908:67;27972:2;27967:3;27908:67;:::i;:::-;27901:74;;27984:93;28073:3;27984:93;:::i;:::-;28102:2;28097:3;28093:12;28086:19;;27745:366;;;:::o;28117:419::-;28283:4;28321:2;28310:9;28306:18;28298:26;;28370:9;28364:4;28360:20;28356:1;28345:9;28341:17;28334:47;28398:131;28524:4;28398:131;:::i;:::-;28390:139;;28117:419;;;:::o;28542:442::-;28691:4;28729:2;28718:9;28714:18;28706:26;;28742:71;28810:1;28799:9;28795:17;28786:6;28742:71;:::i;:::-;28823:72;28891:2;28880:9;28876:18;28867:6;28823:72;:::i;:::-;28905;28973:2;28962:9;28958:18;28949:6;28905:72;:::i;:::-;28542:442;;;;;;:::o;28990:156::-;29130:8;29126:1;29118:6;29114:14;29107:32;28990:156;:::o;29152:365::-;29294:3;29315:66;29379:1;29374:3;29315:66;:::i;:::-;29308:73;;29390:93;29479:3;29390:93;:::i;:::-;29508:2;29503:3;29499:12;29492:19;;29152:365;;;:::o;29523:419::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29776:9;29770:4;29766:20;29762:1;29751:9;29747:17;29740:47;29804:131;29930:4;29804:131;:::i;:::-;29796:139;;29523:419;;;:::o;29948:180::-;29996:77;29993:1;29986:88;30093:4;30090:1;30083:15;30117:4;30114:1;30107:15;30134:185;30174:1;30191:20;30209:1;30191:20;:::i;:::-;30186:25;;30225:20;30243:1;30225:20;:::i;:::-;30220:25;;30264:1;30254:35;;30269:18;;:::i;:::-;30254:35;30311:1;30308;30304:9;30299:14;;30134:185;;;;:::o;30325:180::-;30373:77;30370:1;30363:88;30470:4;30467:1;30460:15;30494:4;30491:1;30484:15;30511:85;30556:7;30585:5;30574:16;;30511:85;;;:::o;30602:158::-;30660:9;30693:61;30711:42;30720:32;30746:5;30720:32;:::i;:::-;30711:42;:::i;:::-;30693:61;:::i;:::-;30680:74;;30602:158;;;:::o;30766:147::-;30861:45;30900:5;30861:45;:::i;:::-;30856:3;30849:58;30766:147;;:::o;30919:114::-;30986:6;31020:5;31014:12;31004:22;;30919:114;;;:::o;31039:184::-;31138:11;31172:6;31167:3;31160:19;31212:4;31207:3;31203:14;31188:29;;31039:184;;;;:::o;31229:132::-;31296:4;31319:3;31311:11;;31349:4;31344:3;31340:14;31332:22;;31229:132;;;:::o;31367:108::-;31444:24;31462:5;31444:24;:::i;:::-;31439:3;31432:37;31367:108;;:::o;31481:179::-;31550:10;31571:46;31613:3;31605:6;31571:46;:::i;:::-;31649:4;31644:3;31640:14;31626:28;;31481:179;;;;:::o;31666:113::-;31736:4;31768;31763:3;31759:14;31751:22;;31666:113;;;:::o;31815:732::-;31934:3;31963:54;32011:5;31963:54;:::i;:::-;32033:86;32112:6;32107:3;32033:86;:::i;:::-;32026:93;;32143:56;32193:5;32143:56;:::i;:::-;32222:7;32253:1;32238:284;32263:6;32260:1;32257:13;32238:284;;;32339:6;32333:13;32366:63;32425:3;32410:13;32366:63;:::i;:::-;32359:70;;32452:60;32505:6;32452:60;:::i;:::-;32442:70;;32298:224;32285:1;32282;32278:9;32273:14;;32238:284;;;32242:14;32538:3;32531:10;;31939:608;;;31815:732;;;;:::o;32553:831::-;32816:4;32854:3;32843:9;32839:19;32831:27;;32868:71;32936:1;32925:9;32921:17;32912:6;32868:71;:::i;:::-;32949:80;33025:2;33014:9;33010:18;33001:6;32949:80;:::i;:::-;33076:9;33070:4;33066:20;33061:2;33050:9;33046:18;33039:48;33104:108;33207:4;33198:6;33104:108;:::i;:::-;33096:116;;33222:72;33290:2;33279:9;33275:18;33266:6;33222:72;:::i;:::-;33304:73;33372:3;33361:9;33357:19;33348:6;33304:73;:::i;:::-;32553:831;;;;;;;;:::o;33390:807::-;33639:4;33677:3;33666:9;33662:19;33654:27;;33691:71;33759:1;33748:9;33744:17;33735:6;33691:71;:::i;:::-;33772:72;33840:2;33829:9;33825:18;33816:6;33772:72;:::i;:::-;33854:80;33930:2;33919:9;33915:18;33906:6;33854:80;:::i;:::-;33944;34020:2;34009:9;34005:18;33996:6;33944:80;:::i;:::-;34034:73;34102:3;34091:9;34087:19;34078:6;34034:73;:::i;:::-;34117;34185:3;34174:9;34170:19;34161:6;34117:73;:::i;:::-;33390:807;;;;;;;;;:::o;34203:143::-;34260:5;34291:6;34285:13;34276:22;;34307:33;34334:5;34307:33;:::i;:::-;34203:143;;;;:::o;34352:663::-;34440:6;34448;34456;34505:2;34493:9;34484:7;34480:23;34476:32;34473:119;;;34511:79;;:::i;:::-;34473:119;34631:1;34656:64;34712:7;34703:6;34692:9;34688:22;34656:64;:::i;:::-;34646:74;;34602:128;34769:2;34795:64;34851:7;34842:6;34831:9;34827:22;34795:64;:::i;:::-;34785:74;;34740:129;34908:2;34934:64;34990:7;34981:6;34970:9;34966:22;34934:64;:::i;:::-;34924:74;;34879:129;34352:663;;;;;:::o;35021:171::-;35161:23;35157:1;35149:6;35145:14;35138:47;35021:171;:::o;35198:366::-;35340:3;35361:67;35425:2;35420:3;35361:67;:::i;:::-;35354:74;;35437:93;35526:3;35437:93;:::i;:::-;35555:2;35550:3;35546:12;35539:19;;35198:366;;;:::o;35570:419::-;35736:4;35774:2;35763:9;35759:18;35751:26;;35823:9;35817:4;35813:20;35809:1;35798:9;35794:17;35787:47;35851:131;35977:4;35851:131;:::i;:::-;35843:139;;35570:419;;;:::o;35995:220::-;36135:34;36131:1;36123:6;36119:14;36112:58;36204:3;36199:2;36191:6;36187:15;36180:28;35995:220;:::o;36221:366::-;36363:3;36384:67;36448:2;36443:3;36384:67;:::i;:::-;36377:74;;36460:93;36549:3;36460:93;:::i;:::-;36578:2;36573:3;36569:12;36562:19;;36221:366;;;:::o;36593:419::-;36759:4;36797:2;36786:9;36782:18;36774:26;;36846:9;36840:4;36836:20;36832:1;36821:9;36817:17;36810:47;36874:131;37000:4;36874:131;:::i;:::-;36866:139;;36593:419;;;:::o

Swarm Source

ipfs://fa2e793b1eae37be96a3cc63a6085342e53031a4bef0d21f298e1f1f9b6df930
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.