ETH Price: $2,484.94 (-1.76%)

Token

XPLOR (XPLOR)
 

Overview

Max Total Supply

387,000,000 XPLOR

Holders

117 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,120.765667249252849803 XPLOR

Value
$0.00
0xf864e43921d2c19f21756e1eb8f32ba9b92d6376
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

XPLOR token is a travel token with plans to integrate crypto into the travel world. Initially, XPLOR token will be used as a means of payment in XPLORSTAY(coming soon). XPLORSTAY will offer services similiar to AirBNB and offer payments in crypto.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XPLOR

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-05
*/

// SPDX-License-Identifier: Unlicensed

/**
   1% fee auto add to the liquidity pool when selling
   3% fee auto distribute to all holders
   1% fee auto converted to ETH and moved to marketing wallet
 */

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    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.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards 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).
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() external 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) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract XPLOR is Context, IERC20, Ownable, Pausable {
    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 pausedAddress;
    mapping (address => bool) private _isIncludedInFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    address private _marketingWalletAddress = 0xd30cf3dB66b04E5a9D0Cf4278245fb0354432dA5;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 387 * 10**6 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "XPLOR";
    string private constant _symbol = "XPLOR";
    uint8 private constant _decimals = 18;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _marketingFee = 1;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public _marketingFeeBalance;
    uint256 public _liquidityFeeBalance;
    uint256 private liquiditySellLimit = 1000 * 10**18;
    uint256 private marketingSellLimit = 1000 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool public _enableFee = false;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ExternalTokenTransfered(address externalAddress,address toAddress, uint amount);
    event EthFromContractTransferred(uint amount);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        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;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

    function totalSupply() external view override returns (uint256) {
        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) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) external onlyOwner {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner {
        _marketingFee = marketingFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        _liquidityFee = liquidityFee;
    }

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

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

    function setLiquidityFeeSellLimit(uint256 limit) external onlyOwner {
        liquiditySellLimit = limit;
    }

    function setMarketingFeeSellLimit(uint256 limit) external onlyOwner {
        marketingSellLimit = limit;
    }

    function enableFee(bool enableTax) external onlyOwner() {
        _enableFee = enableTax;
    }
    
    //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);
    }

        /**
     * @dev Pause `contract` - pause events.
     *
     * See {ERC20Pausable-_pause}.
     */
    function pauseContract() external virtual onlyOwner {
        _pause();
    }
    
    /**
     * @dev Pause `contract` - pause events.
     *
     * See {ERC20Pausable-_pause}.
     */
    function unPauseContract() external virtual onlyOwner {
        _unpause();
    }

    /**
     * @dev Pause `contract` - pause events.
     *
     * See {ERC20Pausable-_pause}.
     */
    function pauseAddress(address account) external virtual onlyOwner {
        pausedAddress[account] = true;
    }
    
    /**
     * @dev Pause `contract` - pause events.
     *
     * See {ERC20Pausable-_pause}.
     */
    function unPauseAddress(address account) external virtual onlyOwner {
        pausedAddress[account] = false;
    }

    /**
     * @dev Returns true if the address is paused, and false otherwise.
     */
    function isAddressPaused(address account) external view virtual returns (bool) {
        return pausedAddress[account];
    }

    function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner {
        require(_tokenContract != address(0), "Address cant be zero address");
        IERC20 tokenContract = IERC20(_tokenContract);
        tokenContract.transfer(msg.sender, _amount);
        emit ExternalTokenTransfered(_tokenContract,msg.sender, _amount);
    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function withdrawEthFromContract(uint256 amount) external onlyOwner {
        require(amount <= getBalance());
        address payable _owner = payable(owner());
        _owner.transfer(amount);
        emit EthFromContractTransferred(amount);
    }

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing);
        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(address sender, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        _liquidityFeeBalance += tLiquidity; 
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        emit Transfer(sender, address(this), tLiquidity);
    }
    
    function _takeMarketing(address sender, uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        _marketingFeeBalance += tMarketing;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
        emit Transfer(sender, address(this), tMarketing);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isIncludedInFee(address account) external view returns(bool) {
        return _isIncludedInFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(from, to, amount);

        uint256 senderBalance = balanceOf(from);
        require(senderBalance >= amount, "BlockchainX: transfer amount exceeds balance");
        
        //indicates if fee should be deducted from transfer
        bool takeFee = false;
        if(_enableFee && ((from == uniswapV2Pair || to == uniswapV2Pair) || (_isIncludedInFee[from] || _isIncludedInFee[to]))){
            _swapAndLiquify(from);
            takeFee = true;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _swapAndLiquify(address from) internal {
        if(from != uniswapV2Pair && (_marketingFeeBalance >= marketingSellLimit || _liquidityFeeBalance >= liquiditySellLimit)) {
            bool initialFeeState = _enableFee;
            // remove fee if initialFeeState was true
            if(initialFeeState) _enableFee = false;

            // 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.
            if (
                _liquidityFeeBalance >= liquiditySellLimit &&
                !inSwapAndLiquify &&
                swapAndLiquifyEnabled
            ) {
                //add liquidity
                uint256 tax = _liquidityFeeBalance;
                _liquidityFeeBalance = 0;
                swapAndLiquify(tax);
            }

            if (_marketingFeeBalance >= marketingSellLimit) transferToFeeWallet();

            // enable fee if initialFeeState was true
            if(initialFeeState) _enableFee = true;
        }
    }

    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, address(this)); // <- 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 transferToFeeWallet() internal {
        uint256 tax = _marketingFeeBalance;
        _marketingFeeBalance = 0;
        swapTokensForEth(tax, _marketingWalletAddress);
    }
    
    function swapTokensForEth(uint256 tokenAmount, address swapAddress) 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,
            swapAddress,
            block.timestamp
        );
    }

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _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);        
        if(tLiquidity > 0) _takeLiquidity(sender, tLiquidity);
        if(tMarketing > 0) _takeMarketing(sender, tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(amount > 0, "BEP20: amount must be greater than 0");
        require(!paused(), "ERC20Pausable: token transfer while contract paused");
        require(!pausedAddress[from], "ERC20Pausable: token transfer while from-address paused");
        require(!pausedAddress[to], "ERC20Pausable: token transfer while to-address paused");
    }

}

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":"amount","type":"uint256"}],"name":"EthFromContractTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"externalAddress","type":"address"},{"indexed":false,"internalType":"address","name":"toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExternalTokenTransfered","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":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_enableFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableTax","type":"bool"}],"name":"enableFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAddressPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isIncludedInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pauseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setLiquidityFeeSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMarketingFeeSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"unPauseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPauseContract","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEthFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273d30cf3db66b04e5a9d0cf4278245fb0354432da5600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b01401e70099fcb3a630000006009556009546000196200007b919062000628565b6000196200008a9190620005af565b600a556003600c55600c54600d556001600e55600e54600f556001601055601054601155683635c9adc5dea00000601455683635c9adc5dea000006015556000601660006101000a81548160ff0219169083151502179055506001601660026101000a81548160ff0219169083151502179055503480156200010b57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060146101000a81548160ff021916908315150217905550600a5460016000620001f8620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029657600080fd5b505afa158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000511565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033457600080fd5b505afa15801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f919062000511565b6040518363ffffffff1660e01b81526004016200038e92919062000565565b602060405180830381600087803b158015620003a957600080fd5b505af1158015620003be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e4919062000511565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505062000461620004d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004c2919062000592565b60405180910390a350620006dd565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000815190506200050b81620006c3565b92915050565b6000602082840312156200052a5762000529620006be565b5b60006200053a84828501620004fa565b91505092915050565b6200054e81620005ea565b82525050565b6200055f816200061e565b82525050565b60006040820190506200057c600083018562000543565b6200058b602083018462000543565b9392505050565b6000602082019050620005a9600083018462000554565b92915050565b6000620005bc826200061e565b9150620005c9836200061e565b925082821015620005df57620005de62000660565b5b828203905092915050565b6000620005f782620005fe565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000635826200061e565b915062000642836200061e565b9250826200065557620006546200068f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b620006ce81620005ea565b8114620006da57600080fd5b50565b60805160601c60a05160601c615e0b62000741600039600081816113cf0152818161292f015281816129840152612e6a015260008181610c61015281816141f5015281816142e50152818161430c015281816143a901526143d00152615e0b6000f3fe60806040526004361061028c5760003560e01c80636bc87c3a1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146109b3578063de85eac8146109f0578063e7b50a8e14610a1b578063ea2f0b3714610a44578063f2fde38b14610a6d578063fbac483714610a9657610293565b8063a9059cbb146108a7578063bac15203146108e4578063c49b9a80146108fb578063c4ff9cb714610924578063ca9f2ee214610961578063d2cd2fdf1461098a57610293565b80638ee88c53116101135780638ee88c5314610799578063906e9dd0146107c257806395d89b41146107eb5780639ab733e4146108165780639e281a9814610841578063a457c2d71461086a57610293565b80636bc87c3a1461068957806370a08231146106b4578063715018a6146106f157806377df472c1461070857806388f82020146107315780638da5cb5b1461076e57610293565b80633685d419116101fe578063457c194c116101b7578063457c194c1461058b57806349bd5a5e146105b45780634a74bb02146105df57806352390c021461060a57806355fbbad8146106335780635c975abb1461065e57610293565b80633685d4191461049157806339509351146104ba5780633b124fe7146104f7578063421672e314610522578063437823ec1461054b578063439766ce1461057457610293565b8063158b417211610250578063158b41721461037f5780631694505e146103a857806318160ddd146103d357806322976e0d146103fe57806323b872dd14610429578063313ce5671461046657610293565b8063061c82d01461029857806306fdde03146102c1578063095ea7b3146102ec57806312065fe01461032957806313114a9d1461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614d5e565b610ad3565b005b3480156102cd57600080fd5b506102d6610b59565b6040516102e3919061525b565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614cc4565b610b96565b6040516103209190615225565b60405180910390f35b34801561033557600080fd5b5061033e610bb4565b60405161034b919061549d565b60405180910390f35b34801561036057600080fd5b50610369610bbc565b604051610376919061549d565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190614d04565b610bc6565b005b3480156103b457600080fd5b506103bd610c5f565b6040516103ca9190615240565b60405180910390f35b3480156103df57600080fd5b506103e8610c83565b6040516103f5919061549d565b60405180910390f35b34801561040a57600080fd5b50610413610c8d565b604051610420919061549d565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190614c71565b610c93565b60405161045d9190615225565b60405180910390f35b34801561047257600080fd5b5061047b610d6c565b6040516104889190615549565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614bd7565b610d75565b005b3480156104c657600080fd5b506104e160048036038101906104dc9190614cc4565b6110ab565b6040516104ee9190615225565b60405180910390f35b34801561050357600080fd5b5061050c61115e565b604051610519919061549d565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614d5e565b611164565b005b34801561055757600080fd5b50610572600480360381019061056d9190614bd7565b6111ea565b005b34801561058057600080fd5b506105896112c1565b005b34801561059757600080fd5b506105b260048036038101906105ad9190614d5e565b611347565b005b3480156105c057600080fd5b506105c96113cd565b6040516105d69190615149565b60405180910390f35b3480156105eb57600080fd5b506105f46113f1565b6040516106019190615225565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614bd7565b611404565b005b34801561063f57600080fd5b5061064861169f565b6040516106559190615225565b60405180910390f35b34801561066a57600080fd5b506106736116b2565b6040516106809190615225565b60405180910390f35b34801561069557600080fd5b5061069e6116c8565b6040516106ab919061549d565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190614bd7565b6116ce565b6040516106e8919061549d565b60405180910390f35b3480156106fd57600080fd5b506107066117b9565b005b34801561071457600080fd5b5061072f600480360381019061072a9190614bd7565b6118f3565b005b34801561073d57600080fd5b5061075860048036038101906107539190614bd7565b6119ca565b6040516107659190615225565b60405180910390f35b34801561077a57600080fd5b50610783611a20565b6040516107909190615149565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb9190614d5e565b611a49565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190614bd7565b611acf565b005b3480156107f757600080fd5b50610800611b8f565b60405161080d919061525b565b60405180910390f35b34801561082257600080fd5b5061082b611bcc565b604051610838919061549d565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190614cc4565b611bd2565b005b34801561087657600080fd5b50610891600480360381019061088c9190614cc4565b611d91565b60405161089e9190615225565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190614cc4565b611e5e565b6040516108db9190615225565b60405180910390f35b3480156108f057600080fd5b506108f9611e7c565b005b34801561090757600080fd5b50610922600480360381019061091d9190614d04565b611f02565b005b34801561093057600080fd5b5061094b60048036038101906109469190614bd7565b611fd2565b6040516109589190615225565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614bd7565b612028565b005b34801561099657600080fd5b506109b160048036038101906109ac9190614d5e565b6120ff565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190614c31565b612185565b6040516109e7919061549d565b60405180910390f35b3480156109fc57600080fd5b50610a0561220c565b604051610a12919061549d565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190614d5e565b612212565b005b348015610a5057600080fd5b50610a6b6004803603810190610a669190614bd7565b612330565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614bd7565b612407565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190614bd7565b6125b0565b604051610aca9190615225565b60405180910390f35b610adb612606565b73ffffffffffffffffffffffffffffffffffffffff16610af9611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b46906153bd565b60405180910390fd5b80600c8190555050565b60606040518060400160405280600581526020017f58504c4f52000000000000000000000000000000000000000000000000000000815250905090565b6000610baa610ba3612606565b848461260e565b6001905092915050565b600047905090565b6000600b54905090565b610bce612606565b73ffffffffffffffffffffffffffffffffffffffff16610bec611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c39906153bd565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b600e5481565b6000610ca08484846127d9565b610d6184610cac612606565b610d5c85604051806060016040528060288152602001615d8960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d12612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa19092919063ffffffff16565b61260e565b600190509392505050565b60006012905090565b610d7d612606565b73ffffffffffffffffffffffffffffffffffffffff16610d9b611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906153bd565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061537d565b60405180910390fd5b60005b6007805490508110156110a7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610eb857610eb7615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110945760076001600780549050610f13919061569a565b81548110610f2457610f23615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610f6357610f62615874565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061105a57611059615845565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110a7565b808061109f9061579e565b915050610e80565b5050565b60006111546110b8612606565b8461114f85600360006110c9612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b61260e565b6001905092915050565b600c5481565b61116c612606565b73ffffffffffffffffffffffffffffffffffffffff1661118a611a20565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906153bd565b60405180910390fd5b8060158190555050565b6111f2612606565b73ffffffffffffffffffffffffffffffffffffffff16611210611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d906153bd565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6112c9612606565b73ffffffffffffffffffffffffffffffffffffffff166112e7611a20565b73ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906153bd565b60405180910390fd5b611345612b0c565b565b61134f612606565b73ffffffffffffffffffffffffffffffffffffffff1661136d611a20565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906153bd565b60405180910390fd5b80600e8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601660029054906101000a900460ff1681565b61140c612606565b73ffffffffffffffffffffffffffffffffffffffff1661142a611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906153bd565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561150d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115049061533d565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115e15761159d600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612baf565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60008060149054906101000a900460ff16905090565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506117b4565b6117b1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612baf565b90505b919050565b6117c1612606565b73ffffffffffffffffffffffffffffffffffffffff166117df611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118fb612606565b73ffffffffffffffffffffffffffffffffffffffff16611919611a20565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906153bd565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a51612606565b73ffffffffffffffffffffffffffffffffffffffff16611a6f611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc906153bd565b60405180910390fd5b8060108190555050565b611ad7612606565b73ffffffffffffffffffffffffffffffffffffffff16611af5611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906153bd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600581526020017f58504c4f52000000000000000000000000000000000000000000000000000000815250905090565b60135481565b611bda612606565b73ffffffffffffffffffffffffffffffffffffffff16611bf8611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c45906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906153dd565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611cfe92919061519b565b602060405180830381600087803b158015611d1857600080fd5b505af1158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d509190614d31565b507f5c5578c78fc9b87943279247ef36abf638b9551372bb769b5d87d1ae6a31be64833384604051611d8493929190615164565b60405180910390a1505050565b6000611e54611d9e612606565b84611e4f85604051806060016040528060258152602001615db16025913960036000611dc8612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa19092919063ffffffff16565b61260e565b6001905092915050565b6000611e72611e6b612606565b84846127d9565b6001905092915050565b611e84612606565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906153bd565b60405180910390fd5b611f00612c1d565b565b611f0a612606565b73ffffffffffffffffffffffffffffffffffffffff16611f28611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f75906153bd565b60405180910390fd5b80601660026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611fc79190615225565b60405180910390a150565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612030612606565b73ffffffffffffffffffffffffffffffffffffffff1661204e611a20565b73ffffffffffffffffffffffffffffffffffffffff16146120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906153bd565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612107612606565b73ffffffffffffffffffffffffffffffffffffffff16612125611a20565b73ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612172906153bd565b60405180910390fd5b8060148190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60125481565b61221a612606565b73ffffffffffffffffffffffffffffffffffffffff16612238611a20565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612285906153bd565b60405180910390fd5b612296610bb4565b8111156122a257600080fd5b60006122ac611a20565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156122f4573d6000803e3d6000fd5b507f069cf19f46ceed82ba5e8920c2bd549f700f29db62167f02b7762842f1fc3e9182604051612324919061549d565b60405180910390a15050565b612338612606565b73ffffffffffffffffffffffffffffffffffffffff16612356611a20565b73ffffffffffffffffffffffffffffffffffffffff16146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906153bd565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61240f612606565b73ffffffffffffffffffffffffffffffffffffffff1661242d611a20565b73ffffffffffffffffffffffffffffffffffffffff1614612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea906152dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061543d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906152fd565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127cc919061549d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128409061541d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061527d565b60405180910390fd5b6128c4838383612cbe565b60006128cf846116ce565b905081811015612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b9061535d565b60405180910390fd5b6000601660009054906101000a900460ff168015612a7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806129d257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612a7a5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a795750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b5b15612a8e57612a8985612e68565b600190505b612a9a85858584612fa5565b5050505050565b6000838311158290612ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae0919061525b565b60405180910390fd5b5082840390509392505050565b60008183612b0491906155b9565b905092915050565b612b146116b2565b15612b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4b9061539d565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b98612606565b604051612ba59190615149565b60405180910390a1565b6000600a54821115612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906152bd565b60405180910390fd5b6000612c006132b6565b9050612c1581846132e190919063ffffffff16565b915050919050565b612c256116b2565b612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b9061529d565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612ca7612606565b604051612cb49190615149565b60405180910390a1565b60008111612d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf89061547d565b60405180910390fd5b612d096116b2565b15612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d409061545d565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcd9061531d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906153fd565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612ed75750601554601254101580612ed6575060145460135410155b5b15612fa2576000601660009054906101000a900460ff1690508015612f12576000601660006101000a81548160ff0219169083151502179055505b60145460135410158015612f335750601660019054906101000a900460ff16155b8015612f4b5750601660029054906101000a900460ff165b15612f6a57600060135490506000601381905550612f68816132f7565b505b60155460125410612f7e57612f7d6133ce565b5b8015612fa0576001601660006101000a81548160ff0219169083151502179055505b505b50565b80612fb357612fb261340c565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130565750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57613066848484613460565b6132a2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131235761311e8484846136e4565b6132a1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c75750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131dc576131d7848484613968565b6132a0565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132935761328e848484613b57565b61329f565b61329e848484613968565b5b5b5b5b806132b0576132af613e70565b5b50505050565b60008060006132c3613e8d565b915091506132da81836132e190919063ffffffff16565b9250505090565b600081836132ef919061560f565b905092915050565b6001601660016101000a81548160ff02191690831515021790555060006133286002836132e190919063ffffffff16565b9050600061333f828461414090919063ffffffff16565b905060004790506133508330614156565b6000613365824761414090919063ffffffff16565b905061337183826143a3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516133a493929190615512565b60405180910390a1505050506000601660016101000a81548160ff02191690831515021790555050565b60006012549050600060128190555061340981600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614156565b50565b6000600c5414801561342057506000601054145b1561342a5761345e565b600c54600d81905550600e54600f819055506010546011819055506000600c819055506000600e8190555060006010819055505b565b600080600080600080600061347488614493565b96509650965096509650965096506134d488600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356987600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fe86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613655576136548a836144fb565b5b6000811115613669576136688a8261471f565b5b6136738584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136d0919061549d565b60405180910390a350505050505050505050565b60008060008060008060006136f888614493565b965096509650965096509650965061375887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ed84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156138d9576138d88a836144fb565b5b60008111156138ed576138ec8a8261471f565b5b6138f78584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613954919061549d565b60405180910390a350505050505050505050565b600080600080600080600061397c88614493565b96509650965096509650965096506139dc87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613ac857613ac78a836144fb565b5b6000811115613adc57613adb8a8261471f565b5b613ae68584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b43919061549d565b60405180910390a350505050505050505050565b6000806000806000806000613b6b88614493565b9650965096509650965096509650613bcb88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6087600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cf584600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613de157613de08a836144fb565b5b6000811115613df557613df48a8261471f565b5b613dff8584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e5c919061549d565b60405180910390a350505050505050505050565b600d54600c81905550600f54600e81905550601154601081905550565b6000806000600a5490506000600954905060005b60078054905081101561410357826001600060078481548110613ec757613ec6615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613fb55750816002600060078481548110613f4d57613f4c615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613fcc57600a546009549450945050505061413c565b61405c6001600060078481548110613fe757613fe6615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461414090919063ffffffff16565b92506140ee600260006007848154811061407957614078615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361414090919063ffffffff16565b915080806140fb9061579e565b915050613ea1565b5061411b600954600a546132e190919063ffffffff16565b82101561413357600a5460095493509350505061413c565b81819350935050505b9091565b6000818361414e919061569a565b905092915050565b6000600267ffffffffffffffff811115614173576141726158a3565b5b6040519080825280602002602001820160405280156141a15781602001602082028036833780820191505090505b50905030816000815181106141b9576141b8615874565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614c04565b816001815181106142a5576142a4615874565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061430a307f00000000000000000000000000000000000000000000000000000000000000008561260e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040161436c9594939291906154b8565b600060405180830381600087803b15801561438657600080fd5b505af115801561439a573d6000803e3d6000fd5b50505050505050565b6143ce307f00000000000000000000000000000000000000000000000000000000000000008461260e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614418611a20565b426040518863ffffffff1660e01b815260040161443a969594939291906151c4565b6060604051808303818588803b15801561445357600080fd5b505af1158015614467573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061448c9190614d8b565b5050505050565b60008060008060008060008060008060006144ad8c61497d565b935093509350935060008060006144ce8f8787876144c96132b6565b6149fc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60006145056132b6565b9050600061451c8284614ab090919063ffffffff16565b905061457081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601360008282546145c591906155b9565b92505081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146b45761467083600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614711919061549d565b60405180910390a350505050565b60006147296132b6565b905060006147408284614ab090919063ffffffff16565b905061479481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601260008282546147e991906155b9565b92505081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156148d85761489483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614935919061549d565b60405180910390a350505050565b61495882600a5461414090919063ffffffff16565b600a8190555061497381600b54612af690919063ffffffff16565b600b819055505050565b600080600080600061498e86614ac6565b9050600061499b87614af7565b905060006149a888614b28565b905060006149e3826149d5856149c7888e61414090919063ffffffff16565b61414090919063ffffffff16565b61414090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080614a15858a614ab090919063ffffffff16565b90506000614a2c868a614ab090919063ffffffff16565b90506000614a43878a614ab090919063ffffffff16565b90506000614a5a888a614ab090919063ffffffff16565b90506000614a9582614a8785614a79888a61414090919063ffffffff16565b61414090919063ffffffff16565b61414090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60008183614abe9190615640565b905092915050565b6000614af06064614ae2600c5485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b6000614b216064614b1360105485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b6000614b526064614b44600e5485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b600081359050614b6881615d43565b92915050565b600081519050614b7d81615d43565b92915050565b600081359050614b9281615d5a565b92915050565b600081519050614ba781615d5a565b92915050565b600081359050614bbc81615d71565b92915050565b600081519050614bd181615d71565b92915050565b600060208284031215614bed57614bec6158d2565b5b6000614bfb84828501614b59565b91505092915050565b600060208284031215614c1a57614c196158d2565b5b6000614c2884828501614b6e565b91505092915050565b60008060408385031215614c4857614c476158d2565b5b6000614c5685828601614b59565b9250506020614c6785828601614b59565b9150509250929050565b600080600060608486031215614c8a57614c896158d2565b5b6000614c9886828701614b59565b9350506020614ca986828701614b59565b9250506040614cba86828701614bad565b9150509250925092565b60008060408385031215614cdb57614cda6158d2565b5b6000614ce985828601614b59565b9250506020614cfa85828601614bad565b9150509250929050565b600060208284031215614d1a57614d196158d2565b5b6000614d2884828501614b83565b91505092915050565b600060208284031215614d4757614d466158d2565b5b6000614d5584828501614b98565b91505092915050565b600060208284031215614d7457614d736158d2565b5b6000614d8284828501614bad565b91505092915050565b600080600060608486031215614da457614da36158d2565b5b6000614db286828701614bc2565b9350506020614dc386828701614bc2565b9250506040614dd486828701614bc2565b9150509250925092565b6000614dea8383614df6565b60208301905092915050565b614dff816156ce565b82525050565b614e0e816156ce565b82525050565b6000614e1f82615574565b614e298185615597565b9350614e3483615564565b8060005b83811015614e65578151614e4c8882614dde565b9750614e578361558a565b925050600181019050614e38565b5085935050505092915050565b614e7b816156e0565b82525050565b614e8a81615723565b82525050565b614e9981615735565b82525050565b6000614eaa8261557f565b614eb481856155a8565b9350614ec481856020860161576b565b614ecd816158d7565b840191505092915050565b6000614ee56023836155a8565b9150614ef0826158e8565b604082019050919050565b6000614f086014836155a8565b9150614f1382615937565b602082019050919050565b6000614f2b602a836155a8565b9150614f3682615960565b604082019050919050565b6000614f4e6026836155a8565b9150614f59826159af565b604082019050919050565b6000614f716022836155a8565b9150614f7c826159fe565b604082019050919050565b6000614f946037836155a8565b9150614f9f82615a4d565b604082019050919050565b6000614fb7601b836155a8565b9150614fc282615a9c565b602082019050919050565b6000614fda602c836155a8565b9150614fe582615ac5565b604082019050919050565b6000614ffd601b836155a8565b915061500882615b14565b602082019050919050565b60006150206010836155a8565b915061502b82615b3d565b602082019050919050565b60006150436020836155a8565b915061504e82615b66565b602082019050919050565b6000615066601c836155a8565b915061507182615b8f565b602082019050919050565b60006150896035836155a8565b915061509482615bb8565b604082019050919050565b60006150ac6025836155a8565b91506150b782615c07565b604082019050919050565b60006150cf6024836155a8565b91506150da82615c56565b604082019050919050565b60006150f26033836155a8565b91506150fd82615ca5565b604082019050919050565b60006151156024836155a8565b915061512082615cf4565b604082019050919050565b6151348161570c565b82525050565b61514381615716565b82525050565b600060208201905061515e6000830184614e05565b92915050565b60006060820190506151796000830186614e05565b6151866020830185614e05565b615193604083018461512b565b949350505050565b60006040820190506151b06000830185614e05565b6151bd602083018461512b565b9392505050565b600060c0820190506151d96000830189614e05565b6151e6602083018861512b565b6151f36040830187614e90565b6152006060830186614e90565b61520d6080830185614e05565b61521a60a083018461512b565b979650505050505050565b600060208201905061523a6000830184614e72565b92915050565b60006020820190506152556000830184614e81565b92915050565b600060208201905081810360008301526152758184614e9f565b905092915050565b6000602082019050818103600083015261529681614ed8565b9050919050565b600060208201905081810360008301526152b681614efb565b9050919050565b600060208201905081810360008301526152d681614f1e565b9050919050565b600060208201905081810360008301526152f681614f41565b9050919050565b6000602082019050818103600083015261531681614f64565b9050919050565b6000602082019050818103600083015261533681614f87565b9050919050565b6000602082019050818103600083015261535681614faa565b9050919050565b6000602082019050818103600083015261537681614fcd565b9050919050565b6000602082019050818103600083015261539681614ff0565b9050919050565b600060208201905081810360008301526153b681615013565b9050919050565b600060208201905081810360008301526153d681615036565b9050919050565b600060208201905081810360008301526153f681615059565b9050919050565b600060208201905081810360008301526154168161507c565b9050919050565b600060208201905081810360008301526154368161509f565b9050919050565b60006020820190508181036000830152615456816150c2565b9050919050565b60006020820190508181036000830152615476816150e5565b9050919050565b6000602082019050818103600083015261549681615108565b9050919050565b60006020820190506154b2600083018461512b565b92915050565b600060a0820190506154cd600083018861512b565b6154da6020830187614e90565b81810360408301526154ec8186614e14565b90506154fb6060830185614e05565b615508608083018461512b565b9695505050505050565b6000606082019050615527600083018661512b565b615534602083018561512b565b615541604083018461512b565b949350505050565b600060208201905061555e600083018461513a565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006155c48261570c565b91506155cf8361570c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615604576156036157e7565b5b828201905092915050565b600061561a8261570c565b91506156258361570c565b92508261563557615634615816565b5b828204905092915050565b600061564b8261570c565b91506156568361570c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561568f5761568e6157e7565b5b828202905092915050565b60006156a58261570c565b91506156b08361570c565b9250828210156156c3576156c26157e7565b5b828203905092915050565b60006156d9826156ec565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061572e82615747565b9050919050565b60006157408261570c565b9050919050565b600061575282615759565b9050919050565b6000615764826156ec565b9050919050565b60005b8381101561578957808201518184015260208101905061576e565b83811115615798576000848401525b50505050565b60006157a98261570c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157dc576157db6157e7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652066726f6d2d6164647265737320706175736564000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f426c6f636b636861696e583a207472616e7366657220616d6f756e742065786360008201527f656564732062616c616e63650000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573732063616e74206265207a65726f206164647265737300000000600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c6520746f2d61646472657373207061757365640000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c6520636f6e74726163742070617573656400000000000000000000000000602082015250565b7f42455032303a20616d6f756e74206d757374206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b615d4c816156ce565b8114615d5757600080fd5b50565b615d63816156e0565b8114615d6e57600080fd5b50565b615d7a8161570c565b8114615d8557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cba8e0d6a36e9a947b89bbb6fc63e51d17481bc25af6808cba0d91bd1aa759a364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636bc87c3a1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146109b3578063de85eac8146109f0578063e7b50a8e14610a1b578063ea2f0b3714610a44578063f2fde38b14610a6d578063fbac483714610a9657610293565b8063a9059cbb146108a7578063bac15203146108e4578063c49b9a80146108fb578063c4ff9cb714610924578063ca9f2ee214610961578063d2cd2fdf1461098a57610293565b80638ee88c53116101135780638ee88c5314610799578063906e9dd0146107c257806395d89b41146107eb5780639ab733e4146108165780639e281a9814610841578063a457c2d71461086a57610293565b80636bc87c3a1461068957806370a08231146106b4578063715018a6146106f157806377df472c1461070857806388f82020146107315780638da5cb5b1461076e57610293565b80633685d419116101fe578063457c194c116101b7578063457c194c1461058b57806349bd5a5e146105b45780634a74bb02146105df57806352390c021461060a57806355fbbad8146106335780635c975abb1461065e57610293565b80633685d4191461049157806339509351146104ba5780633b124fe7146104f7578063421672e314610522578063437823ec1461054b578063439766ce1461057457610293565b8063158b417211610250578063158b41721461037f5780631694505e146103a857806318160ddd146103d357806322976e0d146103fe57806323b872dd14610429578063313ce5671461046657610293565b8063061c82d01461029857806306fdde03146102c1578063095ea7b3146102ec57806312065fe01461032957806313114a9d1461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614d5e565b610ad3565b005b3480156102cd57600080fd5b506102d6610b59565b6040516102e3919061525b565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614cc4565b610b96565b6040516103209190615225565b60405180910390f35b34801561033557600080fd5b5061033e610bb4565b60405161034b919061549d565b60405180910390f35b34801561036057600080fd5b50610369610bbc565b604051610376919061549d565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190614d04565b610bc6565b005b3480156103b457600080fd5b506103bd610c5f565b6040516103ca9190615240565b60405180910390f35b3480156103df57600080fd5b506103e8610c83565b6040516103f5919061549d565b60405180910390f35b34801561040a57600080fd5b50610413610c8d565b604051610420919061549d565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190614c71565b610c93565b60405161045d9190615225565b60405180910390f35b34801561047257600080fd5b5061047b610d6c565b6040516104889190615549565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614bd7565b610d75565b005b3480156104c657600080fd5b506104e160048036038101906104dc9190614cc4565b6110ab565b6040516104ee9190615225565b60405180910390f35b34801561050357600080fd5b5061050c61115e565b604051610519919061549d565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614d5e565b611164565b005b34801561055757600080fd5b50610572600480360381019061056d9190614bd7565b6111ea565b005b34801561058057600080fd5b506105896112c1565b005b34801561059757600080fd5b506105b260048036038101906105ad9190614d5e565b611347565b005b3480156105c057600080fd5b506105c96113cd565b6040516105d69190615149565b60405180910390f35b3480156105eb57600080fd5b506105f46113f1565b6040516106019190615225565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614bd7565b611404565b005b34801561063f57600080fd5b5061064861169f565b6040516106559190615225565b60405180910390f35b34801561066a57600080fd5b506106736116b2565b6040516106809190615225565b60405180910390f35b34801561069557600080fd5b5061069e6116c8565b6040516106ab919061549d565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190614bd7565b6116ce565b6040516106e8919061549d565b60405180910390f35b3480156106fd57600080fd5b506107066117b9565b005b34801561071457600080fd5b5061072f600480360381019061072a9190614bd7565b6118f3565b005b34801561073d57600080fd5b5061075860048036038101906107539190614bd7565b6119ca565b6040516107659190615225565b60405180910390f35b34801561077a57600080fd5b50610783611a20565b6040516107909190615149565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb9190614d5e565b611a49565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190614bd7565b611acf565b005b3480156107f757600080fd5b50610800611b8f565b60405161080d919061525b565b60405180910390f35b34801561082257600080fd5b5061082b611bcc565b604051610838919061549d565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190614cc4565b611bd2565b005b34801561087657600080fd5b50610891600480360381019061088c9190614cc4565b611d91565b60405161089e9190615225565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190614cc4565b611e5e565b6040516108db9190615225565b60405180910390f35b3480156108f057600080fd5b506108f9611e7c565b005b34801561090757600080fd5b50610922600480360381019061091d9190614d04565b611f02565b005b34801561093057600080fd5b5061094b60048036038101906109469190614bd7565b611fd2565b6040516109589190615225565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614bd7565b612028565b005b34801561099657600080fd5b506109b160048036038101906109ac9190614d5e565b6120ff565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190614c31565b612185565b6040516109e7919061549d565b60405180910390f35b3480156109fc57600080fd5b50610a0561220c565b604051610a12919061549d565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190614d5e565b612212565b005b348015610a5057600080fd5b50610a6b6004803603810190610a669190614bd7565b612330565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614bd7565b612407565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190614bd7565b6125b0565b604051610aca9190615225565b60405180910390f35b610adb612606565b73ffffffffffffffffffffffffffffffffffffffff16610af9611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b46906153bd565b60405180910390fd5b80600c8190555050565b60606040518060400160405280600581526020017f58504c4f52000000000000000000000000000000000000000000000000000000815250905090565b6000610baa610ba3612606565b848461260e565b6001905092915050565b600047905090565b6000600b54905090565b610bce612606565b73ffffffffffffffffffffffffffffffffffffffff16610bec611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c39906153bd565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b600e5481565b6000610ca08484846127d9565b610d6184610cac612606565b610d5c85604051806060016040528060288152602001615d8960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d12612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa19092919063ffffffff16565b61260e565b600190509392505050565b60006012905090565b610d7d612606565b73ffffffffffffffffffffffffffffffffffffffff16610d9b611a20565b73ffffffffffffffffffffffffffffffffffffffff1614610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906153bd565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061537d565b60405180910390fd5b60005b6007805490508110156110a7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610eb857610eb7615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110945760076001600780549050610f13919061569a565b81548110610f2457610f23615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610f6357610f62615874565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061105a57611059615845565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110a7565b808061109f9061579e565b915050610e80565b5050565b60006111546110b8612606565b8461114f85600360006110c9612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b61260e565b6001905092915050565b600c5481565b61116c612606565b73ffffffffffffffffffffffffffffffffffffffff1661118a611a20565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906153bd565b60405180910390fd5b8060158190555050565b6111f2612606565b73ffffffffffffffffffffffffffffffffffffffff16611210611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d906153bd565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6112c9612606565b73ffffffffffffffffffffffffffffffffffffffff166112e7611a20565b73ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906153bd565b60405180910390fd5b611345612b0c565b565b61134f612606565b73ffffffffffffffffffffffffffffffffffffffff1661136d611a20565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906153bd565b60405180910390fd5b80600e8190555050565b7f0000000000000000000000008ad39969b37fd7c2b14eaeb37291c60bf5195de081565b601660029054906101000a900460ff1681565b61140c612606565b73ffffffffffffffffffffffffffffffffffffffff1661142a611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906153bd565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561150d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115049061533d565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115e15761159d600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612baf565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900460ff1681565b60008060149054906101000a900460ff16905090565b60105481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506117b4565b6117b1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612baf565b90505b919050565b6117c1612606565b73ffffffffffffffffffffffffffffffffffffffff166117df611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118fb612606565b73ffffffffffffffffffffffffffffffffffffffff16611919611a20565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906153bd565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a51612606565b73ffffffffffffffffffffffffffffffffffffffff16611a6f611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc906153bd565b60405180910390fd5b8060108190555050565b611ad7612606565b73ffffffffffffffffffffffffffffffffffffffff16611af5611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906153bd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600581526020017f58504c4f52000000000000000000000000000000000000000000000000000000815250905090565b60135481565b611bda612606565b73ffffffffffffffffffffffffffffffffffffffff16611bf8611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c45906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906153dd565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611cfe92919061519b565b602060405180830381600087803b158015611d1857600080fd5b505af1158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d509190614d31565b507f5c5578c78fc9b87943279247ef36abf638b9551372bb769b5d87d1ae6a31be64833384604051611d8493929190615164565b60405180910390a1505050565b6000611e54611d9e612606565b84611e4f85604051806060016040528060258152602001615db16025913960036000611dc8612606565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa19092919063ffffffff16565b61260e565b6001905092915050565b6000611e72611e6b612606565b84846127d9565b6001905092915050565b611e84612606565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906153bd565b60405180910390fd5b611f00612c1d565b565b611f0a612606565b73ffffffffffffffffffffffffffffffffffffffff16611f28611a20565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f75906153bd565b60405180910390fd5b80601660026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611fc79190615225565b60405180910390a150565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612030612606565b73ffffffffffffffffffffffffffffffffffffffff1661204e611a20565b73ffffffffffffffffffffffffffffffffffffffff16146120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906153bd565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612107612606565b73ffffffffffffffffffffffffffffffffffffffff16612125611a20565b73ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612172906153bd565b60405180910390fd5b8060148190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60125481565b61221a612606565b73ffffffffffffffffffffffffffffffffffffffff16612238611a20565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612285906153bd565b60405180910390fd5b612296610bb4565b8111156122a257600080fd5b60006122ac611a20565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156122f4573d6000803e3d6000fd5b507f069cf19f46ceed82ba5e8920c2bd549f700f29db62167f02b7762842f1fc3e9182604051612324919061549d565b60405180910390a15050565b612338612606565b73ffffffffffffffffffffffffffffffffffffffff16612356611a20565b73ffffffffffffffffffffffffffffffffffffffff16146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906153bd565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61240f612606565b73ffffffffffffffffffffffffffffffffffffffff1661242d611a20565b73ffffffffffffffffffffffffffffffffffffffff1614612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a906153bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea906152dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061543d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906152fd565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127cc919061549d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128409061541d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061527d565b60405180910390fd5b6128c4838383612cbe565b60006128cf846116ce565b905081811015612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b9061535d565b60405180910390fd5b6000601660009054906101000a900460ff168015612a7b57507f0000000000000000000000008ad39969b37fd7c2b14eaeb37291c60bf5195de073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806129d257507f0000000000000000000000008ad39969b37fd7c2b14eaeb37291c60bf5195de073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612a7a5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a795750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b5b15612a8e57612a8985612e68565b600190505b612a9a85858584612fa5565b5050505050565b6000838311158290612ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae0919061525b565b60405180910390fd5b5082840390509392505050565b60008183612b0491906155b9565b905092915050565b612b146116b2565b15612b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4b9061539d565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b98612606565b604051612ba59190615149565b60405180910390a1565b6000600a54821115612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906152bd565b60405180910390fd5b6000612c006132b6565b9050612c1581846132e190919063ffffffff16565b915050919050565b612c256116b2565b612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b9061529d565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612ca7612606565b604051612cb49190615149565b60405180910390a1565b60008111612d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf89061547d565b60405180910390fd5b612d096116b2565b15612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d409061545d565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcd9061531d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906153fd565b60405180910390fd5b505050565b7f0000000000000000000000008ad39969b37fd7c2b14eaeb37291c60bf5195de073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612ed75750601554601254101580612ed6575060145460135410155b5b15612fa2576000601660009054906101000a900460ff1690508015612f12576000601660006101000a81548160ff0219169083151502179055505b60145460135410158015612f335750601660019054906101000a900460ff16155b8015612f4b5750601660029054906101000a900460ff165b15612f6a57600060135490506000601381905550612f68816132f7565b505b60155460125410612f7e57612f7d6133ce565b5b8015612fa0576001601660006101000a81548160ff0219169083151502179055505b505b50565b80612fb357612fb261340c565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130565750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57613066848484613460565b6132a2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131235761311e8484846136e4565b6132a1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c75750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131dc576131d7848484613968565b6132a0565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132935761328e848484613b57565b61329f565b61329e848484613968565b5b5b5b5b806132b0576132af613e70565b5b50505050565b60008060006132c3613e8d565b915091506132da81836132e190919063ffffffff16565b9250505090565b600081836132ef919061560f565b905092915050565b6001601660016101000a81548160ff02191690831515021790555060006133286002836132e190919063ffffffff16565b9050600061333f828461414090919063ffffffff16565b905060004790506133508330614156565b6000613365824761414090919063ffffffff16565b905061337183826143a3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516133a493929190615512565b60405180910390a1505050506000601660016101000a81548160ff02191690831515021790555050565b60006012549050600060128190555061340981600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614156565b50565b6000600c5414801561342057506000601054145b1561342a5761345e565b600c54600d81905550600e54600f819055506010546011819055506000600c819055506000600e8190555060006010819055505b565b600080600080600080600061347488614493565b96509650965096509650965096506134d488600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356987600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fe86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613655576136548a836144fb565b5b6000811115613669576136688a8261471f565b5b6136738584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136d0919061549d565b60405180910390a350505050505050505050565b60008060008060008060006136f888614493565b965096509650965096509650965061375887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ed84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156138d9576138d88a836144fb565b5b60008111156138ed576138ec8a8261471f565b5b6138f78584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613954919061549d565b60405180910390a350505050505050505050565b600080600080600080600061397c88614493565b96509650965096509650965096506139dc87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613ac857613ac78a836144fb565b5b6000811115613adc57613adb8a8261471f565b5b613ae68584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b43919061549d565b60405180910390a350505050505050505050565b6000806000806000806000613b6b88614493565b9650965096509650965096509650613bcb88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6087600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461414090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cf584600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115613de157613de08a836144fb565b5b6000811115613df557613df48a8261471f565b5b613dff8584614943565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e5c919061549d565b60405180910390a350505050505050505050565b600d54600c81905550600f54600e81905550601154601081905550565b6000806000600a5490506000600954905060005b60078054905081101561410357826001600060078481548110613ec757613ec6615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613fb55750816002600060078481548110613f4d57613f4c615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613fcc57600a546009549450945050505061413c565b61405c6001600060078481548110613fe757613fe6615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461414090919063ffffffff16565b92506140ee600260006007848154811061407957614078615874565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361414090919063ffffffff16565b915080806140fb9061579e565b915050613ea1565b5061411b600954600a546132e190919063ffffffff16565b82101561413357600a5460095493509350505061413c565b81819350935050505b9091565b6000818361414e919061569a565b905092915050565b6000600267ffffffffffffffff811115614173576141726158a3565b5b6040519080825280602002602001820160405280156141a15781602001602082028036833780820191505090505b50905030816000815181106141b9576141b8615874565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614c04565b816001815181106142a5576142a4615874565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061430a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8561260e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040161436c9594939291906154b8565b600060405180830381600087803b15801561438657600080fd5b505af115801561439a573d6000803e3d6000fd5b50505050505050565b6143ce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461260e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614418611a20565b426040518863ffffffff1660e01b815260040161443a969594939291906151c4565b6060604051808303818588803b15801561445357600080fd5b505af1158015614467573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061448c9190614d8b565b5050505050565b60008060008060008060008060008060006144ad8c61497d565b935093509350935060008060006144ce8f8787876144c96132b6565b6149fc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60006145056132b6565b9050600061451c8284614ab090919063ffffffff16565b905061457081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601360008282546145c591906155b9565b92505081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146b45761467083600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614711919061549d565b60405180910390a350505050565b60006147296132b6565b905060006147408284614ab090919063ffffffff16565b905061479481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082601260008282546147e991906155b9565b92505081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156148d85761489483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612af690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614935919061549d565b60405180910390a350505050565b61495882600a5461414090919063ffffffff16565b600a8190555061497381600b54612af690919063ffffffff16565b600b819055505050565b600080600080600061498e86614ac6565b9050600061499b87614af7565b905060006149a888614b28565b905060006149e3826149d5856149c7888e61414090919063ffffffff16565b61414090919063ffffffff16565b61414090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080614a15858a614ab090919063ffffffff16565b90506000614a2c868a614ab090919063ffffffff16565b90506000614a43878a614ab090919063ffffffff16565b90506000614a5a888a614ab090919063ffffffff16565b90506000614a9582614a8785614a79888a61414090919063ffffffff16565b61414090919063ffffffff16565b61414090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60008183614abe9190615640565b905092915050565b6000614af06064614ae2600c5485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b6000614b216064614b1360105485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b6000614b526064614b44600e5485614ab090919063ffffffff16565b6132e190919063ffffffff16565b9050919050565b600081359050614b6881615d43565b92915050565b600081519050614b7d81615d43565b92915050565b600081359050614b9281615d5a565b92915050565b600081519050614ba781615d5a565b92915050565b600081359050614bbc81615d71565b92915050565b600081519050614bd181615d71565b92915050565b600060208284031215614bed57614bec6158d2565b5b6000614bfb84828501614b59565b91505092915050565b600060208284031215614c1a57614c196158d2565b5b6000614c2884828501614b6e565b91505092915050565b60008060408385031215614c4857614c476158d2565b5b6000614c5685828601614b59565b9250506020614c6785828601614b59565b9150509250929050565b600080600060608486031215614c8a57614c896158d2565b5b6000614c9886828701614b59565b9350506020614ca986828701614b59565b9250506040614cba86828701614bad565b9150509250925092565b60008060408385031215614cdb57614cda6158d2565b5b6000614ce985828601614b59565b9250506020614cfa85828601614bad565b9150509250929050565b600060208284031215614d1a57614d196158d2565b5b6000614d2884828501614b83565b91505092915050565b600060208284031215614d4757614d466158d2565b5b6000614d5584828501614b98565b91505092915050565b600060208284031215614d7457614d736158d2565b5b6000614d8284828501614bad565b91505092915050565b600080600060608486031215614da457614da36158d2565b5b6000614db286828701614bc2565b9350506020614dc386828701614bc2565b9250506040614dd486828701614bc2565b9150509250925092565b6000614dea8383614df6565b60208301905092915050565b614dff816156ce565b82525050565b614e0e816156ce565b82525050565b6000614e1f82615574565b614e298185615597565b9350614e3483615564565b8060005b83811015614e65578151614e4c8882614dde565b9750614e578361558a565b925050600181019050614e38565b5085935050505092915050565b614e7b816156e0565b82525050565b614e8a81615723565b82525050565b614e9981615735565b82525050565b6000614eaa8261557f565b614eb481856155a8565b9350614ec481856020860161576b565b614ecd816158d7565b840191505092915050565b6000614ee56023836155a8565b9150614ef0826158e8565b604082019050919050565b6000614f086014836155a8565b9150614f1382615937565b602082019050919050565b6000614f2b602a836155a8565b9150614f3682615960565b604082019050919050565b6000614f4e6026836155a8565b9150614f59826159af565b604082019050919050565b6000614f716022836155a8565b9150614f7c826159fe565b604082019050919050565b6000614f946037836155a8565b9150614f9f82615a4d565b604082019050919050565b6000614fb7601b836155a8565b9150614fc282615a9c565b602082019050919050565b6000614fda602c836155a8565b9150614fe582615ac5565b604082019050919050565b6000614ffd601b836155a8565b915061500882615b14565b602082019050919050565b60006150206010836155a8565b915061502b82615b3d565b602082019050919050565b60006150436020836155a8565b915061504e82615b66565b602082019050919050565b6000615066601c836155a8565b915061507182615b8f565b602082019050919050565b60006150896035836155a8565b915061509482615bb8565b604082019050919050565b60006150ac6025836155a8565b91506150b782615c07565b604082019050919050565b60006150cf6024836155a8565b91506150da82615c56565b604082019050919050565b60006150f26033836155a8565b91506150fd82615ca5565b604082019050919050565b60006151156024836155a8565b915061512082615cf4565b604082019050919050565b6151348161570c565b82525050565b61514381615716565b82525050565b600060208201905061515e6000830184614e05565b92915050565b60006060820190506151796000830186614e05565b6151866020830185614e05565b615193604083018461512b565b949350505050565b60006040820190506151b06000830185614e05565b6151bd602083018461512b565b9392505050565b600060c0820190506151d96000830189614e05565b6151e6602083018861512b565b6151f36040830187614e90565b6152006060830186614e90565b61520d6080830185614e05565b61521a60a083018461512b565b979650505050505050565b600060208201905061523a6000830184614e72565b92915050565b60006020820190506152556000830184614e81565b92915050565b600060208201905081810360008301526152758184614e9f565b905092915050565b6000602082019050818103600083015261529681614ed8565b9050919050565b600060208201905081810360008301526152b681614efb565b9050919050565b600060208201905081810360008301526152d681614f1e565b9050919050565b600060208201905081810360008301526152f681614f41565b9050919050565b6000602082019050818103600083015261531681614f64565b9050919050565b6000602082019050818103600083015261533681614f87565b9050919050565b6000602082019050818103600083015261535681614faa565b9050919050565b6000602082019050818103600083015261537681614fcd565b9050919050565b6000602082019050818103600083015261539681614ff0565b9050919050565b600060208201905081810360008301526153b681615013565b9050919050565b600060208201905081810360008301526153d681615036565b9050919050565b600060208201905081810360008301526153f681615059565b9050919050565b600060208201905081810360008301526154168161507c565b9050919050565b600060208201905081810360008301526154368161509f565b9050919050565b60006020820190508181036000830152615456816150c2565b9050919050565b60006020820190508181036000830152615476816150e5565b9050919050565b6000602082019050818103600083015261549681615108565b9050919050565b60006020820190506154b2600083018461512b565b92915050565b600060a0820190506154cd600083018861512b565b6154da6020830187614e90565b81810360408301526154ec8186614e14565b90506154fb6060830185614e05565b615508608083018461512b565b9695505050505050565b6000606082019050615527600083018661512b565b615534602083018561512b565b615541604083018461512b565b949350505050565b600060208201905061555e600083018461513a565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006155c48261570c565b91506155cf8361570c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615604576156036157e7565b5b828201905092915050565b600061561a8261570c565b91506156258361570c565b92508261563557615634615816565b5b828204905092915050565b600061564b8261570c565b91506156568361570c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561568f5761568e6157e7565b5b828202905092915050565b60006156a58261570c565b91506156b08361570c565b9250828210156156c3576156c26157e7565b5b828203905092915050565b60006156d9826156ec565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061572e82615747565b9050919050565b60006157408261570c565b9050919050565b600061575282615759565b9050919050565b6000615764826156ec565b9050919050565b60005b8381101561578957808201518184015260208101905061576e565b83811115615798576000848401525b50505050565b60006157a98261570c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157dc576157db6157e7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652066726f6d2d6164647265737320706175736564000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f426c6f636b636861696e583a207472616e7366657220616d6f756e742065786360008201527f656564732062616c616e63650000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573732063616e74206265207a65726f206164647265737300000000600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c6520746f2d61646472657373207061757365640000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c6520636f6e74726163742070617573656400000000000000000000000000602082015250565b7f42455032303a20616d6f756e74206d757374206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b615d4c816156ce565b8114615d5757600080fd5b50565b615d63816156e0565b8114615d6e57600080fd5b50565b615d7a8161570c565b8114615d8557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cba8e0d6a36e9a947b89bbb6fc63e51d17481bc25af6808cba0d91bd1aa759a364736f6c63430008070033

Deployed Bytecode Sourcemap

30920:23329:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37236:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33632:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34556:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39982:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35687:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38166:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32336:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33915:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31938:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34727:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33822:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36502:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35050:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31857:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38045:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36991:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38635:79;;;;;;;;;;;;;:::i;:::-;;37340:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32394:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32510:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36047:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32445:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21771:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32037:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34020:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20229:150;;;;;;;;;;;;;:::i;:::-;;39033:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35557:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19578:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37472:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37781:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33725:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32178:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39618:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35278:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34226:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38834:83;;;;;;;;;;;;;:::i;:::-;;37600:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39483:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39267:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37924:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34403:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32136:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40089:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37115:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20534:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44556:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37236:96;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37318:6:::1;37308:7;:16;;;;37236:96:::0;:::o;33632:85::-;33671:13;33704:5;;;;;;;;;;;;;;;;;33697:12;;33632:85;:::o;34556:163::-;34633:4;34650:39;34659:12;:10;:12::i;:::-;34673:7;34682:6;34650:8;:39::i;:::-;34707:4;34700:11;;34556:163;;;;:::o;39982:99::-;40025:7;40052:21;40045:28;;39982:99;:::o;35687:89::-;35731:7;35758:10;;35751:17;;35687:89;:::o;38166:97::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38246:9:::1;38233:10;;:22;;;;;;;;;;;;;;;;;;38166:97:::0;:::o;32336:51::-;;;:::o;33915:97::-;33970:7;33997;;33990:14;;33915:97;:::o;31938:32::-;;;;:::o;34727:315::-;34827:4;34844:36;34854:6;34862:9;34873:6;34844:9;:36::i;:::-;34891:121;34900:6;34908:12;:10;:12::i;:::-;34922:89;34960:6;34922:89;;;;;;;;;;;;;;;;;:11;:19;34934:6;34922:19;;;;;;;;;;;;;;;:33;34942:12;:10;:12::i;:::-;34922:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;34891:8;:121::i;:::-;35030:4;35023:11;;34727:315;;;;;:::o;33822:85::-;33865:5;31842:2;33883:16;;33822:85;:::o;36502:477::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36582:11:::1;:20;36594:7;36582:20;;;;;;;;;;;;;;;;;;;;;;;;;36574:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36650:9;36645:327;36669:9;:16;;;;36665:1;:20;36645:327;;;36727:7;36711:23;;:9;36721:1;36711:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;36707:254;;;36770:9;36799:1;36780:9;:16;;;;:20;;;;:::i;:::-;36770:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36755:9;36765:1;36755:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36839:1;36820:7;:16;36828:7;36820:16;;;;;;;;;;;;;;;:20;;;;36882:5;36859:11;:20;36871:7;36859:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;36906:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;36940:5;;36707:254;36687:3;;;;;:::i;:::-;;;;36645:327;;;;36502:477:::0;:::o;35050:220::-;35140:4;35157:83;35166:12;:10;:12::i;:::-;35180:7;35189:50;35228:10;35189:11;:25;35201:12;:10;:12::i;:::-;35189:25;;;;;;;;;;;;;;;:34;35215:7;35189:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;35157:8;:83::i;:::-;35258:4;35251:11;;35050:220;;;;:::o;31857:26::-;;;;:::o;38045:113::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38145:5:::1;38124:18;:26;;;;38045:113:::0;:::o;36991:112::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37090:5:::1;37062:16;:25;37079:7;37062:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;36991:112:::0;:::o;38635:79::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38698:8:::1;:6;:8::i;:::-;38635:79::o:0;37340:120::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37440:12:::1;37424:13;:28;;;;37340:120:::0;:::o;32394:38::-;;;:::o;32510:40::-;;;;;;;;;;;;;:::o;36047:447::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36244:11:::1;:20;36256:7;36244:20;;;;;;;;;;;;;;;;;;;;;;;;;36243:21;36235:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36329:1;36310:7;:16;36318:7;36310:16;;;;;;;;;;;;;;;;:20;36307:108;;;36366:37;36386:7;:16;36394:7;36386:16;;;;;;;;;;;;;;;;36366:19;:37::i;:::-;36347:7;:16;36355:7;36347:16;;;;;;;;;;;;;;;:56;;;;36307:108;36448:4;36425:11;:20;36437:7;36425:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36463:9;36478:7;36463:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36047:447:::0;:::o;32445:30::-;;;;;;;;;;;;;:::o;21771:86::-;21818:4;21842:7;;;;;;;;;;;21835:14;;21771:86;:::o;32037:32::-;;;;:::o;34020:198::-;34086:7;34110:11;:20;34122:7;34110:20;;;;;;;;;;;;;;;;;;;;;;;;;34106:49;;;34139:7;:16;34147:7;34139:16;;;;;;;;;;;;;;;;34132:23;;;;34106:49;34173:37;34193:7;:16;34201:7;34193:16;;;;;;;;;;;;;;;;34173:19;:37::i;:::-;34166:44;;34020:198;;;;:::o;20229:150::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20338:1:::1;20301:40;;20322:6;::::0;::::1;;;;;;;;20301:40;;;;;;;;;;;;20369:1;20352:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20229:150::o:0;39033:114::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39135:4:::1;39110:13;:22;39124:7;39110:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39033:114:::0;:::o;35557:122::-;35627:4;35651:11;:20;35663:7;35651:20;;;;;;;;;;;;;;;;;;;;;;;;;35644:27;;35557:122;;;:::o;19578:87::-;19624:7;19651:6;;;;;;;;;;;19644:13;;19578:87;:::o;37472:120::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37572:12:::1;37556:13;:28;;;;37472:120:::0;:::o;37781:135::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37892:16:::1;37866:23;;:42;;;;;;;;;;;;;;;;;;37781:135:::0;:::o;33725:89::-;33766:13;33799:7;;;;;;;;;;;;;;;;;33792:14;;33725:89;:::o;32178:35::-;;;;:::o;39618:356::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39746:1:::1;39720:28;;:14;:28;;;;39712:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39792:20;39822:14;39792:45;;39848:13;:22;;;39871:10;39883:7;39848:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39907:59;39931:14;39946:10;39958:7;39907:59;;;;;;;;:::i;:::-;;;;;;;;39701:273;39618:356:::0;;:::o;35278:271::-;35373:4;35390:129;35399:12;:10;:12::i;:::-;35413:7;35422:96;35461:15;35422:96;;;;;;;;;;;;;;;;;:11;:25;35434:12;:10;:12::i;:::-;35422:25;;;;;;;;;;;;;;;:34;35448:7;35422:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;35390:8;:129::i;:::-;35537:4;35530:11;;35278:271;;;;:::o;34226:169::-;34306:4;34323:42;34333:12;:10;:12::i;:::-;34347:9;34358:6;34323:9;:42::i;:::-;34383:4;34376:11;;34226:169;;;;:::o;38834:83::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38899:10:::1;:8;:10::i;:::-;38834:83::o:0;37600:173::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37703:8:::1;37679:21;;:32;;;;;;;;;;;;;;;;;;37727:38;37756:8;37727:38;;;;;;:::i;:::-;;;;;;;;37600:173:::0;:::o;39483:127::-;39556:4;39580:13;:22;39594:7;39580:22;;;;;;;;;;;;;;;;;;;;;;;;;39573:29;;39483:127;;;:::o;39267:117::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39371:5:::1;39346:13;:22;39360:7;39346:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;39267:117:::0;:::o;37924:113::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38024:5:::1;38003:18;:26;;;;37924:113:::0;:::o;34403:145::-;34486:7;34513:11;:18;34525:5;34513:18;;;;;;;;;;;;;;;:27;34532:7;34513:27;;;;;;;;;;;;;;;;34506:34;;34403:145;;;;:::o;32136:35::-;;;;:::o;40089:254::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40186:12:::1;:10;:12::i;:::-;40176:6;:22;;40168:31;;;::::0;::::1;;40210:22;40243:7;:5;:7::i;:::-;40210:41;;40262:6;:15;;:23;40278:6;40262:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40301:34;40328:6;40301:34;;;;;;:::i;:::-;;;;;;;;40157:186;40089:254:::0;:::o;37115:109::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37212:4:::1;37184:16;:25;37201:7;37184:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37115:109:::0;:::o;20534:246::-;19809:12;:10;:12::i;:::-;19798:23;;:7;:5;:7::i;:::-;:23;;;19790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20645:1:::1;20625:22;;:8;:22;;;;20617:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20735:8;20706:38;;20727:6;::::0;::::1;;;;;;;;20706:38;;;;;;;;;;;;20764:8;20755:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20534:246:::0;:::o;44556:121::-;44620:4;44644:16;:25;44661:7;44644:25;;;;;;;;;;;;;;;;;;;;;;;;;44637:32;;44556:121;;;:::o;10327:98::-;10380:7;10407:10;10400:17;;10327:98;:::o;44685:337::-;44795:1;44778:19;;:5;:19;;;;44770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44876:1;44857:21;;:7;:21;;;;44849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44960:6;44930:11;:18;44942:5;44930:18;;;;;;;;;;;;;;;:27;44949:7;44930:27;;;;;;;;;;;;;;;:36;;;;44998:7;44982:32;;44991:5;44982:32;;;45007:6;44982:32;;;;;;:::i;:::-;;;;;;;;44685:337;;;:::o;45030:889::-;45168:1;45152:18;;:4;:18;;;;45144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45245:1;45231:16;;:2;:16;;;;45223:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45298:38;45319:4;45325:2;45329:6;45298:20;:38::i;:::-;45349:21;45373:15;45383:4;45373:9;:15::i;:::-;45349:39;;45424:6;45407:13;:23;;45399:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;45561:12;45595:10;;;;;;;;;;;:114;;;;;45619:13;45611:21;;:4;:21;;;:44;;;;45642:13;45636:19;;:2;:19;;;45611:44;45610:98;;;;45661:16;:22;45678:4;45661:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;45687:16;:20;45704:2;45687:20;;;;;;;;;;;;;;;;;;;;;;;;;45661:46;45610:98;45595:114;45592:195;;;45725:21;45741:4;45725:15;:21::i;:::-;45771:4;45761:14;;45592:195;45873:38;45888:4;45893:2;45896:6;45903:7;45873:14;:38::i;:::-;45133:786;;45030:889;;;:::o;7777:206::-;7863:7;7921:1;7916;:6;;7924:12;7908:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7963:1;7959;:5;7952:12;;7777:206;;;;;:::o;5498:98::-;5556:7;5587:1;5583;:5;;;;:::i;:::-;5576:12;;5498:98;;;;:::o;22571:118::-;22097:8;:6;:8::i;:::-;22096:9;22088:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22641:4:::1;22631:7;;:14;;;;;;;;;;;;;;;;;;22661:20;22668:12;:10;:12::i;:::-;22661:20;;;;;;:::i;:::-;;;;;;;;22571:118::o:0;35784:255::-;35852:7;35891;;35880;:18;;35872:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35956:19;35979:10;:8;:10::i;:::-;35956:33;;36007:24;36019:11;36007:7;:11;;:24;;;;:::i;:::-;36000:31;;;35784:255;;;:::o;22830:120::-;22374:8;:6;:8::i;:::-;22366:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22899:5:::1;22889:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;22920:22;22929:12;:10;:12::i;:::-;22920:22;;;;;;:::i;:::-;;;;;;;;22830:120::o:0;53765:479::-;53916:1;53907:6;:10;53899:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;53978:8;:6;:8::i;:::-;53977:9;53969:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;54062:13;:19;54076:4;54062:19;;;;;;;;;;;;;;;;;;;;;;;;;54061:20;54053:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;54161:13;:17;54175:2;54161:17;;;;;;;;;;;;;;;;;;;;;;;;;54160:18;54152:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;53765:479;;;:::o;45927:1206::-;45997:13;45989:21;;:4;:21;;;;:115;;;;;46039:18;;46015:20;;:42;;:88;;;;46085:18;;46061:20;;:42;;46015:88;45989:115;45986:1140;;;46121:20;46144:10;;;;;;;;;;;46121:33;;46227:15;46224:38;;;46257:5;46244:10;;:18;;;;;;;;;;;;;;;;;;46224:38;46623:18;;46599:20;;:42;;:80;;;;;46663:16;;;;;;;;;;;46662:17;46599:80;:122;;;;;46700:21;;;;;;;;;;;46599:122;46577:343;;;46789:11;46803:20;;46789:34;;46865:1;46842:20;:24;;;;46885:19;46900:3;46885:14;:19::i;:::-;46737:183;46577:343;46964:18;;46940:20;;:42;46936:69;;46984:21;:19;:21::i;:::-;46936:69;47080:15;47077:37;;;47110:4;47097:10;;:17;;;;;;;;;;;;;;;;;;47077:37;46106:1020;45986:1140;45927:1206;:::o;49556:834::-;49667:7;49663:40;;49689:14;:12;:14::i;:::-;49663:40;49728:11;:19;49740:6;49728:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;49752:11;:22;49764:9;49752:22;;;;;;;;;;;;;;;;;;;;;;;;;49751:23;49728:46;49724:597;;;49791:48;49813:6;49821:9;49832:6;49791:21;:48::i;:::-;49724:597;;;49862:11;:19;49874:6;49862:19;;;;;;;;;;;;;;;;;;;;;;;;;49861:20;:46;;;;;49885:11;:22;49897:9;49885:22;;;;;;;;;;;;;;;;;;;;;;;;;49861:46;49857:464;;;49924:46;49944:6;49952:9;49963:6;49924:19;:46::i;:::-;49857:464;;;49993:11;:19;50005:6;49993:19;;;;;;;;;;;;;;;;;;;;;;;;;49992:20;:47;;;;;50017:11;:22;50029:9;50017:22;;;;;;;;;;;;;;;;;;;;;;;;;50016:23;49992:47;49988:333;;;50056:44;50074:6;50082:9;50093:6;50056:17;:44::i;:::-;49988:333;;;50122:11;:19;50134:6;50122:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;50145:11;:22;50157:9;50145:22;;;;;;;;;;;;;;;;;;;;;;;;;50122:45;50118:203;;;50184:48;50206:6;50214:9;50225:6;50184:21;:48::i;:::-;50118:203;;;50265:44;50283:6;50291:9;50302:6;50265:17;:44::i;:::-;50118:203;49988:333;49857:464;49724:597;50345:7;50341:41;;50367:15;:13;:15::i;:::-;50341:41;49556:834;;;;:::o;41800:163::-;41841:7;41862:15;41879;41898:19;:17;:19::i;:::-;41861:56;;;;41935:20;41947:7;41935;:11;;:20;;;;:::i;:::-;41928:27;;;;41800:163;:::o;6635:98::-;6693:7;6724:1;6720;:5;;;;:::i;:::-;6713:12;;6635:98;;;;:::o;47141:1000::-;33020:4;33001:16;;:23;;;;;;;;;;;;;;;;;;47277:12:::1;47292:27;47317:1;47292:20;:24;;:27;;;;:::i;:::-;47277:42;;47330:17;47350:30;47375:4;47350:20;:24;;:30;;;;:::i;:::-;47330:50;;47658:22;47683:21;47658:46;;47749:37;47766:4;47780;47749:16;:37::i;:::-;47917:18;47938:41;47964:14;47938:21;:25;;:41;;;;:::i;:::-;47917:62;;48029:35;48042:9;48053:10;48029:12;:35::i;:::-;48090:43;48105:4;48111:10;48123:9;48090:43;;;;;;;;:::i;:::-;;;;;;;;47215:926;;;;33066:5:::0;33047:16;;:24;;;;;;;;;;;;;;;;;;47141:1000;:::o;48149:185::-;48200:11;48214:20;;48200:34;;48268:1;48245:20;:24;;;;48280:46;48297:3;48302:23;;;;;;;;;;;48280:16;:46::i;:::-;48189:145;48149:185::o;44033:326::-;44090:1;44079:7;;:12;:34;;;;;44112:1;44095:13;;:18;44079:34;44076:46;;;44115:7;;44076:46;44160:7;;44142:15;:25;;;;44202:13;;44178:21;:37;;;;44250:13;;44226:21;:37;;;;44294:1;44284:7;:11;;;;44322:1;44306:13;:17;;;;44350:1;44334:13;:17;;;;44033:326;:::o;51724:677::-;51827:15;51844:23;51869:12;51883:23;51908:12;51922:18;51942;51964:19;51975:7;51964:10;:19::i;:::-;51826:157;;;;;;;;;;;;;;52012:28;52032:7;52012;:15;52020:6;52012:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51994:7;:15;52002:6;51994:15;;;;;;;;;;;;;;;:46;;;;52069:28;52089:7;52069;:15;52077:6;52069:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;52051:7;:15;52059:6;52051:15;;;;;;;;;;;;;;;:46;;;;52129:39;52152:15;52129:7;:18;52137:9;52129:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;52108:7;:18;52116:9;52108:18;;;;;;;;;;;;;;;:60;;;;52198:1;52185:10;:14;52182:53;;;52201:34;52216:6;52224:10;52201:14;:34::i;:::-;52182:53;52262:1;52249:10;:14;52246:53;;;52265:34;52280:6;52288:10;52265:14;:34::i;:::-;52246:53;52310:23;52322:4;52328;52310:11;:23::i;:::-;52366:9;52349:44;;52358:6;52349:44;;;52377:15;52349:44;;;;;;:::i;:::-;;;;;;;;51815:586;;;;;;;51724:677;;;:::o;51019:697::-;51120:15;51137:23;51162:12;51176:23;51201:12;51215:18;51235;51257:19;51268:7;51257:10;:19::i;:::-;51119:157;;;;;;;;;;;;;;51305:28;51325:7;51305;:15;51313:6;51305:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51287:7;:15;51295:6;51287:15;;;;;;;;;;;;;;;:46;;;;51365:39;51388:15;51365:7;:18;51373:9;51365:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51344:7;:18;51352:9;51344:18;;;;;;;;;;;;;;;:60;;;;51436:39;51459:15;51436:7;:18;51444:9;51436:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51415:7;:18;51423:9;51415:18;;;;;;;;;;;;;;;:60;;;;51513:1;51500:10;:14;51497:53;;;51516:34;51531:6;51539:10;51516:14;:34::i;:::-;51497:53;51577:1;51564:10;:14;51561:53;;;51580:34;51595:6;51603:10;51580:14;:34::i;:::-;51561:53;51625:23;51637:4;51643;51625:11;:23::i;:::-;51681:9;51664:44;;51673:6;51664:44;;;51692:15;51664:44;;;;;;:::i;:::-;;;;;;;;51108:608;;;;;;;51019:697;;;:::o;50398:613::-;50497:15;50514:23;50539:12;50553:23;50578:12;50592:18;50612;50634:19;50645:7;50634:10;:19::i;:::-;50496:157;;;;;;;;;;;;;;50682:28;50702:7;50682;:15;50690:6;50682:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50664:7;:15;50672:6;50664:15;;;;;;;;;;;;;;;:46;;;;50742:39;50765:15;50742:7;:18;50750:9;50742:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50721:7;:18;50729:9;50721:18;;;;;;;;;;;;;;;:60;;;;50808:1;50795:10;:14;50792:53;;;50811:34;50826:6;50834:10;50811:14;:34::i;:::-;50792:53;50872:1;50859:10;:14;50856:53;;;50875:34;50890:6;50898:10;50875:14;:34::i;:::-;50856:53;50920:23;50932:4;50938;50920:11;:23::i;:::-;50976:9;50959:44;;50968:6;50959:44;;;50987:15;50959:44;;;;;;:::i;:::-;;;;;;;;50485:526;;;;;;;50398:613;;;:::o;52409:753::-;52512:15;52529:23;52554:12;52568:23;52593:12;52607:18;52627;52649:19;52660:7;52649:10;:19::i;:::-;52511:157;;;;;;;;;;;;;;52697:28;52717:7;52697;:15;52705:6;52697:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;52679:7;:15;52687:6;52679:15;;;;;;;;;;;;;;;:46;;;;52754:28;52774:7;52754;:15;52762:6;52754:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;52736:7;:15;52744:6;52736:15;;;;;;;;;;;;;;;:46;;;;52814:39;52837:15;52814:7;:18;52822:9;52814:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;52793:7;:18;52801:9;52793:18;;;;;;;;;;;;;;;:60;;;;52885:39;52908:15;52885:7;:18;52893:9;52885:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;52864:7;:18;52872:9;52864:18;;;;;;;;;;;;;;;:60;;;;52959:1;52946:10;:14;52943:53;;;52962:34;52977:6;52985:10;52962:14;:34::i;:::-;52943:53;53023:1;53010:10;:14;53007:53;;;53026:34;53041:6;53049:10;53026:14;:34::i;:::-;53007:53;53071:23;53083:4;53089;53071:11;:23::i;:::-;53127:9;53110:44;;53119:6;53110:44;;;53138:15;53110:44;;;;;;:::i;:::-;;;;;;;;52500:662;;;;;;;52409:753;;;:::o;44371:173::-;44425:15;;44415:7;:25;;;;44467:21;;44451:13;:37;;;;44515:21;;44499:13;:37;;;;44371:173::o;41971:561::-;42021:7;42030;42050:15;42068:7;;42050:25;;42086:15;42104:7;;42086:25;;42133:9;42128:289;42152:9;:16;;;;42148:1;:20;42128:289;;;42218:7;42194;:21;42202:9;42212:1;42202:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42194:21;;;;;;;;;;;;;;;;:31;:66;;;;42253:7;42229;:21;42237:9;42247:1;42237:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42229:21;;;;;;;;;;;;;;;;:31;42194:66;42190:97;;;42270:7;;42279;;42262:25;;;;;;;;;42190:97;42312:34;42324:7;:21;42332:9;42342:1;42332:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42324:21;;;;;;;;;;;;;;;;42312:7;:11;;:34;;;;:::i;:::-;42302:44;;42371:34;42383:7;:21;42391:9;42401:1;42391:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42383:21;;;;;;;;;;;;;;;;42371:7;:11;;:34;;;;:::i;:::-;42361:44;;42170:3;;;;;:::i;:::-;;;;42128:289;;;;42441:20;42453:7;;42441;;:11;;:20;;;;:::i;:::-;42431:7;:30;42427:61;;;42471:7;;42480;;42463:25;;;;;;;;42427:61;42507:7;42516;42499:25;;;;;;41971:561;;;:::o;5879:98::-;5937:7;5968:1;5964;:5;;;;:::i;:::-;5957:12;;5879:98;;;;:::o;48346:608::-;48493:21;48531:1;48517:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48493:40;;48562:4;48544;48549:1;48544:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48588:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48578:4;48583:1;48578:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48623:62;48640:4;48655:15;48673:11;48623:8;:62::i;:::-;48724:15;:66;;;48805:11;48831:1;48875:4;48894:11;48920:15;48724:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48422:532;48346:608;;:::o;48962:513::-;49110:62;49127:4;49142:15;49160:11;49110:8;:62::i;:::-;49215:15;:31;;;49254:9;49287:4;49307:11;49333:1;49376;49419:7;:5;:7::i;:::-;49441:15;49215:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48962:513;;:::o;40351:472::-;40410:7;40419;40428;40437;40446;40455;40464;40485:23;40510:12;40524:18;40544;40566:20;40578:7;40566:11;:20::i;:::-;40484:102;;;;;;;;40598:15;40615:23;40640:12;40656:62;40668:7;40677:4;40683:10;40695;40707;:8;:10::i;:::-;40656:11;:62::i;:::-;40597:121;;;;;;40737:7;40746:15;40763:4;40769:15;40786:4;40792:10;40804;40729:86;;;;;;;;;;;;;;;;;;;;;40351:472;;;;;;;;;:::o;42544:476::-;42623:19;42646:10;:8;:10::i;:::-;42623:33;;42667:18;42688:27;42703:11;42688:10;:14;;:27;;;;:::i;:::-;42667:48;;42751:38;42778:10;42751:7;:22;42767:4;42751:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;42726:7;:22;42742:4;42726:22;;;;;;;;;;;;;;;:63;;;;42824:10;42800:20;;:34;;;;;;;:::i;:::-;;;;;;;;42849:11;:26;42869:4;42849:26;;;;;;;;;;;;;;;;;;;;;;;;;42846:107;;;42915:38;42942:10;42915:7;:22;42931:4;42915:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;42890:7;:22;42906:4;42890:22;;;;;;;;;;;;;;;:63;;;;42846:107;42994:4;42969:43;;42978:6;42969:43;;;43001:10;42969:43;;;;;;:::i;:::-;;;;;;;;42612:408;;42544:476;;:::o;43032:475::-;43111:19;43134:10;:8;:10::i;:::-;43111:33;;43155:18;43176:27;43191:11;43176:10;:14;;:27;;;;:::i;:::-;43155:48;;43239:38;43266:10;43239:7;:22;43255:4;43239:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;43214:7;:22;43230:4;43214:22;;;;;;;;;;;;;;;:63;;;;43312:10;43288:20;;:34;;;;;;;:::i;:::-;;;;;;;;43336:11;:26;43356:4;43336:26;;;;;;;;;;;;;;;;;;;;;;;;;43333:107;;;43402:38;43429:10;43402:7;:22;43418:4;43402:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;43377:7;:22;43393:4;43377:22;;;;;;;;;;;;;;;:63;;;;43333:107;43481:4;43456:43;;43465:6;43456:43;;;43488:10;43456:43;;;;;;:::i;:::-;;;;;;;;43100:407;;43032:475;;:::o;38368:147::-;38446:17;38458:4;38446:7;;:11;;:17;;;;:::i;:::-;38436:7;:27;;;;38487:20;38502:4;38487:10;;:14;;:20;;;;:::i;:::-;38474:10;:33;;;;38368:147;;:::o;40831:429::-;40891:7;40900;40909;40918;40938:12;40953:24;40969:7;40953:15;:24::i;:::-;40938:39;;40988:18;41009:30;41031:7;41009:21;:30::i;:::-;40988:51;;41050:18;41071:30;41093:7;41071:21;:30::i;:::-;41050:51;;41112:23;41138:49;41176:10;41138:33;41160:10;41138:17;41150:4;41138:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;41112:75;;41206:15;41223:4;41229:10;41241;41198:54;;;;;;;;;;;;40831:429;;;;;:::o;41268:524::-;41403:7;41412;41421;41441:15;41459:24;41471:11;41459:7;:11;;:24;;;;:::i;:::-;41441:42;;41494:12;41509:21;41518:11;41509:4;:8;;:21;;;;:::i;:::-;41494:36;;41541:18;41562:27;41577:11;41562:10;:14;;:27;;;;:::i;:::-;41541:48;;41600:18;41621:27;41636:11;41621:10;:14;;:27;;;;:::i;:::-;41600:48;;41659:23;41685:49;41723:10;41685:33;41707:10;41685:17;41697:4;41685:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;41659:75;;41753:7;41762:15;41779:4;41745:39;;;;;;;;;;;41268:524;;;;;;;;;:::o;6236:98::-;6294:7;6325:1;6321;:5;;;;:::i;:::-;6314:12;;6236:98;;;;:::o;43519:154::-;43583:7;43610:55;43649:5;43610:20;43622:7;;43610;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;43603:62;;43519:154;;;:::o;43855:166::-;43925:7;43952:61;43997:5;43952:26;43964:13;;43952:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;43945:68;;43855:166;;;:::o;43681:::-;43751:7;43778:61;43823:5;43778:26;43790:13;;43778:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;43771:68;;43681:166;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:474::-;2742:6;2750;2799:2;2787:9;2778:7;2774:23;2770:32;2767:119;;;2805:79;;:::i;:::-;2767:119;2925:1;2950:53;2995:7;2986:6;2975:9;2971:22;2950:53;:::i;:::-;2940:63;;2896:117;3052:2;3078:53;3123:7;3114:6;3103:9;3099:22;3078:53;:::i;:::-;3068:63;;3023:118;2674:474;;;;;:::o;3154:323::-;3210:6;3259:2;3247:9;3238:7;3234:23;3230:32;3227:119;;;3265:79;;:::i;:::-;3227:119;3385:1;3410:50;3452:7;3443:6;3432:9;3428:22;3410:50;:::i;:::-;3400:60;;3356:114;3154:323;;;;:::o;3483:345::-;3550:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:119;;;3605:79;;:::i;:::-;3567:119;3725:1;3750:61;3803:7;3794:6;3783:9;3779:22;3750:61;:::i;:::-;3740:71;;3696:125;3483:345;;;;:::o;3834:329::-;3893:6;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:53;4138:7;4129:6;4118:9;4114:22;4093:53;:::i;:::-;4083:63;;4039:117;3834:329;;;;:::o;4169:663::-;4257:6;4265;4273;4322:2;4310:9;4301:7;4297:23;4293:32;4290:119;;;4328:79;;:::i;:::-;4290:119;4448:1;4473:64;4529:7;4520:6;4509:9;4505:22;4473:64;:::i;:::-;4463:74;;4419:128;4586:2;4612:64;4668:7;4659:6;4648:9;4644:22;4612:64;:::i;:::-;4602:74;;4557:129;4725:2;4751:64;4807:7;4798:6;4787:9;4783:22;4751:64;:::i;:::-;4741:74;;4696:129;4169:663;;;;;:::o;4838:179::-;4907:10;4928:46;4970:3;4962:6;4928:46;:::i;:::-;5006:4;5001:3;4997:14;4983:28;;4838:179;;;;:::o;5023:108::-;5100:24;5118:5;5100:24;:::i;:::-;5095:3;5088:37;5023:108;;:::o;5137:118::-;5224:24;5242:5;5224:24;:::i;:::-;5219:3;5212:37;5137:118;;:::o;5291:732::-;5410:3;5439:54;5487:5;5439:54;:::i;:::-;5509:86;5588:6;5583:3;5509:86;:::i;:::-;5502:93;;5619:56;5669:5;5619:56;:::i;:::-;5698:7;5729:1;5714:284;5739:6;5736:1;5733:13;5714:284;;;5815:6;5809:13;5842:63;5901:3;5886:13;5842:63;:::i;:::-;5835:70;;5928:60;5981:6;5928:60;:::i;:::-;5918:70;;5774:224;5761:1;5758;5754:9;5749:14;;5714:284;;;5718:14;6014:3;6007:10;;5415:608;;;5291:732;;;;:::o;6029:109::-;6110:21;6125:5;6110:21;:::i;:::-;6105:3;6098:34;6029:109;;:::o;6144:185::-;6258:64;6316:5;6258:64;:::i;:::-;6253:3;6246:77;6144:185;;:::o;6335:147::-;6430:45;6469:5;6430:45;:::i;:::-;6425:3;6418:58;6335:147;;:::o;6488:364::-;6576:3;6604:39;6637:5;6604:39;:::i;:::-;6659:71;6723:6;6718:3;6659:71;:::i;:::-;6652:78;;6739:52;6784:6;6779:3;6772:4;6765:5;6761:16;6739:52;:::i;:::-;6816:29;6838:6;6816:29;:::i;:::-;6811:3;6807:39;6800:46;;6580:272;6488:364;;;;:::o;6858:366::-;7000:3;7021:67;7085:2;7080:3;7021:67;:::i;:::-;7014:74;;7097:93;7186:3;7097:93;:::i;:::-;7215:2;7210:3;7206:12;7199:19;;6858:366;;;:::o;7230:::-;7372:3;7393:67;7457:2;7452:3;7393:67;:::i;:::-;7386:74;;7469:93;7558:3;7469:93;:::i;:::-;7587:2;7582:3;7578:12;7571:19;;7230:366;;;:::o;7602:::-;7744:3;7765:67;7829:2;7824:3;7765:67;:::i;:::-;7758:74;;7841:93;7930:3;7841:93;:::i;:::-;7959:2;7954:3;7950:12;7943:19;;7602:366;;;:::o;7974:::-;8116:3;8137:67;8201:2;8196:3;8137:67;:::i;:::-;8130:74;;8213:93;8302:3;8213:93;:::i;:::-;8331:2;8326:3;8322:12;8315:19;;7974:366;;;:::o;8346:::-;8488:3;8509:67;8573:2;8568:3;8509:67;:::i;:::-;8502:74;;8585:93;8674:3;8585:93;:::i;:::-;8703:2;8698:3;8694:12;8687:19;;8346:366;;;:::o;8718:::-;8860:3;8881:67;8945:2;8940:3;8881:67;:::i;:::-;8874:74;;8957:93;9046:3;8957:93;:::i;:::-;9075:2;9070:3;9066:12;9059:19;;8718:366;;;:::o;9090:::-;9232:3;9253:67;9317:2;9312:3;9253:67;:::i;:::-;9246:74;;9329:93;9418:3;9329:93;:::i;:::-;9447:2;9442:3;9438:12;9431:19;;9090:366;;;:::o;9462:::-;9604:3;9625:67;9689:2;9684:3;9625:67;:::i;:::-;9618:74;;9701:93;9790:3;9701:93;:::i;:::-;9819:2;9814:3;9810:12;9803:19;;9462:366;;;:::o;9834:::-;9976:3;9997:67;10061:2;10056:3;9997:67;:::i;:::-;9990:74;;10073:93;10162:3;10073:93;:::i;:::-;10191:2;10186:3;10182:12;10175:19;;9834:366;;;:::o;10206:::-;10348:3;10369:67;10433:2;10428:3;10369:67;:::i;:::-;10362:74;;10445:93;10534:3;10445:93;:::i;:::-;10563:2;10558:3;10554:12;10547:19;;10206:366;;;:::o;10578:::-;10720:3;10741:67;10805:2;10800:3;10741:67;:::i;:::-;10734:74;;10817:93;10906:3;10817:93;:::i;:::-;10935:2;10930:3;10926:12;10919:19;;10578:366;;;:::o;10950:::-;11092:3;11113:67;11177:2;11172:3;11113:67;:::i;:::-;11106:74;;11189:93;11278:3;11189:93;:::i;:::-;11307:2;11302:3;11298:12;11291:19;;10950:366;;;:::o;11322:::-;11464:3;11485:67;11549:2;11544:3;11485:67;:::i;:::-;11478:74;;11561:93;11650:3;11561:93;:::i;:::-;11679:2;11674:3;11670:12;11663:19;;11322:366;;;:::o;11694:::-;11836:3;11857:67;11921:2;11916:3;11857:67;:::i;:::-;11850:74;;11933:93;12022:3;11933:93;:::i;:::-;12051:2;12046:3;12042:12;12035:19;;11694:366;;;:::o;12066:::-;12208:3;12229:67;12293:2;12288:3;12229:67;:::i;:::-;12222:74;;12305:93;12394:3;12305:93;:::i;:::-;12423:2;12418:3;12414:12;12407:19;;12066:366;;;:::o;12438:::-;12580:3;12601:67;12665:2;12660:3;12601:67;:::i;:::-;12594:74;;12677:93;12766:3;12677:93;:::i;:::-;12795:2;12790:3;12786:12;12779:19;;12438:366;;;:::o;12810:::-;12952:3;12973:67;13037:2;13032:3;12973:67;:::i;:::-;12966:74;;13049:93;13138:3;13049:93;:::i;:::-;13167:2;13162:3;13158:12;13151:19;;12810:366;;;:::o;13182:118::-;13269:24;13287:5;13269:24;:::i;:::-;13264:3;13257:37;13182:118;;:::o;13306:112::-;13389:22;13405:5;13389:22;:::i;:::-;13384:3;13377:35;13306:112;;:::o;13424:222::-;13517:4;13555:2;13544:9;13540:18;13532:26;;13568:71;13636:1;13625:9;13621:17;13612:6;13568:71;:::i;:::-;13424:222;;;;:::o;13652:442::-;13801:4;13839:2;13828:9;13824:18;13816:26;;13852:71;13920:1;13909:9;13905:17;13896:6;13852:71;:::i;:::-;13933:72;14001:2;13990:9;13986:18;13977:6;13933:72;:::i;:::-;14015;14083:2;14072:9;14068:18;14059:6;14015:72;:::i;:::-;13652:442;;;;;;:::o;14100:332::-;14221:4;14259:2;14248:9;14244:18;14236:26;;14272:71;14340:1;14329:9;14325:17;14316:6;14272:71;:::i;:::-;14353:72;14421:2;14410:9;14406:18;14397:6;14353:72;:::i;:::-;14100:332;;;;;:::o;14438:807::-;14687:4;14725:3;14714:9;14710:19;14702:27;;14739:71;14807:1;14796:9;14792:17;14783:6;14739:71;:::i;:::-;14820:72;14888:2;14877:9;14873:18;14864:6;14820:72;:::i;:::-;14902:80;14978:2;14967:9;14963:18;14954:6;14902:80;:::i;:::-;14992;15068:2;15057:9;15053:18;15044:6;14992:80;:::i;:::-;15082:73;15150:3;15139:9;15135:19;15126:6;15082:73;:::i;:::-;15165;15233:3;15222:9;15218:19;15209:6;15165:73;:::i;:::-;14438:807;;;;;;;;;:::o;15251:210::-;15338:4;15376:2;15365:9;15361:18;15353:26;;15389:65;15451:1;15440:9;15436:17;15427:6;15389:65;:::i;:::-;15251:210;;;;:::o;15467:276::-;15587:4;15625:2;15614:9;15610:18;15602:26;;15638:98;15733:1;15722:9;15718:17;15709:6;15638:98;:::i;:::-;15467:276;;;;:::o;15749:313::-;15862:4;15900:2;15889:9;15885:18;15877:26;;15949:9;15943:4;15939:20;15935:1;15924:9;15920:17;15913:47;15977:78;16050:4;16041:6;15977:78;:::i;:::-;15969:86;;15749:313;;;;:::o;16068:419::-;16234:4;16272:2;16261:9;16257:18;16249:26;;16321:9;16315:4;16311:20;16307:1;16296:9;16292:17;16285:47;16349:131;16475:4;16349:131;:::i;:::-;16341:139;;16068:419;;;:::o;16493:::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:::-;17084:4;17122:2;17111:9;17107:18;17099:26;;17171:9;17165:4;17161:20;17157:1;17146:9;17142:17;17135:47;17199:131;17325:4;17199:131;:::i;:::-;17191:139;;16918:419;;;:::o;17343:::-;17509:4;17547:2;17536:9;17532:18;17524:26;;17596:9;17590:4;17586:20;17582:1;17571:9;17567:17;17560:47;17624:131;17750:4;17624:131;:::i;:::-;17616:139;;17343:419;;;:::o;17768:::-;17934:4;17972:2;17961:9;17957:18;17949:26;;18021:9;18015:4;18011:20;18007:1;17996:9;17992:17;17985:47;18049:131;18175:4;18049:131;:::i;:::-;18041:139;;17768:419;;;:::o;18193:::-;18359:4;18397:2;18386:9;18382:18;18374:26;;18446:9;18440:4;18436:20;18432:1;18421:9;18417:17;18410:47;18474:131;18600:4;18474:131;:::i;:::-;18466:139;;18193:419;;;:::o;18618:::-;18784:4;18822:2;18811:9;18807:18;18799:26;;18871:9;18865:4;18861:20;18857:1;18846:9;18842:17;18835:47;18899:131;19025:4;18899:131;:::i;:::-;18891:139;;18618:419;;;:::o;19043:::-;19209:4;19247:2;19236:9;19232:18;19224:26;;19296:9;19290:4;19286:20;19282:1;19271:9;19267:17;19260:47;19324:131;19450:4;19324:131;:::i;:::-;19316:139;;19043:419;;;:::o;19468:::-;19634:4;19672:2;19661:9;19657:18;19649:26;;19721:9;19715:4;19711:20;19707:1;19696:9;19692:17;19685:47;19749:131;19875:4;19749:131;:::i;:::-;19741:139;;19468:419;;;:::o;19893:::-;20059:4;20097:2;20086:9;20082:18;20074:26;;20146:9;20140:4;20136:20;20132:1;20121:9;20117:17;20110:47;20174:131;20300:4;20174:131;:::i;:::-;20166:139;;19893:419;;;:::o;20318:::-;20484:4;20522:2;20511:9;20507:18;20499:26;;20571:9;20565:4;20561:20;20557:1;20546:9;20542:17;20535:47;20599:131;20725:4;20599:131;:::i;:::-;20591:139;;20318:419;;;:::o;20743:::-;20909:4;20947:2;20936:9;20932:18;20924:26;;20996:9;20990:4;20986:20;20982:1;20971:9;20967:17;20960:47;21024:131;21150:4;21024:131;:::i;:::-;21016:139;;20743:419;;;:::o;21168:::-;21334:4;21372:2;21361:9;21357:18;21349:26;;21421:9;21415:4;21411:20;21407:1;21396:9;21392:17;21385:47;21449:131;21575:4;21449:131;:::i;:::-;21441:139;;21168:419;;;:::o;21593:::-;21759:4;21797:2;21786:9;21782:18;21774:26;;21846:9;21840:4;21836:20;21832:1;21821:9;21817:17;21810:47;21874:131;22000:4;21874:131;:::i;:::-;21866:139;;21593:419;;;:::o;22018:::-;22184:4;22222:2;22211:9;22207:18;22199:26;;22271:9;22265:4;22261:20;22257:1;22246:9;22242:17;22235:47;22299:131;22425:4;22299:131;:::i;:::-;22291:139;;22018:419;;;:::o;22443:::-;22609:4;22647:2;22636:9;22632:18;22624:26;;22696:9;22690:4;22686:20;22682:1;22671:9;22667:17;22660:47;22724:131;22850:4;22724:131;:::i;:::-;22716:139;;22443:419;;;:::o;22868:::-;23034:4;23072:2;23061:9;23057:18;23049:26;;23121:9;23115:4;23111:20;23107:1;23096:9;23092:17;23085:47;23149:131;23275:4;23149:131;:::i;:::-;23141:139;;22868:419;;;:::o;23293:222::-;23386:4;23424:2;23413:9;23409:18;23401:26;;23437:71;23505:1;23494:9;23490:17;23481:6;23437:71;:::i;:::-;23293:222;;;;:::o;23521:831::-;23784:4;23822:3;23811:9;23807:19;23799:27;;23836:71;23904:1;23893:9;23889:17;23880:6;23836:71;:::i;:::-;23917:80;23993:2;23982:9;23978:18;23969:6;23917:80;:::i;:::-;24044:9;24038:4;24034:20;24029:2;24018:9;24014:18;24007:48;24072:108;24175:4;24166:6;24072:108;:::i;:::-;24064:116;;24190:72;24258:2;24247:9;24243:18;24234:6;24190:72;:::i;:::-;24272:73;24340:3;24329:9;24325:19;24316:6;24272:73;:::i;:::-;23521:831;;;;;;;;:::o;24358:442::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24558:71;24626:1;24615:9;24611:17;24602:6;24558:71;:::i;:::-;24639:72;24707:2;24696:9;24692:18;24683:6;24639:72;:::i;:::-;24721;24789:2;24778:9;24774:18;24765:6;24721:72;:::i;:::-;24358:442;;;;;;:::o;24806:214::-;24895:4;24933:2;24922:9;24918:18;24910:26;;24946:67;25010:1;24999:9;24995:17;24986:6;24946:67;:::i;:::-;24806:214;;;;:::o;25107:132::-;25174:4;25197:3;25189:11;;25227:4;25222:3;25218:14;25210:22;;25107:132;;;:::o;25245:114::-;25312:6;25346:5;25340:12;25330:22;;25245:114;;;:::o;25365:99::-;25417:6;25451:5;25445:12;25435:22;;25365:99;;;:::o;25470:113::-;25540:4;25572;25567:3;25563:14;25555:22;;25470:113;;;:::o;25589:184::-;25688:11;25722:6;25717:3;25710:19;25762:4;25757:3;25753:14;25738:29;;25589:184;;;;:::o;25779:169::-;25863:11;25897:6;25892:3;25885:19;25937:4;25932:3;25928:14;25913:29;;25779:169;;;;:::o;25954:305::-;25994:3;26013:20;26031:1;26013:20;:::i;:::-;26008:25;;26047:20;26065:1;26047:20;:::i;:::-;26042:25;;26201:1;26133:66;26129:74;26126:1;26123:81;26120:107;;;26207:18;;:::i;:::-;26120:107;26251:1;26248;26244:9;26237:16;;25954:305;;;;:::o;26265:185::-;26305:1;26322:20;26340:1;26322:20;:::i;:::-;26317:25;;26356:20;26374:1;26356:20;:::i;:::-;26351:25;;26395:1;26385:35;;26400:18;;:::i;:::-;26385:35;26442:1;26439;26435:9;26430:14;;26265:185;;;;:::o;26456:348::-;26496:7;26519:20;26537:1;26519:20;:::i;:::-;26514:25;;26553:20;26571:1;26553:20;:::i;:::-;26548:25;;26741:1;26673:66;26669:74;26666:1;26663:81;26658:1;26651:9;26644:17;26640:105;26637:131;;;26748:18;;:::i;:::-;26637:131;26796:1;26793;26789:9;26778:20;;26456:348;;;;:::o;26810:191::-;26850:4;26870:20;26888:1;26870:20;:::i;:::-;26865:25;;26904:20;26922:1;26904:20;:::i;:::-;26899:25;;26943:1;26940;26937:8;26934:34;;;26948:18;;:::i;:::-;26934:34;26993:1;26990;26986:9;26978:17;;26810:191;;;;:::o;27007:96::-;27044:7;27073:24;27091:5;27073:24;:::i;:::-;27062:35;;27007:96;;;:::o;27109:90::-;27143:7;27186:5;27179:13;27172:21;27161:32;;27109:90;;;:::o;27205:126::-;27242:7;27282:42;27275:5;27271:54;27260:65;;27205:126;;;:::o;27337:77::-;27374:7;27403:5;27392:16;;27337:77;;;:::o;27420:86::-;27455:7;27495:4;27488:5;27484:16;27473:27;;27420:86;;;:::o;27512:153::-;27589:9;27622:37;27653:5;27622:37;:::i;:::-;27609:50;;27512:153;;;:::o;27671:121::-;27729:9;27762:24;27780:5;27762:24;:::i;:::-;27749:37;;27671:121;;;:::o;27798:126::-;27848:9;27881:37;27912:5;27881:37;:::i;:::-;27868:50;;27798:126;;;:::o;27930:113::-;27980:9;28013:24;28031:5;28013:24;:::i;:::-;28000:37;;27930:113;;;:::o;28049:307::-;28117:1;28127:113;28141:6;28138:1;28135:13;28127:113;;;28226:1;28221:3;28217:11;28211:18;28207:1;28202:3;28198:11;28191:39;28163:2;28160:1;28156:10;28151:15;;28127:113;;;28258:6;28255:1;28252:13;28249:101;;;28338:1;28329:6;28324:3;28320:16;28313:27;28249:101;28098:258;28049:307;;;:::o;28362:233::-;28401:3;28424:24;28442:5;28424:24;:::i;:::-;28415:33;;28470:66;28463:5;28460:77;28457:103;;;28540:18;;:::i;:::-;28457:103;28587:1;28580:5;28576:13;28569:20;;28362:233;;;:::o;28601:180::-;28649:77;28646:1;28639:88;28746:4;28743:1;28736:15;28770:4;28767:1;28760:15;28787:180;28835:77;28832:1;28825:88;28932:4;28929:1;28922:15;28956:4;28953:1;28946:15;28973:180;29021:77;29018:1;29011:88;29118:4;29115:1;29108:15;29142:4;29139:1;29132:15;29159:180;29207:77;29204:1;29197:88;29304:4;29301:1;29294:15;29328:4;29325:1;29318:15;29345:180;29393:77;29390:1;29383:88;29490:4;29487:1;29480:15;29514:4;29511:1;29504:15;29654:117;29763:1;29760;29753:12;29777:102;29818:6;29869:2;29865:7;29860:2;29853:5;29849:14;29845:28;29835:38;;29777:102;;;:::o;29885:222::-;30025:34;30021:1;30013:6;30009:14;30002:58;30094:5;30089:2;30081:6;30077:15;30070:30;29885:222;:::o;30113:170::-;30253:22;30249:1;30241:6;30237:14;30230:46;30113:170;:::o;30289:229::-;30429:34;30425:1;30417:6;30413:14;30406:58;30498:12;30493:2;30485:6;30481:15;30474:37;30289:229;:::o;30524:225::-;30664:34;30660:1;30652:6;30648:14;30641:58;30733:8;30728:2;30720:6;30716:15;30709:33;30524:225;:::o;30755:221::-;30895:34;30891:1;30883:6;30879:14;30872:58;30964:4;30959:2;30951:6;30947:15;30940:29;30755:221;:::o;30982:242::-;31122:34;31118:1;31110:6;31106:14;31099:58;31191:25;31186:2;31178:6;31174:15;31167:50;30982:242;:::o;31230:177::-;31370:29;31366:1;31358:6;31354:14;31347:53;31230:177;:::o;31413:231::-;31553:34;31549:1;31541:6;31537:14;31530:58;31622:14;31617:2;31609:6;31605:15;31598:39;31413:231;:::o;31650:177::-;31790:29;31786:1;31778:6;31774:14;31767:53;31650:177;:::o;31833:166::-;31973:18;31969:1;31961:6;31957:14;31950:42;31833:166;:::o;32005:182::-;32145:34;32141:1;32133:6;32129:14;32122:58;32005:182;:::o;32193:178::-;32333:30;32329:1;32321:6;32317:14;32310:54;32193:178;:::o;32377:240::-;32517:34;32513:1;32505:6;32501:14;32494:58;32586:23;32581:2;32573:6;32569:15;32562:48;32377:240;:::o;32623:224::-;32763:34;32759:1;32751:6;32747:14;32740:58;32832:7;32827:2;32819:6;32815:15;32808:32;32623:224;:::o;32853:223::-;32993:34;32989:1;32981:6;32977:14;32970:58;33062:6;33057:2;33049:6;33045:15;33038:31;32853:223;:::o;33082:238::-;33222:34;33218:1;33210:6;33206:14;33199:58;33291:21;33286:2;33278:6;33274:15;33267:46;33082:238;:::o;33326:223::-;33466:34;33462:1;33454:6;33450:14;33443:58;33535:6;33530:2;33522:6;33518:15;33511:31;33326:223;:::o;33555:122::-;33628:24;33646:5;33628:24;:::i;:::-;33621:5;33618:35;33608:63;;33667:1;33664;33657:12;33608:63;33555:122;:::o;33683:116::-;33753:21;33768:5;33753:21;:::i;:::-;33746:5;33743:32;33733:60;;33789:1;33786;33779:12;33733:60;33683:116;:::o;33805:122::-;33878:24;33896:5;33878:24;:::i;:::-;33871:5;33868:35;33858:63;;33917:1;33914;33907:12;33858:63;33805:122;:::o

Swarm Source

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