ETH Price: $2,429.01 (+0.26%)

Token

Legion X Capital ($LEGION)
 

Overview

Max Total Supply

10,000,000,000 $LEGION

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
92,163,096.551059695 $LEGION

Value
$0.00
0x6745143167a2a985b5507de0179428ba8e4bb0ff
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LEGION

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.3;

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @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() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    address private _tradingWalletAddress = 0xa6fc46fa154CAC08901D2D533a4e3d1df29620b0;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Legion X Capital";
    string private _symbol = "$LEGION";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _tradingFee = 7;
    uint256 private _previoustradingFee = _tradingFee;
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;
    bool public swapAndLiquifyEnabled = true;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    
    
    uint256 public _maxTxAmount = 1000000000 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 1000000000 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        //MainNet
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 ttrading) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _taketrading(ttrading);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
        function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function settradingFeePercent(uint256 tradingFee) external onlyOwner() {
        _tradingFee = tradingFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    
     function setSwapAtTokens(uint256 newVal) external onlyOwner() {
        numTokensSellToAddToLiquidity = newVal;
    }
    
    function setTradingWallet(address newAdd) external onlyOwner() {
        _tradingWalletAddress = newAdd;
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _taketrading(uint256 ttrading) private {
        uint256 currentRate =  _getRate();
        uint256 rtrading = ttrading.mul(currentRate);
        _rOwned[_tradingWalletAddress] = _rOwned[_tradingWalletAddress].add(rtrading);
        if(_isExcluded[_tradingWalletAddress])
            _tOwned[_tradingWalletAddress] = _tOwned[_tradingWalletAddress].add(ttrading);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()){
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

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

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

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

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

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

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

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

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

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

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

    //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 ttrading) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _taketrading(ttrading);
        _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 ttrading) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _taketrading(ttrading);
        _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 ttrading) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _taketrading(ttrading);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setSwapAtTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdd","type":"address"}],"name":"setTradingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradingFee","type":"uint256"}],"name":"settradingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273a6fc46fa154cac08901d2d533a4e3d1df29620b0600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550678ac7230489e8000060085560085460001962000077919062000844565b60001962000086919062000795565b6009556040518060400160405280601081526020017f4c6567696f6e2058204361706974616c00000000000000000000000000000000815250600b9080519060200190620000d692919062000636565b506040518060400160405280600781526020017f244c4547494f4e00000000000000000000000000000000000000000000000000815250600c90805190602001906200012492919062000636565b506009600d60006101000a81548160ff021916908360ff1602179055506003600e55600e54600f55600760105560105460115560006012556012546013556001601460006101000a81548160ff021916908315150217905550670de0b6b3a7640000601555670de0b6b3a7640000601655348015620001a257600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360095460016000620002756200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031357600080fd5b505afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e9190620006fd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b157600080fd5b505afa158015620003c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ec9190620006fd565b6040518363ffffffff1660e01b81526004016200040b9291906200074b565b602060405180830381600087803b1580156200042657600080fd5b505af11580156200043b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004619190620006fd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004e46200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200059d6200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620005fe919062000778565b60405180910390a35062000923565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000644906200080e565b90600052602060002090601f016020900481019282620006685760008555620006b4565b82601f106200068357805160ff1916838001178555620006b4565b82800160010185558215620006b4579182015b82811115620006b357825182559160200191906001019062000696565b5b509050620006c39190620006c7565b5090565b5b80821115620006e2576000816000905550600101620006c8565b5090565b600081519050620006f78162000909565b92915050565b6000602082840312156200071057600080fd5b60006200072084828501620006e6565b91505092915050565b6200073481620007d0565b82525050565b620007458162000804565b82525050565b600060408201905062000762600083018562000729565b62000771602083018462000729565b9392505050565b60006020820190506200078f60008301846200073a565b92915050565b6000620007a28262000804565b9150620007af8362000804565b925082821015620007c557620007c46200087c565b5b828203905092915050565b6000620007dd82620007e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200082757607f821691505b602082108114156200083e576200083d620008da565b5b50919050565b6000620008518262000804565b91506200085e8362000804565b925082620008715762000870620008ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200091481620007d0565b81146200092057600080fd5b50565b60805160601c60a05160601c6152f662000979600039600081816114a9015261258c015260008181610b370152818161315c015281816132720152818161329901528181613335015261335c01526152f66000f3fe6080604052600436106102295760003560e01c80634a74bb02116101235780638da5cb5b116100ab578063c49b9a801161006f578063c49b9a801461084e578063d543dbeb14610877578063dd62ed3e146108a0578063ea2f0b37146108dd578063f2fde38b1461090657610230565b80638da5cb5b146107555780638ee88c531461078057806395d89b41146107a9578063a457c2d7146107d4578063a9059cbb1461081157610230565b80636bc87c3a116100f25780636bc87c3a1461066e57806370a0823114610699578063715018a6146106d65780637d1db4a5146106ed57806388f820201461071857610230565b80634a74bb02146105b457806352390c02146105df5780635282a951146106085780635342acb41461063157610230565b80632d838119116101b15780633bd5d173116101755780633bd5d173146104d1578063437823ec146104fa5780634549b039146105235780634881370f1461056057806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce567146104155780633685d4191461044057806339509351146104695780633b124fe7146104a657610230565b806312c7b6bf116101f857806312c7b6bf146102ef57806313114a9d1461031a5780631694505e1461034557806318160ddd1461037057806323b872dd1461039b57610230565b80630320cd2314610235578063061c82d01461025e57806306fdde0314610287578063095ea7b3146102b257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614372565b61092f565b005b34801561026a57600080fd5b50610285600480360381019061028091906144b4565b6109ef565b005b34801561029357600080fd5b5061029c610a75565b6040516102a991906148f9565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d4919061444f565b610b07565b6040516102e691906148c3565b60405180910390f35b3480156102fb57600080fd5b50610304610b25565b6040516103119190614abb565b60405180910390f35b34801561032657600080fd5b5061032f610b2b565b60405161033c9190614abb565b60405180910390f35b34801561035157600080fd5b5061035a610b35565b60405161036791906148de565b60405180910390f35b34801561037c57600080fd5b50610385610b59565b6040516103929190614abb565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614400565b610b63565b6040516103cf91906148c3565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906144b4565b610c3c565b60405161040c9190614abb565b60405180910390f35b34801561042157600080fd5b5061042a610caa565b6040516104379190614b67565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190614372565b610cc1565b005b34801561047557600080fd5b50610490600480360381019061048b919061444f565b61108f565b60405161049d91906148c3565b60405180910390f35b3480156104b257600080fd5b506104bb611142565b6040516104c89190614abb565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906144b4565b611148565b005b34801561050657600080fd5b50610521600480360381019061051c9190614372565b6112c4565b005b34801561052f57600080fd5b5061054a600480360381019061054591906144dd565b61139b565b6040516105579190614abb565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906144b4565b611421565b005b34801561059557600080fd5b5061059e6114a7565b6040516105ab9190614847565b60405180910390f35b3480156105c057600080fd5b506105c96114cb565b6040516105d691906148c3565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614372565b6114de565b005b34801561061457600080fd5b5061062f600480360381019061062a91906144b4565b611779565b005b34801561063d57600080fd5b5061065860048036038101906106539190614372565b6117ff565b60405161066591906148c3565b60405180910390f35b34801561067a57600080fd5b50610683611855565b6040516106909190614abb565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190614372565b61185b565b6040516106cd9190614abb565b60405180910390f35b3480156106e257600080fd5b506106eb611946565b005b3480156106f957600080fd5b50610702611a80565b60405161070f9190614abb565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190614372565b611a86565b60405161074c91906148c3565b60405180910390f35b34801561076157600080fd5b5061076a611adc565b6040516107779190614847565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906144b4565b611b05565b005b3480156107b557600080fd5b506107be611b8b565b6040516107cb91906148f9565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061444f565b611c1d565b60405161080891906148c3565b60405180910390f35b34801561081d57600080fd5b506108386004803603810190610833919061444f565b611cea565b60405161084591906148c3565b60405180910390f35b34801561085a57600080fd5b506108756004803603810190610870919061448b565b611d08565b005b34801561088357600080fd5b5061089e600480360381019061089991906144b4565b611dd8565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906143c4565b611e85565b6040516108d49190614abb565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190614372565b611f0c565b005b34801561091257600080fd5b5061092d60048036038101906109289190614372565b611fe3565b005b61093761218c565b73ffffffffffffffffffffffffffffffffffffffff16610955611adc565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290614a1b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109f761218c565b73ffffffffffffffffffffffffffffffffffffffff16610a15611adc565b73ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290614a1b565b60405180910390fd5b80600e8190555050565b6060600b8054610a8490614daa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab090614daa565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b1b610b1461218c565b8484612194565b6001905092915050565b60105481565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610b7084848461235f565b610c3184610b7c61218c565b610c2c8560405180606001604052806028815260200161527460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be261218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cc9092919063ffffffff16565b612194565b600190509392505050565b6000600954821115610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a9061493b565b60405180910390fd5b6000610c8d612721565b9050610ca2818461274c90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610cc961218c565b73ffffffffffffffffffffffffffffffffffffffff16610ce7611adc565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490614a1b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906149bb565b60405180910390fd5b60005b60068054905081101561108b578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110785760066001600680549050610e859190614cb8565b81548110610ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061103e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561108b565b808061108390614ddc565b915050610dcc565b5050565b600061113861109c61218c565b8461113385600360006110ad61218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b612194565b6001905092915050565b600e5481565b600061115261218c565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890614a9b565b60405180910390fd5b60006111ec83612778565b505050505050905061124681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061129e816009546127e090919063ffffffff16565b6009819055506112b983600a5461276290919063ffffffff16565b600a81905550505050565b6112cc61218c565b73ffffffffffffffffffffffffffffffffffffffff166112ea611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790614a1b565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906149db565b60405180910390fd5b816114035760006113f284612778565b50505050505090508091505061141b565b600061140e84612778565b5050505050915050809150505b92915050565b61142961218c565b73ffffffffffffffffffffffffffffffffffffffff16611447611adc565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490614a1b565b60405180910390fd5b8060168190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460009054906101000a900460ff1681565b6114e661218c565b73ffffffffffffffffffffffffffffffffffffffff16611504611adc565b73ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614a1b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061499b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116bb57611677600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61178161218c565b73ffffffffffffffffffffffffffffffffffffffff1661179f611adc565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614a1b565b60405180910390fd5b8060108190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611941565b61193e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c565b90505b919050565b61194e61218c565b73ffffffffffffffffffffffffffffffffffffffff1661196c611adc565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0d61218c565b73ffffffffffffffffffffffffffffffffffffffff16611b2b611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614a1b565b60405180910390fd5b8060128190555050565b6060600c8054611b9a90614daa565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc690614daa565b8015611c135780601f10611be857610100808354040283529160200191611c13565b820191906000526020600020905b815481529060010190602001808311611bf657829003601f168201915b5050505050905090565b6000611ce0611c2a61218c565b84611cdb8560405180606001604052806025815260200161529c6025913960036000611c5461218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cc9092919063ffffffff16565b612194565b6001905092915050565b6000611cfe611cf761218c565b848461235f565b6001905092915050565b611d1061218c565b73ffffffffffffffffffffffffffffffffffffffff16611d2e611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614a1b565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dcd91906148c3565b60405180910390a150565b611de061218c565b73ffffffffffffffffffffffffffffffffffffffff16611dfe611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90614a1b565b60405180910390fd5b611e7c6064611e6e836008546127f690919063ffffffff16565b61274c90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1461218c565b73ffffffffffffffffffffffffffffffffffffffff16611f32611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614a1b565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611feb61218c565b73ffffffffffffffffffffffffffffffffffffffff16612009611adc565b73ffffffffffffffffffffffffffffffffffffffff161461205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c69061495b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614a7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061497b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123529190614abb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614a5b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124369061491b565b60405180910390fd5b60008111612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614a3b565b60405180910390fd5b61248a611adc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f857506124c8611adc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561254357601554811115612542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612539906149fb565b60405180910390fd5b5b600061254e3061185b565b9050601554811061255f5760155490505b600060165482101590508080156125835750601460019054906101000a900460ff16155b80156125db57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125f35750601460009054906101000a900460ff165b156126075760165491506126068261280c565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ae5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126b857600090505b6126c4868686846128e2565b505050505050565b6000838311158290612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b91906148f9565b60405180910390fd5b5082840390509392505050565b600080600061272e612bf3565b91509150612745818361274c90919063ffffffff16565b9250505090565b6000818361275a9190614c2d565b905092915050565b600081836127709190614bd7565b905092915050565b60008060008060008060008060008060006127928c612f3e565b935093509350935060008060006127b38f8787876127ae612721565b612fbd565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836127ee9190614cb8565b905092915050565b600081836128049190614c5e565b905092915050565b6001601460016101000a81548160ff021916908315150217905550600061283d60028361274c90919063ffffffff16565b9050600061285482846127e090919063ffffffff16565b9050600047905061286483613071565b600061287982476127e090919063ffffffff16565b9050612885838261332f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128b893929190614b30565b60405180910390a1505050506000601460016101000a81548160ff02191690831515021790555050565b806128f0576128ef61341f565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129935750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129a8576129a3848484613473565b612bdf565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a4b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6057612a5b8484846136e1565b612bde565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b045750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1957612b1484848461394f565b612bdd565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bd057612bcb848484613b28565b612bdc565b612bdb84848461394f565b5b5b5b5b80612bed57612bec613e2b565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612f0157826001600060068481548110612c53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d675750816002600060068481548110612cff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612d7e5760095460085494509450505050612f3a565b612e346001600060068481548110612dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127e090919063ffffffff16565b9250612eec6002600060068481548110612e77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127e090919063ffffffff16565b91508080612ef990614ddc565b915050612c07565b50612f1960085460095461274c90919063ffffffff16565b821015612f3157600954600854935093505050612f3a565b81819350935050505b9091565b6000806000806000612f4f86613e48565b90506000612f5c87613e79565b90506000612f6988613eaa565b90506000612fa482612f9685612f88888e6127e090919063ffffffff16565b6127e090919063ffffffff16565b6127e090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612fd6858a6127f690919063ffffffff16565b90506000612fed868a6127f690919063ffffffff16565b90506000613004878a6127f690919063ffffffff16565b9050600061301b888a6127f690919063ffffffff16565b90506000613056826130488561303a888a6127e090919063ffffffff16565b6127e090919063ffffffff16565b6127e090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156130b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130e25781602001602082028036833780820191505090505b5090503081600081518110613120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c057600080fd5b505afa1580156131d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f8919061439b565b81600181518110613232577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613297307f000000000000000000000000000000000000000000000000000000000000000084612194565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132f9959493929190614ad6565b600060405180830381600087803b15801561331357600080fd5b505af1158015613327573d6000803e3d6000fd5b505050505050565b61335a307f000000000000000000000000000000000000000000000000000000000000000084612194565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133a4611adc565b426040518863ffffffff1660e01b81526004016133c696959493929190614862565b6060604051808303818588803b1580156133df57600080fd5b505af11580156133f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134189190614519565b5050505050565b6000600e5414801561343357506000601254145b1561343d57613471565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b600080600080600080600061348788612778565b96509650965096509650965096506134e788600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061365d82613edb565b61366681614080565b61367085846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136cd9190614abb565b60405180910390a350505050505050505050565b60008060008060008060006136f588612778565b965096509650965096509650965061375587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ea84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138cb82613edb565b6138d481614080565b6138de85846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161393b9190614abb565b60405180910390a350505050505050505050565b600080600080600080600061396388612778565b96509650965096509650965096506139c387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa482613edb565b613aad81614080565b613ab785846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b149190614abb565b60405180910390a350505050505050505050565b6000806000806000806000613b3c88612778565b9650965096509650965096509650613b9c88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc684600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5b86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613da782613edb565b613db081614080565b613dba85846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e179190614abb565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613e726064613e64600e54856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ea36064613e95601254856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ed46064613ec6601054856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ee5612721565b90506000613efc82846127f690919063ffffffff16565b9050613f5081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561407b5761403783600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061408a612721565b905060006140a182846127f690919063ffffffff16565b90506141178160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ca576142648360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6142e4826009546127e090919063ffffffff16565b6009819055506142ff81600a5461276290919063ffffffff16565b600a819055505050565b6000813590506143188161522e565b92915050565b60008151905061432d8161522e565b92915050565b60008135905061434281615245565b92915050565b6000813590506143578161525c565b92915050565b60008151905061436c8161525c565b92915050565b60006020828403121561438457600080fd5b600061439284828501614309565b91505092915050565b6000602082840312156143ad57600080fd5b60006143bb8482850161431e565b91505092915050565b600080604083850312156143d757600080fd5b60006143e585828601614309565b92505060206143f685828601614309565b9150509250929050565b60008060006060848603121561441557600080fd5b600061442386828701614309565b935050602061443486828701614309565b925050604061444586828701614348565b9150509250925092565b6000806040838503121561446257600080fd5b600061447085828601614309565b925050602061448185828601614348565b9150509250929050565b60006020828403121561449d57600080fd5b60006144ab84828501614333565b91505092915050565b6000602082840312156144c657600080fd5b60006144d484828501614348565b91505092915050565b600080604083850312156144f057600080fd5b60006144fe85828601614348565b925050602061450f85828601614333565b9150509250929050565b60008060006060848603121561452e57600080fd5b600061453c8682870161435d565b935050602061454d8682870161435d565b925050604061455e8682870161435d565b9150509250925092565b60006145748383614580565b60208301905092915050565b61458981614cec565b82525050565b61459881614cec565b82525050565b60006145a982614b92565b6145b38185614bb5565b93506145be83614b82565b8060005b838110156145ef5781516145d68882614568565b97506145e183614ba8565b9250506001810190506145c2565b5085935050505092915050565b61460581614cfe565b82525050565b61461481614d41565b82525050565b61462381614d65565b82525050565b600061463482614b9d565b61463e8185614bc6565b935061464e818560208601614d77565b61465781614eb2565b840191505092915050565b600061466f602383614bc6565b915061467a82614ec3565b604082019050919050565b6000614692602a83614bc6565b915061469d82614f12565b604082019050919050565b60006146b5602683614bc6565b91506146c082614f61565b604082019050919050565b60006146d8602283614bc6565b91506146e382614fb0565b604082019050919050565b60006146fb601b83614bc6565b915061470682614fff565b602082019050919050565b600061471e601b83614bc6565b915061472982615028565b602082019050919050565b6000614741601f83614bc6565b915061474c82615051565b602082019050919050565b6000614764602883614bc6565b915061476f8261507a565b604082019050919050565b6000614787602083614bc6565b9150614792826150c9565b602082019050919050565b60006147aa602983614bc6565b91506147b5826150f2565b604082019050919050565b60006147cd602583614bc6565b91506147d882615141565b604082019050919050565b60006147f0602483614bc6565b91506147fb82615190565b604082019050919050565b6000614813602c83614bc6565b915061481e826151df565b604082019050919050565b61483281614d2a565b82525050565b61484181614d34565b82525050565b600060208201905061485c600083018461458f565b92915050565b600060c082019050614877600083018961458f565b6148846020830188614829565b614891604083018761461a565b61489e606083018661461a565b6148ab608083018561458f565b6148b860a0830184614829565b979650505050505050565b60006020820190506148d860008301846145fc565b92915050565b60006020820190506148f3600083018461460b565b92915050565b600060208201905081810360008301526149138184614629565b905092915050565b6000602082019050818103600083015261493481614662565b9050919050565b6000602082019050818103600083015261495481614685565b9050919050565b60006020820190508181036000830152614974816146a8565b9050919050565b60006020820190508181036000830152614994816146cb565b9050919050565b600060208201905081810360008301526149b4816146ee565b9050919050565b600060208201905081810360008301526149d481614711565b9050919050565b600060208201905081810360008301526149f481614734565b9050919050565b60006020820190508181036000830152614a1481614757565b9050919050565b60006020820190508181036000830152614a348161477a565b9050919050565b60006020820190508181036000830152614a548161479d565b9050919050565b60006020820190508181036000830152614a74816147c0565b9050919050565b60006020820190508181036000830152614a94816147e3565b9050919050565b60006020820190508181036000830152614ab481614806565b9050919050565b6000602082019050614ad06000830184614829565b92915050565b600060a082019050614aeb6000830188614829565b614af8602083018761461a565b8181036040830152614b0a818661459e565b9050614b19606083018561458f565b614b266080830184614829565b9695505050505050565b6000606082019050614b456000830186614829565b614b526020830185614829565b614b5f6040830184614829565b949350505050565b6000602082019050614b7c6000830184614838565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614be282614d2a565b9150614bed83614d2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2257614c21614e25565b5b828201905092915050565b6000614c3882614d2a565b9150614c4383614d2a565b925082614c5357614c52614e54565b5b828204905092915050565b6000614c6982614d2a565b9150614c7483614d2a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cad57614cac614e25565b5b828202905092915050565b6000614cc382614d2a565b9150614cce83614d2a565b925082821015614ce157614ce0614e25565b5b828203905092915050565b6000614cf782614d0a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d4c82614d53565b9050919050565b6000614d5e82614d0a565b9050919050565b6000614d7082614d2a565b9050919050565b60005b83811015614d95578082015181840152602081019050614d7a565b83811115614da4576000848401525b50505050565b60006002820490506001821680614dc257607f821691505b60208210811415614dd657614dd5614e83565b5b50919050565b6000614de782614d2a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e1a57614e19614e25565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61523781614cec565b811461524257600080fd5b50565b61524e81614cfe565b811461525957600080fd5b50565b61526581614d2a565b811461527057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e127f9d9e32f9e1c9d298206c3056ba66027334af68e2cc51ba3b6a71262c12a64736f6c63430008030033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80634a74bb02116101235780638da5cb5b116100ab578063c49b9a801161006f578063c49b9a801461084e578063d543dbeb14610877578063dd62ed3e146108a0578063ea2f0b37146108dd578063f2fde38b1461090657610230565b80638da5cb5b146107555780638ee88c531461078057806395d89b41146107a9578063a457c2d7146107d4578063a9059cbb1461081157610230565b80636bc87c3a116100f25780636bc87c3a1461066e57806370a0823114610699578063715018a6146106d65780637d1db4a5146106ed57806388f820201461071857610230565b80634a74bb02146105b457806352390c02146105df5780635282a951146106085780635342acb41461063157610230565b80632d838119116101b15780633bd5d173116101755780633bd5d173146104d1578063437823ec146104fa5780634549b039146105235780634881370f1461056057806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce567146104155780633685d4191461044057806339509351146104695780633b124fe7146104a657610230565b806312c7b6bf116101f857806312c7b6bf146102ef57806313114a9d1461031a5780631694505e1461034557806318160ddd1461037057806323b872dd1461039b57610230565b80630320cd2314610235578063061c82d01461025e57806306fdde0314610287578063095ea7b3146102b257610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614372565b61092f565b005b34801561026a57600080fd5b50610285600480360381019061028091906144b4565b6109ef565b005b34801561029357600080fd5b5061029c610a75565b6040516102a991906148f9565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d4919061444f565b610b07565b6040516102e691906148c3565b60405180910390f35b3480156102fb57600080fd5b50610304610b25565b6040516103119190614abb565b60405180910390f35b34801561032657600080fd5b5061032f610b2b565b60405161033c9190614abb565b60405180910390f35b34801561035157600080fd5b5061035a610b35565b60405161036791906148de565b60405180910390f35b34801561037c57600080fd5b50610385610b59565b6040516103929190614abb565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614400565b610b63565b6040516103cf91906148c3565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906144b4565b610c3c565b60405161040c9190614abb565b60405180910390f35b34801561042157600080fd5b5061042a610caa565b6040516104379190614b67565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190614372565b610cc1565b005b34801561047557600080fd5b50610490600480360381019061048b919061444f565b61108f565b60405161049d91906148c3565b60405180910390f35b3480156104b257600080fd5b506104bb611142565b6040516104c89190614abb565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906144b4565b611148565b005b34801561050657600080fd5b50610521600480360381019061051c9190614372565b6112c4565b005b34801561052f57600080fd5b5061054a600480360381019061054591906144dd565b61139b565b6040516105579190614abb565b60405180910390f35b34801561056c57600080fd5b50610587600480360381019061058291906144b4565b611421565b005b34801561059557600080fd5b5061059e6114a7565b6040516105ab9190614847565b60405180910390f35b3480156105c057600080fd5b506105c96114cb565b6040516105d691906148c3565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614372565b6114de565b005b34801561061457600080fd5b5061062f600480360381019061062a91906144b4565b611779565b005b34801561063d57600080fd5b5061065860048036038101906106539190614372565b6117ff565b60405161066591906148c3565b60405180910390f35b34801561067a57600080fd5b50610683611855565b6040516106909190614abb565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190614372565b61185b565b6040516106cd9190614abb565b60405180910390f35b3480156106e257600080fd5b506106eb611946565b005b3480156106f957600080fd5b50610702611a80565b60405161070f9190614abb565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190614372565b611a86565b60405161074c91906148c3565b60405180910390f35b34801561076157600080fd5b5061076a611adc565b6040516107779190614847565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906144b4565b611b05565b005b3480156107b557600080fd5b506107be611b8b565b6040516107cb91906148f9565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061444f565b611c1d565b60405161080891906148c3565b60405180910390f35b34801561081d57600080fd5b506108386004803603810190610833919061444f565b611cea565b60405161084591906148c3565b60405180910390f35b34801561085a57600080fd5b506108756004803603810190610870919061448b565b611d08565b005b34801561088357600080fd5b5061089e600480360381019061089991906144b4565b611dd8565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906143c4565b611e85565b6040516108d49190614abb565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190614372565b611f0c565b005b34801561091257600080fd5b5061092d60048036038101906109289190614372565b611fe3565b005b61093761218c565b73ffffffffffffffffffffffffffffffffffffffff16610955611adc565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290614a1b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109f761218c565b73ffffffffffffffffffffffffffffffffffffffff16610a15611adc565b73ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290614a1b565b60405180910390fd5b80600e8190555050565b6060600b8054610a8490614daa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab090614daa565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b1b610b1461218c565b8484612194565b6001905092915050565b60105481565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610b7084848461235f565b610c3184610b7c61218c565b610c2c8560405180606001604052806028815260200161527460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be261218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cc9092919063ffffffff16565b612194565b600190509392505050565b6000600954821115610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a9061493b565b60405180910390fd5b6000610c8d612721565b9050610ca2818461274c90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610cc961218c565b73ffffffffffffffffffffffffffffffffffffffff16610ce7611adc565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490614a1b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906149bb565b60405180910390fd5b60005b60068054905081101561108b578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610e2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110785760066001600680549050610e859190614cb8565b81548110610ebc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061103e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561108b565b808061108390614ddc565b915050610dcc565b5050565b600061113861109c61218c565b8461113385600360006110ad61218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b612194565b6001905092915050565b600e5481565b600061115261218c565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890614a9b565b60405180910390fd5b60006111ec83612778565b505050505050905061124681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061129e816009546127e090919063ffffffff16565b6009819055506112b983600a5461276290919063ffffffff16565b600a81905550505050565b6112cc61218c565b73ffffffffffffffffffffffffffffffffffffffff166112ea611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790614a1b565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906149db565b60405180910390fd5b816114035760006113f284612778565b50505050505090508091505061141b565b600061140e84612778565b5050505050915050809150505b92915050565b61142961218c565b73ffffffffffffffffffffffffffffffffffffffff16611447611adc565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490614a1b565b60405180910390fd5b8060168190555050565b7f0000000000000000000000001369d22bf52e78eb8bd6b2f31a6d11d808c2f83381565b601460009054906101000a900460ff1681565b6114e661218c565b73ffffffffffffffffffffffffffffffffffffffff16611504611adc565b73ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614a1b565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061499b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116bb57611677600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61178161218c565b73ffffffffffffffffffffffffffffffffffffffff1661179f611adc565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90614a1b565b60405180910390fd5b8060108190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118f657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611941565b61193e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3c565b90505b919050565b61194e61218c565b73ffffffffffffffffffffffffffffffffffffffff1661196c611adc565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0d61218c565b73ffffffffffffffffffffffffffffffffffffffff16611b2b611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614a1b565b60405180910390fd5b8060128190555050565b6060600c8054611b9a90614daa565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc690614daa565b8015611c135780601f10611be857610100808354040283529160200191611c13565b820191906000526020600020905b815481529060010190602001808311611bf657829003601f168201915b5050505050905090565b6000611ce0611c2a61218c565b84611cdb8560405180606001604052806025815260200161529c6025913960036000611c5461218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cc9092919063ffffffff16565b612194565b6001905092915050565b6000611cfe611cf761218c565b848461235f565b6001905092915050565b611d1061218c565b73ffffffffffffffffffffffffffffffffffffffff16611d2e611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614a1b565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dcd91906148c3565b60405180910390a150565b611de061218c565b73ffffffffffffffffffffffffffffffffffffffff16611dfe611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90614a1b565b60405180910390fd5b611e7c6064611e6e836008546127f690919063ffffffff16565b61274c90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1461218c565b73ffffffffffffffffffffffffffffffffffffffff16611f32611adc565b73ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614a1b565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611feb61218c565b73ffffffffffffffffffffffffffffffffffffffff16612009611adc565b73ffffffffffffffffffffffffffffffffffffffff161461205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c69061495b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614a7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061497b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123529190614abb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614a5b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124369061491b565b60405180910390fd5b60008111612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614a3b565b60405180910390fd5b61248a611adc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f857506124c8611adc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561254357601554811115612542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612539906149fb565b60405180910390fd5b5b600061254e3061185b565b9050601554811061255f5760155490505b600060165482101590508080156125835750601460019054906101000a900460ff16155b80156125db57507f0000000000000000000000001369d22bf52e78eb8bd6b2f31a6d11d808c2f83373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125f35750601460009054906101000a900460ff165b156126075760165491506126068261280c565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ae5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126b857600090505b6126c4868686846128e2565b505050505050565b6000838311158290612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b91906148f9565b60405180910390fd5b5082840390509392505050565b600080600061272e612bf3565b91509150612745818361274c90919063ffffffff16565b9250505090565b6000818361275a9190614c2d565b905092915050565b600081836127709190614bd7565b905092915050565b60008060008060008060008060008060006127928c612f3e565b935093509350935060008060006127b38f8787876127ae612721565b612fbd565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836127ee9190614cb8565b905092915050565b600081836128049190614c5e565b905092915050565b6001601460016101000a81548160ff021916908315150217905550600061283d60028361274c90919063ffffffff16565b9050600061285482846127e090919063ffffffff16565b9050600047905061286483613071565b600061287982476127e090919063ffffffff16565b9050612885838261332f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128b893929190614b30565b60405180910390a1505050506000601460016101000a81548160ff02191690831515021790555050565b806128f0576128ef61341f565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129935750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129a8576129a3848484613473565b612bdf565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a4b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a6057612a5b8484846136e1565b612bde565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b045750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1957612b1484848461394f565b612bdd565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bd057612bcb848484613b28565b612bdc565b612bdb84848461394f565b5b5b5b5b80612bed57612bec613e2b565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612f0157826001600060068481548110612c53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d675750816002600060068481548110612cff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612d7e5760095460085494509450505050612f3a565b612e346001600060068481548110612dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127e090919063ffffffff16565b9250612eec6002600060068481548110612e77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127e090919063ffffffff16565b91508080612ef990614ddc565b915050612c07565b50612f1960085460095461274c90919063ffffffff16565b821015612f3157600954600854935093505050612f3a565b81819350935050505b9091565b6000806000806000612f4f86613e48565b90506000612f5c87613e79565b90506000612f6988613eaa565b90506000612fa482612f9685612f88888e6127e090919063ffffffff16565b6127e090919063ffffffff16565b6127e090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612fd6858a6127f690919063ffffffff16565b90506000612fed868a6127f690919063ffffffff16565b90506000613004878a6127f690919063ffffffff16565b9050600061301b888a6127f690919063ffffffff16565b90506000613056826130488561303a888a6127e090919063ffffffff16565b6127e090919063ffffffff16565b6127e090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156130b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156130e25781602001602082028036833780820191505090505b5090503081600081518110613120577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c057600080fd5b505afa1580156131d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f8919061439b565b81600181518110613232577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613297307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612194565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132f9959493929190614ad6565b600060405180830381600087803b15801561331357600080fd5b505af1158015613327573d6000803e3d6000fd5b505050505050565b61335a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612194565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133a4611adc565b426040518863ffffffff1660e01b81526004016133c696959493929190614862565b6060604051808303818588803b1580156133df57600080fd5b505af11580156133f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134189190614519565b5050505050565b6000600e5414801561343357506000601254145b1561343d57613471565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b600080600080600080600061348788612778565b96509650965096509650965096506134e788600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061365d82613edb565b61366681614080565b61367085846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516136cd9190614abb565b60405180910390a350505050505050505050565b60008060008060008060006136f588612778565b965096509650965096509650965061375587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ea84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138cb82613edb565b6138d481614080565b6138de85846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161393b9190614abb565b60405180910390a350505050505050505050565b600080600080600080600061396388612778565b96509650965096509650965096506139c387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa482613edb565b613aad81614080565b613ab785846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b149190614abb565b60405180910390a350505050505050505050565b6000806000806000806000613b3c88612778565b9650965096509650965096509650613b9c88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e090919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc684600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5b86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613da782613edb565b613db081614080565b613dba85846142cf565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e179190614abb565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613e726064613e64600e54856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ea36064613e95601254856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ed46064613ec6601054856127f690919063ffffffff16565b61274c90919063ffffffff16565b9050919050565b6000613ee5612721565b90506000613efc82846127f690919063ffffffff16565b9050613f5081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561407b5761403783600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061408a612721565b905060006140a182846127f690919063ffffffff16565b90506141178160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ca576142648360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276290919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6142e4826009546127e090919063ffffffff16565b6009819055506142ff81600a5461276290919063ffffffff16565b600a819055505050565b6000813590506143188161522e565b92915050565b60008151905061432d8161522e565b92915050565b60008135905061434281615245565b92915050565b6000813590506143578161525c565b92915050565b60008151905061436c8161525c565b92915050565b60006020828403121561438457600080fd5b600061439284828501614309565b91505092915050565b6000602082840312156143ad57600080fd5b60006143bb8482850161431e565b91505092915050565b600080604083850312156143d757600080fd5b60006143e585828601614309565b92505060206143f685828601614309565b9150509250929050565b60008060006060848603121561441557600080fd5b600061442386828701614309565b935050602061443486828701614309565b925050604061444586828701614348565b9150509250925092565b6000806040838503121561446257600080fd5b600061447085828601614309565b925050602061448185828601614348565b9150509250929050565b60006020828403121561449d57600080fd5b60006144ab84828501614333565b91505092915050565b6000602082840312156144c657600080fd5b60006144d484828501614348565b91505092915050565b600080604083850312156144f057600080fd5b60006144fe85828601614348565b925050602061450f85828601614333565b9150509250929050565b60008060006060848603121561452e57600080fd5b600061453c8682870161435d565b935050602061454d8682870161435d565b925050604061455e8682870161435d565b9150509250925092565b60006145748383614580565b60208301905092915050565b61458981614cec565b82525050565b61459881614cec565b82525050565b60006145a982614b92565b6145b38185614bb5565b93506145be83614b82565b8060005b838110156145ef5781516145d68882614568565b97506145e183614ba8565b9250506001810190506145c2565b5085935050505092915050565b61460581614cfe565b82525050565b61461481614d41565b82525050565b61462381614d65565b82525050565b600061463482614b9d565b61463e8185614bc6565b935061464e818560208601614d77565b61465781614eb2565b840191505092915050565b600061466f602383614bc6565b915061467a82614ec3565b604082019050919050565b6000614692602a83614bc6565b915061469d82614f12565b604082019050919050565b60006146b5602683614bc6565b91506146c082614f61565b604082019050919050565b60006146d8602283614bc6565b91506146e382614fb0565b604082019050919050565b60006146fb601b83614bc6565b915061470682614fff565b602082019050919050565b600061471e601b83614bc6565b915061472982615028565b602082019050919050565b6000614741601f83614bc6565b915061474c82615051565b602082019050919050565b6000614764602883614bc6565b915061476f8261507a565b604082019050919050565b6000614787602083614bc6565b9150614792826150c9565b602082019050919050565b60006147aa602983614bc6565b91506147b5826150f2565b604082019050919050565b60006147cd602583614bc6565b91506147d882615141565b604082019050919050565b60006147f0602483614bc6565b91506147fb82615190565b604082019050919050565b6000614813602c83614bc6565b915061481e826151df565b604082019050919050565b61483281614d2a565b82525050565b61484181614d34565b82525050565b600060208201905061485c600083018461458f565b92915050565b600060c082019050614877600083018961458f565b6148846020830188614829565b614891604083018761461a565b61489e606083018661461a565b6148ab608083018561458f565b6148b860a0830184614829565b979650505050505050565b60006020820190506148d860008301846145fc565b92915050565b60006020820190506148f3600083018461460b565b92915050565b600060208201905081810360008301526149138184614629565b905092915050565b6000602082019050818103600083015261493481614662565b9050919050565b6000602082019050818103600083015261495481614685565b9050919050565b60006020820190508181036000830152614974816146a8565b9050919050565b60006020820190508181036000830152614994816146cb565b9050919050565b600060208201905081810360008301526149b4816146ee565b9050919050565b600060208201905081810360008301526149d481614711565b9050919050565b600060208201905081810360008301526149f481614734565b9050919050565b60006020820190508181036000830152614a1481614757565b9050919050565b60006020820190508181036000830152614a348161477a565b9050919050565b60006020820190508181036000830152614a548161479d565b9050919050565b60006020820190508181036000830152614a74816147c0565b9050919050565b60006020820190508181036000830152614a94816147e3565b9050919050565b60006020820190508181036000830152614ab481614806565b9050919050565b6000602082019050614ad06000830184614829565b92915050565b600060a082019050614aeb6000830188614829565b614af8602083018761461a565b8181036040830152614b0a818661459e565b9050614b19606083018561458f565b614b266080830184614829565b9695505050505050565b6000606082019050614b456000830186614829565b614b526020830185614829565b614b5f6040830184614829565b949350505050565b6000602082019050614b7c6000830184614838565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614be282614d2a565b9150614bed83614d2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2257614c21614e25565b5b828201905092915050565b6000614c3882614d2a565b9150614c4383614d2a565b925082614c5357614c52614e54565b5b828204905092915050565b6000614c6982614d2a565b9150614c7483614d2a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cad57614cac614e25565b5b828202905092915050565b6000614cc382614d2a565b9150614cce83614d2a565b925082821015614ce157614ce0614e25565b5b828203905092915050565b6000614cf782614d0a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d4c82614d53565b9050919050565b6000614d5e82614d0a565b9050919050565b6000614d7082614d2a565b9050919050565b60005b83811015614d95578082015181840152602081019050614d7a565b83811115614da4576000848401525b50505050565b60006002820490506001821680614dc257607f821691505b60208210811415614dd657614dd5614e83565b5b50919050565b6000614de782614d2a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e1a57614e19614e25565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61523781614cec565b811461524257600080fd5b50565b61524e81614cfe565b811461525957600080fd5b50565b61526581614d2a565b811461527057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e127f9d9e32f9e1c9d298206c3056ba66027334af68e2cc51ba3b6a71262c12a64736f6c63430008030033

Deployed Bytecode Sourcemap

28726:20078:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37304:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36633:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31327:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32239:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29675:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33547:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29920:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31604:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32595:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34474:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31513:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35190:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32916:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29588:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33642:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36388:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34028:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37173:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29978:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29867:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34735:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36739:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41633:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29768:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31707:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20209:148;;;;;;;;;;;;;:::i;:::-;;30069:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33419:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19558:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36865:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31418:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33142:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31913:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32412:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36998:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32088:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36511:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20512:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37304:112;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37402:6:::1;37378:21;;:30;;;;;;;;;;;;;;;;;;37304:112:::0;:::o;36633:98::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36717:6:::1;36707:7;:16;;;;36633:98:::0;:::o;31327:83::-;31364:13;31397:5;31390:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31327:83;:::o;32239:161::-;32314:4;32331:39;32340:12;:10;:12::i;:::-;32354:7;32363:6;32331:8;:39::i;:::-;32388:4;32381:11;;32239:161;;;;:::o;29675:30::-;;;;:::o;33547:87::-;33589:7;33616:10;;33609:17;;33547:87;:::o;29920:51::-;;;:::o;31604:95::-;31657:7;31684;;31677:14;;31604:95;:::o;32595:313::-;32693:4;32710:36;32720:6;32728:9;32739:6;32710:9;:36::i;:::-;32757:121;32766:6;32774:12;:10;:12::i;:::-;32788:89;32826:6;32788:89;;;;;;;;;;;;;;;;;:11;:19;32800:6;32788:19;;;;;;;;;;;;;;;:33;32808:12;:10;:12::i;:::-;32788:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32757:8;:121::i;:::-;32896:4;32889:11;;32595:313;;;;;:::o;34474:253::-;34540:7;34579;;34568;:18;;34560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:19;34667:10;:8;:10::i;:::-;34644:33;;34695:24;34707:11;34695:7;:11;;:24;;;;:::i;:::-;34688:31;;;34474:253;;;:::o;31513:83::-;31554:5;31579:9;;;;;;;;;;;31572:16;;31513:83;:::o;35190:479::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35272:11:::1;:20;35284:7;35272:20;;;;;;;;;;;;;;;;;;;;;;;;;35264:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35340:9;35335:327;35359:9;:16;;;;35355:1;:20;35335:327;;;35417:7;35401:23;;:9;35411:1;35401:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;35397:254;;;35460:9;35489:1;35470:9;:16;;;;:20;;;;:::i;:::-;35460:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35445:9;35455:1;35445:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35529:1;35510:7;:16;35518:7;35510:16;;;;;;;;;;;;;;;:20;;;;35572:5;35549:11;:20;35561:7;35549:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35596:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35630:5;;35397:254;35377:3;;;;;:::i;:::-;;;;35335:327;;;;35190:479:::0;:::o;32916:218::-;33004:4;33021:83;33030:12;:10;:12::i;:::-;33044:7;33053:50;33092:10;33053:11;:25;33065:12;:10;:12::i;:::-;33053:25;;;;;;;;;;;;;;;:34;33079:7;33053:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33021:8;:83::i;:::-;33122:4;33115:11;;32916:218;;;;:::o;29588:26::-;;;;:::o;33642:378::-;33694:14;33711:12;:10;:12::i;:::-;33694:29;;33743:11;:19;33755:6;33743:19;;;;;;;;;;;;;;;;;;;;;;;;;33742:20;33734:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:15;33848:19;33859:7;33848:10;:19::i;:::-;33822:45;;;;;;;;33896:28;33916:7;33896;:15;33904:6;33896:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33878:7;:15;33886:6;33878:15;;;;;;;;;;;;;;;:46;;;;33945:20;33957:7;33945;;:11;;:20;;;;:::i;:::-;33935:7;:30;;;;33989:23;34004:7;33989:10;;:14;;:23;;;;:::i;:::-;33976:10;:36;;;;33642:378;;;:::o;36388:111::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36487:4:::1;36457:18;:27;36476:7;36457:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36388:111:::0;:::o;34028:438::-;34118:7;34157;;34146;:18;;34138:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34216:17;34211:248;;34251:15;34276:19;34287:7;34276:10;:19::i;:::-;34250:45;;;;;;;;34317:7;34310:14;;;;;34211:248;34359:23;34391:19;34402:7;34391:10;:19::i;:::-;34357:53;;;;;;;;34432:15;34425:22;;;34028:438;;;;;:::o;37173:119::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37278:6:::1;37246:29;:38;;;;37173:119:::0;:::o;29978:38::-;;;:::o;29867:40::-;;;;;;;;;;;;;:::o;34735:447::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34932:11:::1;:20;34944:7;34932:20;;;;;;;;;;;;;;;;;;;;;;;;;34931:21;34923:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35017:1;34998:7;:16;35006:7;34998:16;;;;;;;;;;;;;;;;:20;34995:108;;;35054:37;35074:7;:16;35082:7;35074:16;;;;;;;;;;;;;;;;35054:19;:37::i;:::-;35035:7;:16;35043:7;35035:16;;;;;;;;;;;;;;;:56;;;;34995:108;35136:4;35113:11;:20;35125:7;35113:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35151:9;35166:7;35151:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34735:447:::0;:::o;36739:114::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36835:10:::1;36821:11;:24;;;;36739:114:::0;:::o;41633:123::-;41697:4;41721:18;:27;41740:7;41721:27;;;;;;;;;;;;;;;;;;;;;;;;;41714:34;;41633:123;;;:::o;29768:32::-;;;;:::o;31707:198::-;31773:7;31797:11;:20;31809:7;31797:20;;;;;;;;;;;;;;;;;;;;;;;;;31793:49;;;31826:7;:16;31834:7;31826:16;;;;;;;;;;;;;;;;31819:23;;;;31793:49;31860:37;31880:7;:16;31888:7;31880:16;;;;;;;;;;;;;;;;31860:19;:37::i;:::-;31853:44;;31707:198;;;;:::o;20209:148::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20316:1:::1;20279:40;;20300:6;::::0;::::1;;;;;;;;20279:40;;;;;;;;;;;;20347:1;20330:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20209:148::o:0;30069:48::-;;;;:::o;33419:120::-;33487:4;33511:11;:20;33523:7;33511:20;;;;;;;;;;;;;;;;;;;;;;;;;33504:27;;33419:120;;;:::o;19558:87::-;19604:7;19631:6;;;;;;;;;;;19624:13;;19558:87;:::o;36865:122::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36967:12:::1;36951:13;:28;;;;36865:122:::0;:::o;31418:87::-;31457:13;31490:7;31483:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31418:87;:::o;33142:269::-;33235:4;33252:129;33261:12;:10;:12::i;:::-;33275:7;33284:96;33323:15;33284:96;;;;;;;;;;;;;;;;;:11;:25;33296:12;:10;:12::i;:::-;33284:25;;;;;;;;;;;;;;;:34;33310:7;33284:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33252:8;:129::i;:::-;33399:4;33392:11;;33142:269;;;;:::o;31913:167::-;31991:4;32008:42;32018:12;:10;:12::i;:::-;32032:9;32043:6;32008:9;:42::i;:::-;32068:4;32061:11;;31913:167;;;;:::o;32412:171::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32513:8:::1;32489:21;;:32;;;;;;;;;;;;;;;;;;32537:38;32566:8;32537:38;;;;;;:::i;:::-;;;;;;;;32412:171:::0;:::o;36998:162::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37092:60:::1;37136:5;37092:25;37104:12;37092:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;37077:12;:75;;;;36998:162:::0;:::o;32088:143::-;32169:7;32196:11;:18;32208:5;32196:18;;;;;;;;;;;;;;;:27;32215:7;32196:27;;;;;;;;;;;;;;;;32189:34;;32088:143;;;;:::o;36511:110::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36608:5:::1;36578:18;:27;36597:7;36578:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36511:110:::0;:::o;20512:244::-;19789:12;:10;:12::i;:::-;19778:23;;:7;:5;:7::i;:::-;:23;;;19770:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20621:1:::1;20601:22;;:8;:22;;;;20593:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20711:8;20682:38;;20703:6;::::0;::::1;;;;;;;;20682:38;;;;;;;;;;;;20740:8;20731:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20512:244:::0;:::o;10307:98::-;10360:7;10387:10;10380:17;;10307:98;:::o;41764:337::-;41874:1;41857:19;;:5;:19;;;;41849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41955:1;41936:21;;:7;:21;;;;41928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42039:6;42009:11;:18;42021:5;42009:18;;;;;;;;;;;;;;;:27;42028:7;42009:27;;;;;;;;;;;;;;;:36;;;;42077:7;42061:32;;42070:5;42061:32;;;42086:6;42061:32;;;;;;:::i;:::-;;;;;;;;41764:337;;;:::o;42109:1833::-;42247:1;42231:18;;:4;:18;;;;42223:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42324:1;42310:16;;:2;:16;;;;42302:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42394:1;42385:6;:10;42377:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42463:7;:5;:7::i;:::-;42455:15;;:4;:15;;;;:32;;;;;42480:7;:5;:7::i;:::-;42474:13;;:2;:13;;;;42455:32;42452:138;;;42521:12;;42511:6;:22;;42503:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42452:138;42892:28;42923:24;42941:4;42923:9;:24::i;:::-;42892:55;;42995:12;;42971:20;:36;42968:112;;43056:12;;43033:35;;42968:112;43100:24;43151:29;;43127:20;:53;;43100:80;;43209:19;:53;;;;;43246:16;;;;;;;;;;;43245:17;43209:53;:91;;;;;43287:13;43279:21;;:4;:21;;;;43209:91;:129;;;;;43317:21;;;;;;;;;;;43209:129;43191:318;;;43388:29;;43365:52;;43461:36;43476:20;43461:14;:36::i;:::-;43191:318;43590:12;43605:4;43590:19;;43717:18;:24;43736:4;43717:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43745:18;:22;43764:2;43745:22;;;;;;;;;;;;;;;;;;;;;;;;;43717:50;43714:96;;;43793:5;43783:15;;43714:96;43896:38;43911:4;43916:2;43919:6;43926:7;43896:14;:38::i;:::-;42109:1833;;;;;;:::o;7757:206::-;7843:7;7901:1;7896;:6;;7904:12;7888:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7943:1;7939;:5;7932:12;;7757:206;;;;;:::o;39104:163::-;39145:7;39166:15;39183;39202:19;:17;:19::i;:::-;39165:56;;;;39239:20;39251:7;39239;:11;;:20;;;;:::i;:::-;39232:27;;;;39104:163;:::o;6615:98::-;6673:7;6704:1;6700;:5;;;;:::i;:::-;6693:12;;6615:98;;;;:::o;5478:::-;5536:7;5567:1;5563;:5;;;;:::i;:::-;5556:12;;5478:98;;;;:::o;37677:466::-;37736:7;37745;37754;37763;37772;37781;37790;37811:23;37836:12;37850:18;37870:16;37890:20;37902:7;37890:11;:20::i;:::-;37810:100;;;;;;;;37922:15;37939:23;37964:12;37980:60;37992:7;38001:4;38007:10;38019:8;38029:10;:8;:10::i;:::-;37980:11;:60::i;:::-;37921:119;;;;;;38059:7;38068:15;38085:4;38091:15;38108:4;38114:10;38126:8;38051:84;;;;;;;;;;;;;;;;;;;;;37677:466;;;;;;;;;:::o;5859:98::-;5917:7;5948:1;5944;:5;;;;:::i;:::-;5937:12;;5859:98;;;;:::o;6216:::-;6274:7;6305:1;6301;:5;;;;:::i;:::-;6294:12;;6216:98;;;;:::o;43950:985::-;30528:4;30509:16;;:23;;;;;;;;;;;;;;;;;;44086:12:::1;44101:27;44126:1;44101:20;:24;;:27;;;;:::i;:::-;44086:42;;44139:17;44159:30;44184:4;44159:20;:24;;:30;;;;:::i;:::-;44139:50;;44467:22;44492:21;44467:46;;44558:22;44575:4;44558:16;:22::i;:::-;44711:18;44732:41;44758:14;44732:21;:25;;:41;;;;:::i;:::-;44711:62;;44823:35;44836:9;44847:10;44823:12;:35::i;:::-;44884:43;44899:4;44905:10;44917:9;44884:43;;;;;;;;:::i;:::-;;;;;;;;30543:1;;;;30574:5:::0;30555:16;;:24;;;;;;;;;;;;;;;;;;43950:985;:::o;46134:834::-;46245:7;46241:40;;46267:14;:12;:14::i;:::-;46241:40;46306:11;:19;46318:6;46306:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46330:11;:22;46342:9;46330:22;;;;;;;;;;;;;;;;;;;;;;;;;46329:23;46306:46;46302:597;;;46369:48;46391:6;46399:9;46410:6;46369:21;:48::i;:::-;46302:597;;;46440:11;:19;46452:6;46440:19;;;;;;;;;;;;;;;;;;;;;;;;;46439:20;:46;;;;;46463:11;:22;46475:9;46463:22;;;;;;;;;;;;;;;;;;;;;;;;;46439:46;46435:464;;;46502:46;46522:6;46530:9;46541:6;46502:19;:46::i;:::-;46435:464;;;46571:11;:19;46583:6;46571:19;;;;;;;;;;;;;;;;;;;;;;;;;46570:20;:47;;;;;46595:11;:22;46607:9;46595:22;;;;;;;;;;;;;;;;;;;;;;;;;46594:23;46570:47;46566:333;;;46634:44;46652:6;46660:9;46671:6;46634:17;:44::i;:::-;46566:333;;;46700:11;:19;46712:6;46700:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46723:11;:22;46735:9;46723:22;;;;;;;;;;;;;;;;;;;;;;;;;46700:45;46696:203;;;46762:48;46784:6;46792:9;46803:6;46762:21;:48::i;:::-;46696:203;;;46843:44;46861:6;46869:9;46880:6;46843:17;:44::i;:::-;46696:203;46566:333;46435:464;46302:597;46923:7;46919:41;;46945:15;:13;:15::i;:::-;46919:41;46134:834;;;;:::o;39275:561::-;39325:7;39334;39354:15;39372:7;;39354:25;;39390:15;39408:7;;39390:25;;39437:9;39432:289;39456:9;:16;;;;39452:1;:20;39432:289;;;39522:7;39498;:21;39506:9;39516:1;39506:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39498:21;;;;;;;;;;;;;;;;:31;:66;;;;39557:7;39533;:21;39541:9;39551:1;39541:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39533:21;;;;;;;;;;;;;;;;:31;39498:66;39494:97;;;39574:7;;39583;;39566:25;;;;;;;;;39494:97;39616:34;39628:7;:21;39636:9;39646:1;39636:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:21;;;;;;;;;;;;;;;;39616:7;:11;;:34;;;;:::i;:::-;39606:44;;39675:34;39687:7;:21;39695:9;39705:1;39695:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39687:21;;;;;;;;;;;;;;;;39675:7;:11;;:34;;;;:::i;:::-;39665:44;;39474:3;;;;;:::i;:::-;;;;39432:289;;;;39745:20;39757:7;;39745;;:11;;:20;;;;:::i;:::-;39735:7;:30;39731:61;;;39775:7;;39784;;39767:25;;;;;;;;39731:61;39811:7;39820;39803:25;;;;;;39275:561;;;:::o;38151:421::-;38211:7;38220;38229;38238;38258:12;38273:24;38289:7;38273:15;:24::i;:::-;38258:39;;38308:18;38329:30;38351:7;38329:21;:30::i;:::-;38308:51;;38370:16;38389:28;38409:7;38389:19;:28::i;:::-;38370:47;;38428:23;38454:47;38492:8;38454:33;38476:10;38454:17;38466:4;38454:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38428:73;;38520:15;38537:4;38543:10;38555:8;38512:52;;;;;;;;;;;;38151:421;;;;;:::o;38580:516::-;38713:7;38722;38731;38751:15;38769:24;38781:11;38769:7;:11;;:24;;;;:::i;:::-;38751:42;;38804:12;38819:21;38828:11;38819:4;:8;;:21;;;;:::i;:::-;38804:36;;38851:18;38872:27;38887:11;38872:10;:14;;:27;;;;:::i;:::-;38851:48;;38910:16;38929:25;38942:11;38929:8;:12;;:25;;;;:::i;:::-;38910:44;;38965:23;38991:47;39029:8;38991:33;39013:10;38991:17;39003:4;38991:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38965:73;;39057:7;39066:15;39083:4;39049:39;;;;;;;;;;;38580:516;;;;;;;;;:::o;44943:589::-;45069:21;45107:1;45093:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45069:40;;45138:4;45120;45125:1;45120:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;45164:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45154:4;45159:1;45154:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;45199:62;45216:4;45231:15;45249:11;45199:8;:62::i;:::-;45300:15;:66;;;45381:11;45407:1;45451:4;45478;45498:15;45300:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44943:589;;:::o;45540:513::-;45688:62;45705:4;45720:15;45738:11;45688:8;:62::i;:::-;45793:15;:31;;;45832:9;45865:4;45885:11;45911:1;45954;45997:7;:5;:7::i;:::-;46019:15;45793:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45540:513;;:::o;41120:320::-;41177:1;41166:7;;:12;:34;;;;;41199:1;41182:13;;:18;41166:34;41163:46;;;41202:7;;41163:46;41247:7;;41229:15;:25;;;;41287:11;;41265:19;:33;;;;41333:13;;41309:21;:37;;;;41377:1;41367:7;:11;;;;41403:1;41389:11;:15;;;;41431:1;41415:13;:17;;;;41120:320;:::o;48182:617::-;48285:15;48302:23;48327:12;48341:23;48366:12;48380:18;48400:16;48420:19;48431:7;48420:10;:19::i;:::-;48284:155;;;;;;;;;;;;;;48468:28;48488:7;48468;:15;48476:6;48468:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48450:7;:15;48458:6;48450:15;;;;;;;;;;;;;;;:46;;;;48525:28;48545:7;48525;:15;48533:6;48525:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48507:7;:15;48515:6;48507:15;;;;;;;;;;;;;;;:46;;;;48585:39;48608:15;48585:7;:18;48593:9;48585:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48564:7;:18;48572:9;48564:18;;;;;;;;;;;;;;;:60;;;;48638:26;48653:10;48638:14;:26::i;:::-;48675:22;48688:8;48675:12;:22::i;:::-;48708:23;48720:4;48726;48708:11;:23::i;:::-;48764:9;48747:44;;48756:6;48747:44;;;48775:15;48747:44;;;;;;:::i;:::-;;;;;;;;48182:617;;;;;;;;;;:::o;47537:637::-;47638:15;47655:23;47680:12;47694:23;47719:12;47733:18;47753:16;47773:19;47784:7;47773:10;:19::i;:::-;47637:155;;;;;;;;;;;;;;47821:28;47841:7;47821;:15;47829:6;47821:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47803:7;:15;47811:6;47803:15;;;;;;;;;;;;;;;:46;;;;47881:39;47904:15;47881:7;:18;47889:9;47881:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47860:7;:18;47868:9;47860:18;;;;;;;;;;;;;;;:60;;;;47952:39;47975:15;47952:7;:18;47960:9;47952:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47931:7;:18;47939:9;47931:18;;;;;;;;;;;;;;;:60;;;;48013:26;48028:10;48013:14;:26::i;:::-;48050:22;48063:8;48050:12;:22::i;:::-;48083:23;48095:4;48101;48083:11;:23::i;:::-;48139:9;48122:44;;48131:6;48122:44;;;48150:15;48122:44;;;;;;:::i;:::-;;;;;;;;47537:637;;;;;;;;;;:::o;46976:553::-;47075:15;47092:23;47117:12;47131:23;47156:12;47170:18;47190:16;47210:19;47221:7;47210:10;:19::i;:::-;47074:155;;;;;;;;;;;;;;47258:28;47278:7;47258;:15;47266:6;47258:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47240:7;:15;47248:6;47240:15;;;;;;;;;;;;;;;:46;;;;47318:39;47341:15;47318:7;:18;47326:9;47318:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47297:7;:18;47305:9;47297:18;;;;;;;;;;;;;;;:60;;;;47368:26;47383:10;47368:14;:26::i;:::-;47405:22;47418:8;47405:12;:22::i;:::-;47438:23;47450:4;47456;47438:11;:23::i;:::-;47494:9;47477:44;;47486:6;47477:44;;;47505:15;47477:44;;;;;;:::i;:::-;;;;;;;;46976:553;;;;;;;;;;:::o;35679:693::-;35782:15;35799:23;35824:12;35838:23;35863:12;35877:18;35897:16;35917:19;35928:7;35917:10;:19::i;:::-;35781:155;;;;;;;;;;;;;;35965:28;35985:7;35965;:15;35973:6;35965:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35947:7;:15;35955:6;35947:15;;;;;;;;;;;;;;;:46;;;;36022:28;36042:7;36022;:15;36030:6;36022:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36004:7;:15;36012:6;36004:15;;;;;;;;;;;;;;;:46;;;;36082:39;36105:15;36082:7;:18;36090:9;36082:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36061:7;:18;36069:9;36061:18;;;;;;;;;;;;;;;:60;;;;36153:39;36176:15;36153:7;:18;36161:9;36153:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36132:7;:18;36140:9;36132:18;;;;;;;;;;;;;;;:60;;;;36211:26;36226:10;36211:14;:26::i;:::-;36248:22;36261:8;36248:12;:22::i;:::-;36281:23;36293:4;36299;36281:11;:23::i;:::-;36337:9;36320:44;;36329:6;36320:44;;;36348:15;36320:44;;;;;;:::i;:::-;;;;;;;;35679:693;;;;;;;;;;:::o;41452:169::-;41506:15;;41496:7;:25;;;;41546:19;;41532:11;:33;;;;41592:21;;41576:13;:37;;;;41452:169::o;40610:154::-;40674:7;40701:55;40740:5;40701:20;40713:7;;40701;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;40694:62;;40610:154;;;:::o;40942:166::-;41012:7;41039:61;41084:5;41039:26;41051:13;;41039:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;41032:68;;40942:166;;;:::o;40772:162::-;40840:7;40867:59;40910:5;40867:24;40879:11;;40867:7;:11;;:24;;;;:::i;:::-;:28;;:59;;;;:::i;:::-;40860:66;;40772:162;;;:::o;39848:355::-;39911:19;39934:10;:8;:10::i;:::-;39911:33;;39955:18;39976:27;39991:11;39976:10;:14;;:27;;;;:::i;:::-;39955:48;;40039:38;40066:10;40039:7;:22;40055:4;40039:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40014:7;:22;40030:4;40014:22;;;;;;;;;;;;;;;:63;;;;40091:11;:26;40111:4;40091:26;;;;;;;;;;;;;;;;;;;;;;;;;40088:107;;;40157:38;40184:10;40157:7;:22;40173:4;40157:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40132:7;:22;40148:4;40132:22;;;;;;;;;;;;;;;:63;;;;40088:107;39848:355;;;:::o;40215:383::-;40274:19;40297:10;:8;:10::i;:::-;40274:33;;40318:16;40337:25;40350:11;40337:8;:12;;:25;;;;:::i;:::-;40318:44;;40406;40441:8;40406:7;:30;40414:21;;;;;;;;;;;40406:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40373:7;:30;40381:21;;;;;;;;;;;40373:30;;;;;;;;;;;;;;;:77;;;;40464:11;:34;40476:21;;;;;;;;;;;40464:34;;;;;;;;;;;;;;;;;;;;;;;;;40461:129;;;40546:44;40581:8;40546:7;:30;40554:21;;;;;;;;;;;40546:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40513:7;:30;40521:21;;;;;;;;;;;40513:30;;;;;;;;;;;;;;;:77;;;;40461:129;40215:383;;;:::o;37522:147::-;37600:17;37612:4;37600:7;;:11;;:17;;;;:::i;:::-;37590:7;:27;;;;37641:20;37656:4;37641:10;;:14;;:20;;;;:::i;:::-;37628:10;:33;;;;37522:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:118::-;11158:24;11176:5;11158:24;:::i;:::-;11153:3;11146:37;11136:53;;:::o;11195:112::-;11278:22;11294:5;11278:22;:::i;:::-;11273:3;11266:35;11256:51;;:::o;11313:222::-;;11444:2;11433:9;11429:18;11421:26;;11457:71;11525:1;11514:9;11510:17;11501:6;11457:71;:::i;:::-;11411:124;;;;:::o;11541:807::-;;11828:3;11817:9;11813:19;11805:27;;11842:71;11910:1;11899:9;11895:17;11886:6;11842:71;:::i;:::-;11923:72;11991:2;11980:9;11976:18;11967:6;11923:72;:::i;:::-;12005:80;12081:2;12070:9;12066:18;12057:6;12005:80;:::i;:::-;12095;12171:2;12160:9;12156:18;12147:6;12095:80;:::i;:::-;12185:73;12253:3;12242:9;12238:19;12229:6;12185:73;:::i;:::-;12268;12336:3;12325:9;12321:19;12312:6;12268:73;:::i;:::-;11795:553;;;;;;;;;:::o;12354:210::-;;12479:2;12468:9;12464:18;12456:26;;12492:65;12554:1;12543:9;12539:17;12530:6;12492:65;:::i;:::-;12446:118;;;;:::o;12570:276::-;;12728:2;12717:9;12713:18;12705:26;;12741:98;12836:1;12825:9;12821:17;12812:6;12741:98;:::i;:::-;12695:151;;;;:::o;12852:313::-;;13003:2;12992:9;12988:18;12980:26;;13052:9;13046:4;13042:20;13038:1;13027:9;13023:17;13016:47;13080:78;13153:4;13144:6;13080:78;:::i;:::-;13072:86;;12970:195;;;;:::o;13171:419::-;;13375:2;13364:9;13360:18;13352:26;;13424:9;13418:4;13414:20;13410:1;13399:9;13395:17;13388:47;13452:131;13578:4;13452:131;:::i;:::-;13444:139;;13342:248;;;:::o;13596:419::-;;13800:2;13789:9;13785:18;13777:26;;13849:9;13843:4;13839:20;13835:1;13824:9;13820:17;13813:47;13877:131;14003:4;13877:131;:::i;:::-;13869:139;;13767:248;;;:::o;14021:419::-;;14225:2;14214:9;14210:18;14202:26;;14274:9;14268:4;14264:20;14260:1;14249:9;14245:17;14238:47;14302:131;14428:4;14302:131;:::i;:::-;14294:139;;14192:248;;;:::o;14446:419::-;;14650:2;14639:9;14635:18;14627:26;;14699:9;14693:4;14689:20;14685:1;14674:9;14670:17;14663:47;14727:131;14853:4;14727:131;:::i;:::-;14719:139;;14617:248;;;:::o;14871:419::-;;15075:2;15064:9;15060:18;15052:26;;15124:9;15118:4;15114:20;15110:1;15099:9;15095:17;15088:47;15152:131;15278:4;15152:131;:::i;:::-;15144:139;;15042:248;;;:::o;15296:419::-;;15500:2;15489:9;15485:18;15477:26;;15549:9;15543:4;15539:20;15535:1;15524:9;15520:17;15513:47;15577:131;15703:4;15577:131;:::i;:::-;15569:139;;15467:248;;;:::o;15721:419::-;;15925:2;15914:9;15910:18;15902:26;;15974:9;15968:4;15964:20;15960:1;15949:9;15945:17;15938:47;16002:131;16128:4;16002:131;:::i;:::-;15994:139;;15892:248;;;:::o;16146:419::-;;16350:2;16339:9;16335:18;16327:26;;16399:9;16393:4;16389:20;16385:1;16374:9;16370:17;16363:47;16427:131;16553:4;16427:131;:::i;:::-;16419:139;;16317:248;;;:::o;16571:419::-;;16775:2;16764:9;16760:18;16752:26;;16824:9;16818:4;16814:20;16810:1;16799:9;16795:17;16788:47;16852:131;16978:4;16852:131;:::i;:::-;16844:139;;16742:248;;;:::o;16996:419::-;;17200:2;17189:9;17185:18;17177:26;;17249:9;17243:4;17239:20;17235:1;17224:9;17220:17;17213:47;17277:131;17403:4;17277:131;:::i;:::-;17269:139;;17167:248;;;:::o;17421:419::-;;17625:2;17614:9;17610:18;17602:26;;17674:9;17668:4;17664:20;17660:1;17649:9;17645:17;17638:47;17702:131;17828:4;17702:131;:::i;:::-;17694:139;;17592:248;;;:::o;17846:419::-;;18050:2;18039:9;18035:18;18027:26;;18099:9;18093:4;18089:20;18085:1;18074:9;18070:17;18063:47;18127:131;18253:4;18127:131;:::i;:::-;18119:139;;18017:248;;;:::o;18271:419::-;;18475:2;18464:9;18460:18;18452:26;;18524:9;18518:4;18514:20;18510:1;18499:9;18495:17;18488:47;18552:131;18678:4;18552:131;:::i;:::-;18544:139;;18442:248;;;:::o;18696:222::-;;18827:2;18816:9;18812:18;18804:26;;18840:71;18908:1;18897:9;18893:17;18884:6;18840:71;:::i;:::-;18794:124;;;;:::o;18924:831::-;;19225:3;19214:9;19210:19;19202:27;;19239:71;19307:1;19296:9;19292:17;19283:6;19239:71;:::i;:::-;19320:80;19396:2;19385:9;19381:18;19372:6;19320:80;:::i;:::-;19447:9;19441:4;19437:20;19432:2;19421:9;19417:18;19410:48;19475:108;19578:4;19569:6;19475:108;:::i;:::-;19467:116;;19593:72;19661:2;19650:9;19646:18;19637:6;19593:72;:::i;:::-;19675:73;19743:3;19732:9;19728:19;19719:6;19675:73;:::i;:::-;19192:563;;;;;;;;:::o;19761:442::-;;19948:2;19937:9;19933:18;19925:26;;19961:71;20029:1;20018:9;20014:17;20005:6;19961:71;:::i;:::-;20042:72;20110:2;20099:9;20095:18;20086:6;20042:72;:::i;:::-;20124;20192:2;20181:9;20177:18;20168:6;20124:72;:::i;:::-;19915:288;;;;;;:::o;20209:214::-;;20336:2;20325:9;20321:18;20313:26;;20349:67;20413:1;20402:9;20398:17;20389:6;20349:67;:::i;:::-;20303:120;;;;:::o;20429:132::-;;20519:3;20511:11;;20549:4;20544:3;20540:14;20532:22;;20501:60;;;:::o;20567:114::-;;20668:5;20662:12;20652:22;;20641:40;;;:::o;20687:99::-;;20773:5;20767:12;20757:22;;20746:40;;;:::o;20792:113::-;;20894:4;20889:3;20885:14;20877:22;;20867:38;;;:::o;20911:184::-;;21044:6;21039:3;21032:19;21084:4;21079:3;21075:14;21060:29;;21022:73;;;;:::o;21101:169::-;;21219:6;21214:3;21207:19;21259:4;21254:3;21250:14;21235:29;;21197:73;;;;:::o;21276:305::-;;21335:20;21353:1;21335:20;:::i;:::-;21330:25;;21369:20;21387:1;21369:20;:::i;:::-;21364:25;;21523:1;21455:66;21451:74;21448:1;21445:81;21442:2;;;21529:18;;:::i;:::-;21442:2;21573:1;21570;21566:9;21559:16;;21320:261;;;;:::o;21587:185::-;;21644:20;21662:1;21644:20;:::i;:::-;21639:25;;21678:20;21696:1;21678:20;:::i;:::-;21673:25;;21717:1;21707:2;;21722:18;;:::i;:::-;21707:2;21764:1;21761;21757:9;21752:14;;21629:143;;;;:::o;21778:348::-;;21841:20;21859:1;21841:20;:::i;:::-;21836:25;;21875:20;21893:1;21875:20;:::i;:::-;21870:25;;22063:1;21995:66;21991:74;21988:1;21985:81;21980:1;21973:9;21966:17;21962:105;21959:2;;;22070:18;;:::i;:::-;21959:2;22118:1;22115;22111:9;22100:20;;21826:300;;;;:::o;22132:191::-;;22192:20;22210:1;22192:20;:::i;:::-;22187:25;;22226:20;22244:1;22226:20;:::i;:::-;22221:25;;22265:1;22262;22259:8;22256:2;;;22270:18;;:::i;:::-;22256:2;22315:1;22312;22308:9;22300:17;;22177:146;;;;:::o;22329:96::-;;22395:24;22413:5;22395:24;:::i;:::-;22384:35;;22374:51;;;:::o;22431:90::-;;22508:5;22501:13;22494:21;22483:32;;22473:48;;;:::o;22527:126::-;;22604:42;22597:5;22593:54;22582:65;;22572:81;;;:::o;22659:77::-;;22725:5;22714:16;;22704:32;;;:::o;22742:86::-;;22817:4;22810:5;22806:16;22795:27;;22785:43;;;:::o;22834:180::-;;22944:64;23002:5;22944:64;:::i;:::-;22931:77;;22921:93;;;:::o;23020:140::-;;23130:24;23148:5;23130:24;:::i;:::-;23117:37;;23107:53;;;:::o;23166:121::-;;23257:24;23275:5;23257:24;:::i;:::-;23244:37;;23234:53;;;:::o;23293:307::-;23361:1;23371:113;23385:6;23382:1;23379:13;23371:113;;;23470:1;23465:3;23461:11;23455:18;23451:1;23446:3;23442:11;23435:39;23407:2;23404:1;23400:10;23395:15;;23371:113;;;23502:6;23499:1;23496:13;23493:2;;;23582:1;23573:6;23568:3;23564:16;23557:27;23493:2;23342:258;;;;:::o;23606:320::-;;23687:1;23681:4;23677:12;23667:22;;23734:1;23728:4;23724:12;23755:18;23745:2;;23811:4;23803:6;23799:17;23789:27;;23745:2;23873;23865:6;23862:14;23842:18;23839:38;23836:2;;;23892:18;;:::i;:::-;23836:2;23657:269;;;;:::o;23932:233::-;;23994:24;24012:5;23994:24;:::i;:::-;23985:33;;24040:66;24033:5;24030:77;24027:2;;;24110:18;;:::i;:::-;24027:2;24157:1;24150:5;24146:13;24139:20;;23975:190;;;:::o;24171:180::-;24219:77;24216:1;24209:88;24316:4;24313:1;24306:15;24340:4;24337:1;24330:15;24357:180;24405:77;24402:1;24395:88;24502:4;24499:1;24492:15;24526:4;24523:1;24516:15;24543:180;24591:77;24588:1;24581:88;24688:4;24685:1;24678:15;24712:4;24709:1;24702:15;24729:102;;24821:2;24817:7;24812:2;24805:5;24801:14;24797:28;24787:38;;24777:54;;;:::o;24837:222::-;24977:34;24973:1;24965:6;24961:14;24954:58;25046:5;25041:2;25033:6;25029:15;25022:30;24943:116;:::o;25065:229::-;25205:34;25201:1;25193:6;25189:14;25182:58;25274:12;25269:2;25261:6;25257:15;25250:37;25171:123;:::o;25300:225::-;25440:34;25436:1;25428:6;25424:14;25417:58;25509:8;25504:2;25496:6;25492:15;25485:33;25406:119;:::o;25531:221::-;25671:34;25667:1;25659:6;25655:14;25648:58;25740:4;25735:2;25727:6;25723:15;25716:29;25637:115;:::o;25758:177::-;25898:29;25894:1;25886:6;25882:14;25875:53;25864:71;:::o;25941:177::-;26081:29;26077:1;26069:6;26065:14;26058:53;26047:71;:::o;26124:181::-;26264:33;26260:1;26252:6;26248:14;26241:57;26230:75;:::o;26311:227::-;26451:34;26447:1;26439:6;26435:14;26428:58;26520:10;26515:2;26507:6;26503:15;26496:35;26417:121;:::o;26544:182::-;26684:34;26680:1;26672:6;26668:14;26661:58;26650:76;:::o;26732:228::-;26872:34;26868:1;26860:6;26856:14;26849:58;26941:11;26936:2;26928:6;26924:15;26917:36;26838:122;:::o;26966:224::-;27106:34;27102:1;27094:6;27090:14;27083:58;27175:7;27170:2;27162:6;27158:15;27151:32;27072:118;:::o;27196:223::-;27336:34;27332:1;27324:6;27320:14;27313:58;27405:6;27400:2;27392:6;27388:15;27381:31;27302:117;:::o;27425:231::-;27565:34;27561:1;27553:6;27549:14;27542:58;27634:14;27629:2;27621:6;27617:15;27610:39;27531:125;:::o;27662:122::-;27735:24;27753:5;27735:24;:::i;:::-;27728:5;27725:35;27715:2;;27774:1;27771;27764:12;27715:2;27705:79;:::o;27790:116::-;27860:21;27875:5;27860:21;:::i;:::-;27853:5;27850:32;27840:2;;27896:1;27893;27886:12;27840:2;27830:76;:::o;27912:122::-;27985:24;28003:5;27985:24;:::i;:::-;27978:5;27975:35;27965:2;;28024:1;28021;28014:12;27965:2;27955:79;:::o

Swarm Source

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