ETH Price: $3,255.19 (+3.20%)
Gas: 3 Gwei

Token

PLASMA (PLASMA)
 

Overview

Max Total Supply

6,090,495.016204244343803881 PLASMA

Holders

93 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
50.324630941289239093 PLASMA

Value
$0.00
0x77b27ea196f2628edbfeaed295990490d3421ed8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Plasma is the third of four tokens to complete the Liquid ecosystem. With a combination of staking mechanics and reflective tokenomics, they aim to achieve what they believe to be the first refilling staking pool on a deflationary supply.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PLASMA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/access/Ownable.sol



pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

// File: Plasma.sol

pragma solidity ^0.8.0;






pragma solidity ^0.8.0;

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

interface IUniswapV2Pair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

pragma solidity ^0.8.0;

contract MrFusion {
    constructor() {}
}

contract Reactor {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable _uniswapV2Router;
    PLASMA private _tokenContract;

    constructor(PLASMA tokenContract, IUniswapV2Router02 uniswapV2Router) {
        _tokenContract = tokenContract;
        _uniswapV2Router = uniswapV2Router;
    }

    receive() external payable {}

    function rebalance() external returns (uint256 rebal) {
        swapEthForTokens(address(this).balance);
    }

    function swapEthForTokens(uint256 EthAmount) private {
        address[] memory uniswapPairPath = new address[](2);
        uniswapPairPath[0] = _uniswapV2Router.WETH();
        uniswapPairPath[1] = address(_tokenContract);

        _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: EthAmount
        }(0, uniswapPairPath, address(this), block.timestamp);
    }
}

contract TimeCircuts {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable _uniswapV2Router;
    PLASMA private _tokenContract;

    constructor(PLASMA tokenContract, IUniswapV2Router02 uniswapV2Router) {
        _tokenContract = tokenContract;
        _uniswapV2Router = uniswapV2Router;
    }

    function swapTokens(address pairTokenAddress, uint256 tokenAmount)
        external
    {
        uint256 initialPairTokenBalance =
            IERC20(pairTokenAddress).balanceOf(address(this));
        swapTokensForTokens(pairTokenAddress, tokenAmount);
        uint256 newPairTokenBalance =
            IERC20(pairTokenAddress).balanceOf(address(this)).sub(
                initialPairTokenBalance
            );
        IERC20(pairTokenAddress).transfer(
            address(_tokenContract),
            newPairTokenBalance
        );
    }

    function swapTokensForTokens(address pairTokenAddress, uint256 tokenAmount)
        private
    {
        address[] memory path = new address[](2);
        path[0] = address(_tokenContract);
        path[1] = pairTokenAddress;

        _tokenContract.approve(address(_uniswapV2Router), tokenAmount);

        // make the swap
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of pair token
            path,
            address(this),
            block.timestamp
        );
    }
}

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

    IUniswapV2Router02 public immutable _uniswapV2Router;

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

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    address public _anomalieAddress;
    address public _mrFusion;
    uint256 public _initialMrFusionLockAmount;
    uint256 public _initialFluxAmount;
    address public _uniswapETHPool;
    address public _fluxCapacitor;
    address public _orbs;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 6300000e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _tFeeTotal;
    uint256 public _tBurnTotal;

    string private _name = "PLASMA";
    string private _symbol = "PLASMA";
    uint8 private _decimals = 18;

    uint256 public _feeDecimals = 1;
    uint256 public _taxFee;
    uint256 public _lockFee;
    uint256 public _maxTxAmount = 100000e18;
    uint256 public _minTokensBeforeSwap = 1000e18;
    uint256 public _minInterestForReward = 10e18;
    uint256 private _autoSwapCallerFee = 200e18;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public tradingEnabled;
    bool public clearenceCheckEnabled;

    address private currentPairTokenAddress;
    address private currentPoolAddress;

    uint256 private _liquidityRemoveFee = 2;
    uint256 private _fusionCallerFee = 5;
    uint256 private _minTokenForfusion = 1000e18;
    uint256 private _lastfusion;
    uint256 private _fusionInterval = 1 hours;

    uint256 private _fluxCapacitorFee = 10;
    uint256 private _powerFee = 5;

    event Loged(address indexed madScientist, uint256 amount);
    event Unloged(address indexed madScientist, uint256 amount);

    event FeeDecimalsUpdated(uint256 taxFeeDecimals);
    event TaxFeeUpdated(uint256 taxFee);
    event LockFeeUpdated(uint256 lockFee);
    event MaxTxAmountUpdated(uint256 maxTxAmount);
    event WhitelistUpdated(address indexed pairTokenAddress);
    event TradingEnabled();
    event ClearenceCheckEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        address indexed pairTokenAddress,
        uint256 tokensSwapped,
        uint256 pairTokenReceived,
        uint256 tokensIntoLiqudity
    );
    event Rebalance(uint256 tokenBurnt);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event AutoSwapCallerFeeUpdated(uint256 autoSwapCallerFee);
    event MinInterestForRewardUpdated(uint256 minInterestForReward);
    event LiquidityRemoveFeeUpdated(uint256 liquidityRemoveFee);
    event fusionCallerFeeUpdated(uint256 rebalnaceCallerFee);
    event MinTokenForfusionUpdated(uint256 minRebalanceAmount);
    event fusionIntervalUpdated(uint256 rebalanceInterval);

    event AnomaliesAddressUpdated(address anomalies);
    event PowerFeeUpdated(uint256 powerFee);

    event fluxCapacitorUpdated(address fluxCapacitor);
    event fluxCapacitorFeeUpdated(uint256 fluxCapacitorFee);

    event orbsUpdated(address orbs);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    Reactor public reactor;
    TimeCircuts public timeCircuts;

    constructor(
        IUniswapV2Router02 uniswapV2Router,
        uint256 initialMrFusionLockAmount
    ) {
        _lastfusion = block.timestamp;

        _uniswapV2Router = uniswapV2Router;
        _mrFusion = address(new MrFusion());
        _initialMrFusionLockAmount = initialMrFusionLockAmount;

        reactor = new Reactor(this, uniswapV2Router);
        timeCircuts = new TimeCircuts(this, uniswapV2Router);

        currentPoolAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        currentPairTokenAddress = uniswapV2Router.WETH();
        _uniswapETHPool = currentPoolAddress;

        updateSwapAndLiquifyEnabled(false);

        _rOwned[_msgSender()] = reflectionFromToken(
            _tTotal.sub(_initialMrFusionLockAmount),
            false
        );

        _rOwned[_mrFusion] = reflectionFromToken(
            _initialMrFusionLockAmount,
            false
        );

        emit Transfer(
            address(0),
            _msgSender(),
            _tTotal.sub(_initialMrFusionLockAmount)
        );

        emit Transfer(address(0), _mrFusion, _initialMrFusionLockAmount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "PLASMA: 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,
            "PLASMA: Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            "PLASMA: We can not exclude Uniswap router."
        );
        require(
            account != address(this),
            "PLASMA: We can not exclude contract self."
        );
        require(
            account != _mrFusion,
            "PLASMA: We can not exclude reweard wallet."
        );
        require(!_isExcluded[account], "PLASMA: Account is already excluded");

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "PLASMA: 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 _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "PLASMA: approve from the zero address");
        require(spender != address(0), "PLASMA: approve to the zero address");

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "PLASMA: transfer from the zero address");
        require(
            recipient != address(0),
            "PLASMA: transfer to the zero address"
        );
        require(
            amount > 0,
            "PLASMA: Transfer amount must be greater than zero"
        );

        if (sender != owner() && recipient != owner() && !inSwapAndLiquify) {
            require(
                amount <= _maxTxAmount,
                "PLASMA: Transfer amount exceeds the maxTxAmount."
            );
            if (
                (_msgSender() == currentPoolAddress ||
                    _msgSender() == address(_uniswapV2Router)) &&
                !tradingEnabled
            ) require(false, "PLASMA: trading is disabled.");
        }

        if (!inSwapAndLiquify) {
            uint256 lockedBalanceForPool = balanceOf(address(this));
            bool overMinTokenBalance =
                lockedBalanceForPool >= _minTokensBeforeSwap;
            if (
                overMinTokenBalance &&
                msg.sender != currentPoolAddress &&
                swapAndLiquifyEnabled
            ) {
                if (currentPairTokenAddress == _uniswapV2Router.WETH())
                    swapAndLiquifyForEth(lockedBalanceForPool);
                else
                    swapAndLiquifyForTokens(
                        currentPairTokenAddress,
                        lockedBalanceForPool
                    );
            }
        }

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

    receive() external payable {}

    function swapAndLiquifyForEth(uint256 lockedBalanceForPool)
        private
        lockTheSwap
    {
        // split the contract balance except swapCallerFee into halves
        uint256 lockedForSwap = lockedBalanceForPool.sub(_autoSwapCallerFee);
        uint256 half = lockedForSwap.div(2);
        uint256 otherHalf = lockedForSwap.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);

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

        // add liquidity to uniswap
        addLiquidityForEth(otherHalf, newBalance);

        emit SwapAndLiquify(
            _uniswapV2Router.WETH(),
            half,
            newBalance,
            otherHalf
        );

        _transfer(address(this), tx.origin, _autoSwapCallerFee);

        _sendRewardInterestToPool();
    }

    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 addLiquidityForEth(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
            address(this),
            block.timestamp
        );
    }

    function swapAndLiquifyForTokens(
        address pairTokenAddress,
        uint256 lockedBalanceForPool
    ) private lockTheSwap {
        // split the contract balance except swapCallerFee into halves
        uint256 lockedForSwap = lockedBalanceForPool.sub(_autoSwapCallerFee);
        uint256 half = lockedForSwap.div(2);
        uint256 otherHalf = lockedForSwap.sub(half);

        _transfer(address(this), address(timeCircuts), half);

        uint256 initialPairTokenBalance =
            IERC20(pairTokenAddress).balanceOf(address(this));

        // swap tokens for pairToken
        timeCircuts.swapTokens(pairTokenAddress, half);

        uint256 newPairTokenBalance =
            IERC20(pairTokenAddress).balanceOf(address(this)).sub(
                initialPairTokenBalance
            );

        // add liquidity to uniswap
        addLiquidityForTokens(pairTokenAddress, otherHalf, newPairTokenBalance);

        emit SwapAndLiquify(
            pairTokenAddress,
            half,
            newPairTokenBalance,
            otherHalf
        );

        _transfer(address(this), tx.origin, _autoSwapCallerFee);

        _sendRewardInterestToPool();
    }

    function addLiquidityForTokens(
        address pairTokenAddress,
        uint256 tokenAmount,
        uint256 pairTokenAmount
    ) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        IERC20(pairTokenAddress).approve(
            address(_uniswapV2Router),
            pairTokenAmount
        );

        // add the liquidity
        _uniswapV2Router.addLiquidity(
            address(this),
            pairTokenAddress,
            tokenAmount,
            pairTokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function fusion() public lockTheSwap {
        if (clearenceCheckEnabled == true) {
            require(
                IERC1155(_orbs).balanceOf(msg.sender, 3) >= 1,
                "PLASMA: one much be holding the PLASMA orb to yeild such power"
            );

            require(
                block.timestamp > _lastfusion + _fusionInterval,
                "PLASMA: Too Soon."
            );

            fusionPartTwo();
        } else if (clearenceCheckEnabled == false) {
            require(
                balanceOf(_msgSender()) >= _minTokenForfusion,
                "PLASMA: Access denied, need more PLASMA to fusion "
            );
            require(
                block.timestamp > _lastfusion + _fusionInterval,
                "PLASMA: Too Soon."
            );

            fusionPartTwo();
        }
    }

    function fusionPartTwo() public lockTheSwap {
        _lastfusion = block.timestamp;

        uint256 amountToRemove =
            IERC20(_uniswapETHPool)
                .balanceOf(address(this))
                .mul(_liquidityRemoveFee)
                .div(100);

        removeLiquidityETH(amountToRemove);

        reactor.rebalance();

        uint256 tNewTokenBalance = balanceOf(address(reactor));
        uint256 tRewardForCaller =
            tNewTokenBalance.mul(_fusionCallerFee).div(100);
        uint256 tRemaining = tNewTokenBalance.sub(tRewardForCaller);

        uint256 toAnomalie = tRemaining.mul(_powerFee).div(100);

        addAnomalie(toAnomalie);

        uint256 aftPower = tRemaining.sub(toAnomalie);

        uint256 flux = aftPower.mul(_fluxCapacitorFee).div(100);

        addFlux(flux);

        uint256 tBurn = aftPower.sub(flux);
        uint256 currentRate = _getRate();
        uint256 rBurn = tBurn.mul(currentRate);

        _rOwned[_msgSender()] = _rOwned[_msgSender()].add(
            tRewardForCaller.mul(currentRate)
        );

        _rOwned[address(reactor)] = 0;

        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
        _rTotal = _rTotal.sub(rBurn);

        emit Transfer(address(reactor), address(_anomalieAddress), toAnomalie);
        emit Transfer(address(reactor), _msgSender(), tRewardForCaller);
        emit Transfer(address(reactor), address(0), tBurn);
        emit Rebalance(tBurn);
    }

    function addFlux(uint256 flux) private {
        uint256 currentRate = _getRate();

        _rOwned[_fluxCapacitor] = _rOwned[_fluxCapacitor].add(
            flux.mul(currentRate)
        );

        emit Transfer(address(reactor), _fluxCapacitor, flux);
    }

    function addAnomalie(uint256 toAnomalie) private {
        uint256 currentRate = _getRate();

        _rOwned[_anomalieAddress] = _rOwned[_anomalieAddress].add(
            toAnomalie.mul(currentRate)
        );

        emit Transfer(address(reactor), _anomalieAddress, toAnomalie);
    }

    function removeLiquidityETH(uint256 lpAmount)
        private
        returns (uint256 ETHAmount)
    {
        IERC20(_uniswapETHPool).approve(address(_uniswapV2Router), lpAmount);
        (ETHAmount) = _uniswapV2Router
            .removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            lpAmount,
            0,
            0,
            address(reactor),
            block.timestamp
        );
    }

    function _sendRewardInterestToPool() private {
        uint256 tRewardInterest =
            balanceOf(_mrFusion).sub(_initialMrFusionLockAmount);
        if (tRewardInterest > _minInterestForReward) {
            uint256 rRewardInterest =
                reflectionFromToken(tRewardInterest, false);
            _rOwned[currentPoolAddress] = _rOwned[currentPoolAddress].add(
                rRewardInterest
            );
            _rOwned[_mrFusion] = _rOwned[_mrFusion].sub(rRewardInterest);
            emit Transfer(_mrFusion, currentPoolAddress, tRewardInterest);
            IUniswapV2Pair(currentPoolAddress).sync();
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLock
        ) = _getValues(tAmount);
        uint256 rLock = tLock.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if (inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLock
        ) = _getValues(tAmount);
        uint256 rLock = tLock.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if (inSwapAndLiquify) {
            _tOwned[recipient] = _tOwned[recipient].add(tAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLock
        ) = _getValues(tAmount);
        uint256 rLock = tLock.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if (inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLock
        ) = _getValues(tAmount);
        uint256 rLock = tLock.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if (inSwapAndLiquify) {
            _tOwned[recipient] = _tOwned[recipient].add(tAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

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

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLock) =
            _getTValues(tAmount, _taxFee, _lockFee, _feeDecimals);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tLock, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLock);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 taxFee,
        uint256 lockFee,
        uint256 feeDecimals
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(taxFee).div(10**(feeDecimals + 2));
        uint256 tLockFee = tAmount.mul(lockFee).div(10**(feeDecimals + 2));
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLockFee);
        return (tTransferAmount, tFee, tLockFee);
    }

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

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

    function calculateFee(
        uint256 _amount,
        uint256 _feeDeci,
        uint256 _percentage
    ) public pure returns (uint256 amount) {
        amount = _amount.mul(_percentage).div(10**(uint256(_feeDeci) + 2));
    }

    function _getCurrentSupply() public 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 getCurrentPoolAddress() public view returns (address) {
        return currentPoolAddress;
    }

    function getCurrentPairTokenAddress() public view returns (address) {
        return currentPairTokenAddress;
    }

    function getLiquidityRemoveFee() public view returns (uint256) {
        return _liquidityRemoveFee;
    }

    function getfusionCallerFee() public view returns (uint256) {
        return _fusionCallerFee;
    }

    function getMinTokenForfusion() public view returns (uint256) {
        return _minTokenForfusion;
    }

    function getLastfusion() public view returns (uint256) {
        return _lastfusion;
    }

    function getfusionInterval() public view returns (uint256) {
        return _fusionInterval;
    }

    function getFluxCapacitorAddress() public view returns (address) {
        return _fluxCapacitor;
    }

    function _setFeeDecimals(uint256 feeDecimals) external onlyOwner() {
        require(
            feeDecimals >= 0 && feeDecimals <= 2,
            "PLASMA: fee decimals should be in 0 - 2"
        );
        _feeDecimals = feeDecimals;
        emit FeeDecimalsUpdated(feeDecimals);
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(
            taxFee >= 0 && taxFee <= 10 * 10**_feeDecimals,
            "PLASMA: taxFee should be in 0 - 10"
        );
        _taxFee = taxFee;
        emit TaxFeeUpdated(taxFee);
    }

    function _setLockFee(uint256 lockFee) external onlyOwner() {
        require(
            lockFee >= 0 && lockFee <= 10 * 10**_feeDecimals,
            "PLASMA: lockFee should be in 0 - 10"
        );
        _lockFee = lockFee;
        emit LockFeeUpdated(lockFee);
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(
            maxTxAmount >= 50000e18,
            "PLASMA: maxTxAmount should be greater than 50000e18"
        );
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(maxTxAmount);
    }

    function _setMinTokensBeforeSwap(uint256 minTokensBeforeSwap)
        external
        onlyOwner()
    {
        require(
            minTokensBeforeSwap >= 1e18 && minTokensBeforeSwap <= 25000e18,
            "PLASMA: minTokenBeforeSwap should be in 1e18 - 25000e18"
        );
        require(
            minTokensBeforeSwap > _autoSwapCallerFee,
            "PLASMA: minTokenBeforeSwap should be greater than autoSwapCallerFee"
        );
        _minTokensBeforeSwap = minTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(minTokensBeforeSwap);
    }

    function _setAutoSwapCallerFee(uint256 autoSwapCallerFee)
        external
        onlyOwner()
    {
        require(
            autoSwapCallerFee >= 1e18,
            "PLASMA: autoSwapCallerFee should be greater than 1e18"
        );
        _autoSwapCallerFee = autoSwapCallerFee;
        emit AutoSwapCallerFeeUpdated(autoSwapCallerFee);
    }

    function _setMinInterestForReward(uint256 minInterestForReward)
        external
        onlyOwner()
    {
        _minInterestForReward = minInterestForReward;
        emit MinInterestForRewardUpdated(minInterestForReward);
    }

    function _setLiquidityRemoveFee(uint256 liquidityRemoveFee)
        external
        onlyOwner()
    {
        require(
            liquidityRemoveFee >= 1 && liquidityRemoveFee <= 10,
            "PLASMA: liquidityRemoveFee should be in 1 - 10"
        );
        _liquidityRemoveFee = liquidityRemoveFee;
        emit LiquidityRemoveFeeUpdated(liquidityRemoveFee);
    }

    function _setfusionCallerFee(uint256 fusionCallerFee) external onlyOwner() {
        require(
            fusionCallerFee >= 1 && fusionCallerFee <= 15,
            "PLASMA: fusionCallerFee should be in 1 - 15"
        );
        _fusionCallerFee = fusionCallerFee;
        emit fusionCallerFeeUpdated(fusionCallerFee);
    }

    function _setMinTokenForfusion(uint256 minTokenForfusion)
        external
        onlyOwner()
    {
        _minTokenForfusion = minTokenForfusion;
        emit MinTokenForfusionUpdated(minTokenForfusion);
    }

    function _setfusionInterval(uint256 fusionInterval) external onlyOwner() {
        _fusionInterval = fusionInterval;
        emit fusionIntervalUpdated(fusionInterval);
    }

    function _setfluxCapacitorAddress(address fluxCapacitor)
        external
        onlyOwner()
    {
        _fluxCapacitor = fluxCapacitor;
        emit fluxCapacitorUpdated(fluxCapacitor);
    }

    function _setOrbsAddress(address orbs) external onlyOwner() {
        _orbs = orbs;
        emit orbsUpdated(orbs);
    }

    function _setFluxCapacitorFee(uint256 fluxCapacitorFee)
        external
        onlyOwner()
    {
        _fluxCapacitorFee = fluxCapacitorFee;
        emit fluxCapacitorFeeUpdated(fluxCapacitorFee);
    }

    function _setPowerFee(uint256 powerFee) external onlyOwner() {
        _powerFee = powerFee;

        emit PowerFeeUpdated(powerFee);
    }

    function _setAnomalies(address payable anomalieAddress)
        external
        onlyOwner()
    {
        _anomalieAddress = anomalieAddress;

        emit AnomaliesAddressUpdated(anomalieAddress);
    }

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

    function _updateWhitelist(address poolAddress, address pairTokenAddress)
        public
        onlyOwner()
    {
        require(poolAddress != address(0), "PLASMA: Pool address is zero.");
        require(
            pairTokenAddress != address(0),
            "PLASMA: Pair token address is zero."
        );
        require(
            pairTokenAddress != address(this),
            "PLASMA: Pair token address self address."
        );
        require(
            pairTokenAddress != currentPairTokenAddress,
            "PLASMA: Pair token address is same as current one."
        );

        currentPoolAddress = poolAddress;
        currentPairTokenAddress = pairTokenAddress;

        emit WhitelistUpdated(pairTokenAddress);
    }

    function _enableTrading() external onlyOwner() {
        tradingEnabled = true;
        TradingEnabled();
    }

    function _enableClearenceCheck(bool _enabled) public onlyOwner {
        clearenceCheckEnabled = true;
        emit ClearenceCheckEnabledUpdated(_enabled);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router","type":"address"},{"internalType":"uint256","name":"initialMrFusionLockAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"anomalies","type":"address"}],"name":"AnomaliesAddressUpdated","type":"event"},{"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":"autoSwapCallerFee","type":"uint256"}],"name":"AutoSwapCallerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ClearenceCheckEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFeeDecimals","type":"uint256"}],"name":"FeeDecimalsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityRemoveFee","type":"uint256"}],"name":"LiquidityRemoveFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockFee","type":"uint256"}],"name":"LockFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"madScientist","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Loged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minInterestForReward","type":"uint256"}],"name":"MinInterestForRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minRebalanceAmount","type":"uint256"}],"name":"MinTokenForfusionUpdated","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":"powerFee","type":"uint256"}],"name":"PowerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenBurnt","type":"uint256"}],"name":"Rebalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pairTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pairTokenReceived","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":false,"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"TaxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"madScientist","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unloged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pairTokenAddress","type":"address"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fluxCapacitorFee","type":"uint256"}],"name":"fluxCapacitorFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fluxCapacitor","type":"address"}],"name":"fluxCapacitorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rebalnaceCallerFee","type":"uint256"}],"name":"fusionCallerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rebalanceInterval","type":"uint256"}],"name":"fusionIntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"orbs","type":"address"}],"name":"orbsUpdated","type":"event"},{"inputs":[],"name":"_anomalieAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"_enableClearenceCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_feeDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fluxCapacitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initialFluxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initialMrFusionLockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockFee","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":"_minInterestForReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mrFusion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_orbs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"anomalieAddress","type":"address"}],"name":"_setAnomalies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"autoSwapCallerFee","type":"uint256"}],"name":"_setAutoSwapCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeDecimals","type":"uint256"}],"name":"_setFeeDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fluxCapacitorFee","type":"uint256"}],"name":"_setFluxCapacitorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityRemoveFee","type":"uint256"}],"name":"_setLiquidityRemoveFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockFee","type":"uint256"}],"name":"_setLockFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minInterestForReward","type":"uint256"}],"name":"_setMinInterestForReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenForfusion","type":"uint256"}],"name":"_setMinTokenForfusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"_setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"orbs","type":"address"}],"name":"_setOrbsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"powerFee","type":"uint256"}],"name":"_setPowerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fluxCapacitor","type":"address"}],"name":"_setfluxCapacitorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fusionCallerFee","type":"uint256"}],"name":"_setfusionCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fusionInterval","type":"uint256"}],"name":"_setfusionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tBurnTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTotal","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":"_uniswapETHPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"address","name":"pairTokenAddress","type":"address"}],"name":"_updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feeDeci","type":"uint256"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"clearenceCheckEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fusionPartTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentPairTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFluxCapacitorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastfusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityRemoveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinTokenForfusion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getfusionCallerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getfusionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","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":[],"name":"reactor","outputs":[{"internalType":"contract Reactor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","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":[],"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":[],"name":"timeCircuts","outputs":[{"internalType":"contract TimeCircuts","name":"","type":"address"}],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526a053613af307172a9800000600d819055620000239060001962000f3a565b620000319060001962000ec5565b600e5560408051808201909152600680825265504c41534d4160d01b6020909201918252620000639160119162000b7d565b5060408051808201909152600680825265504c41534d4160d01b6020909201918252620000939160129162000b7d565b506013805460ff19166012179055600160145569152d02c7e14af6800000601755683635c9adc5dea000006018819055678ac7230489e80000601955680ad78ebc5ac6200000601a556002601d556005601e819055601f91909155610e10602155600a6022556023553480156200010957600080fd5b5060405162007275380380620072758339810160408190526200012c9162000c72565b60006200013862000636565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350426020556001600160601b0319606083901b16608052604051620001a69062000c0c565b604051809103906000f080158015620001c3573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b0392909216919091179055600881905560405130908390620001fb9062000c19565b6200020892919062000ca2565b604051809103906000f08015801562000225573d6000803e3d6000fd5b50602460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555030826040516200025c9062000c27565b6200026992919062000ca2565b604051809103906000f08015801562000286573d6000803e3d6000fd5b50602560006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e757600080fd5b505afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000322919062000c4c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036b57600080fd5b505afa15801562000380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a6919062000c4c565b6040518363ffffffff1660e01b8152600401620003c592919062000ca2565b602060405180830381600087803b158015620003e057600080fd5b505af1158015620003f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041b919062000c4c565b601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047b57600080fd5b505afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000c4c565b601b80546001600160a01b0392831664010000000002600160201b600160c01b0319909116179055601c54600a80546001600160a01b031916919092161790556200050260006200063a565b6200052c62000524600854600d54620006d960201b62002c3a1790919060201c565b6000620006f0565b600160006200053a62000636565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550620005736008546000620006f060201b60201c565b6007546001600160a01b03166000908152600160205260409020556200059862000636565b6001600160a01b031660006001600160a01b031660008051602062007255833981519152620005da600854600d54620006d960201b62002c3a1790919060201c565b604051620005e9919062000d33565b60405180910390a36007546008546040516001600160a01b0390921691600091600080516020620072558339815191529162000626919062000d33565b60405180910390a3505062000f96565b3390565b6200064462000636565b6001600160a01b03166200065762000757565b6001600160a01b031614620006895760405162461bcd60e51b8152600401620006809062000cfe565b60405180910390fd5b601b805461ff001916610100831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990620006ce90839062000cbc565b60405180910390a150565b6000620006e7828462000ec5565b90505b92915050565b6000600d54831115620007175760405162461bcd60e51b8152600401620006809062000cc7565b816200073a5760006200072a8462000766565b50939550620006ea945050505050565b6000620007478462000766565b50929550620006ea945050505050565b6000546001600160a01b031690565b60008060008060008060008060006200078e8a601554601654601454620007d260201b60201c565b919450925090506000620007a1620008a7565b905060008080620007b58e878787620008da565b919e509c509a509598509396509194505050505091939550919395565b600080808062000823620007e886600262000d3c565b620007f590600a62000dbb565b6200080f898b6200096c60201b62002c461790919060201c565b6200097a60201b62002c521790919060201c565b905060006200085f6200083887600262000d3c565b6200084590600a62000dbb565b6200080f898c6200096c60201b62002c461790919060201c565b90506000620008968262000882858d620006d960201b62002c3a1790919060201c565b620006d960201b62002c3a1790919060201c565b9a9299509097509095505050505050565b60008080620008b562000988565b91509150620008d381836200097a60201b62002c521790919060201c565b9250505090565b600080600080620008fa85896200096c60201b62002c461790919060201c565b905060006200091886896200096c60201b62002c461790919060201c565b905060006200093687896200096c60201b62002c461790919060201c565b905060006200095982620008828587620006d960201b62002c3a1790919060201c565b939b939a50919850919650505050505050565b6000620006e7828462000ea3565b6000620006e7828462000d57565b600e54600d546000918291825b60055481101562000b3a57826001600060058481548110620009c757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a42575081600260006005848154811062000a1b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a5b57600e54600d549450945050505062000b79565b62000abe600160006005848154811062000a8557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162002c3a620006d9821b17901c565b925062000b23600260006005848154811062000aea57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162002c3a620006d9821b17901c565b91508062000b318162000f1c565b91505062000995565b5062000b59600d54600e546200097a60201b62002c521790919060201c565b82101562000b7357600e54600d5493509350505062000b79565b90925090505b9091565b82805462000b8b9062000edf565b90600052602060002090601f01602090048101928262000baf576000855562000bfa565b82601f1062000bca57805160ff191683800117855562000bfa565b8280016001018555821562000bfa579182015b8281111562000bfa57825182559160200191906001019062000bdd565b5062000c0892915062000c35565b5090565b605c806200657483390190565b6104d580620065d083390190565b6107b08062006aa583390190565b5b8082111562000c08576000815560010162000c36565b60006020828403121562000c5e578081fd5b815162000c6b8162000f7d565b9392505050565b6000806040838503121562000c85578081fd5b825162000c928162000f7d565b6020939093015192949293505050565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b6000821982111562000d525762000d5262000f51565b500190565b60008262000d695762000d6962000f67565b500490565b80825b600180861162000d82575062000db2565b81870482111562000d975762000d9762000f51565b8086161562000da557918102915b9490941c93800262000d71565b94509492505050565b6000620006e7600019848460008262000dd75750600162000c6b565b8162000de65750600062000c6b565b816001811462000dff576002811462000e0a5762000e3e565b600191505062000c6b565b60ff84111562000e1e5762000e1e62000f51565b6001841b91508482111562000e375762000e3762000f51565b5062000c6b565b5060208310610133831016604e8410600b841016171562000e76575081810a8381111562000e705762000e7062000f51565b62000c6b565b62000e85848484600162000d6e565b80860482111562000e9a5762000e9a62000f51565b02949350505050565b600081600019048311821515161562000ec05762000ec062000f51565b500290565b60008282101562000eda5762000eda62000f51565b500390565b60028104600182168062000ef457607f821691505b6020821081141562000f1657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000f335762000f3362000f51565b5060010190565b60008262000f4c5762000f4c62000f67565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811462000f9357600080fd5b50565b60805160601c615564620010106000396000818161176501528181612e8c01528181612f4a015281816131ed0152818161329d0152818161359701528181613dcb01528181613ea101528181613ef601528181613f7001528181613fc5015281816141b30152818161421501526142c201526155646000f3fe6080604052600436106104d55760003560e01c806394e1078411610279578063c3d2f5561161015e578063dd6c09ce116100d6578063f53437af1161008a578063f84354f11161006f578063f84354f114610c6e578063fb1eb14b14610c8e578063fc078f7e14610ca3576104dc565b8063f53437af14610c2e578063f7505bc014610c4e576104dc565b8063efeb97e1116100bb578063efeb97e114610bce578063f2cc0c1814610bee578063f2fde38b14610c0e576104dc565b8063dd6c09ce14610ba4578063e4451f6614610bb9576104dc565b8063d51486df1161012d578063d73cf08011610112578063d73cf08014610b44578063dc17493714610b64578063dd62ed3e14610b84576104dc565b8063d51486df14610b04578063d6030bc114610b24576104dc565b8063c3d2f55614610a9a578063c626025114610aba578063c9e6da1914610acf578063cba0e99614610ae4576104dc565b8063a457c2d7116101f1578063abf9d60b116101c0578063b7d65abc116101a5578063b7d65abc14610a5b578063b8fe8d1114610a70578063c329581714610a85576104dc565b8063abf9d60b14610a26578063ad3b884a14610a3b576104dc565b8063a457c2d7146109bc578063a543d87c146109dc578063a9059cbb146109f1578063ab57265014610a11576104dc565b80639c0175fc116102485780639d6f83e41161022d5780639d6f83e4146109725780639f9a4e7f14610987578063a0ac5e19146109a7576104dc565b80639c0175fc1461093d5780639c1dbfb214610952576104dc565b806394e10784146108db57806395d89b41146108f0578063963547041461090557806397a9d5601461091a576104dc565b80634a1e7726116103ba5780635afbfd38116103325780637d1db4a5116102e65780638b1bdcb2116102cb5780638b1bdcb21461089c5780638da5cb5b146108b15780638eb3e553146108c6576104dc565b80637d1db4a5146108725780638aadb80914610887576104dc565b806370a082311161031757806370a0823114610828578063715018a614610848578063769caf601461085d576104dc565b80635afbfd38146107fe5780636b3bd90d14610813576104dc565b80635357b989116103895780635880b8731161036e5780635880b873146107a957806359758571146107c957806359ded940146107e9576104dc565b80635357b98914610774578063583e056814610794576104dc565b80634a1e7726146107155780634a74bb02146107355780634ada218b1461074a5780634ea8eb671461075f576104dc565b806323b872dd1161044d57806332dc12411161041c578063395093511161040157806339509351146106c05780633b124fe7146106e05780634549b039146106f5576104dc565b806332dc12411461068b57806334c73826146106ab576104dc565b806323b872dd1461060957806326f5ccaa146106295780632d83811914610649578063313ce56714610669576104dc565b806315e91447116104a4578063185d374c11610489578063185d374c146105bf5780631bbae6e0146105d457806320c38e13146105f4576104dc565b806315e914471461057b57806318160ddd1461059d576104dc565b8063053ab182146104e157806306fdde0314610503578063095ea7b31461052e5780630fa910c51461055b576104dc565b366104dc57005b600080fd5b3480156104ed57600080fd5b506105016104fc36600461448f565b610cc3565b005b34801561050f57600080fd5b50610518610d87565b60405161052591906145f7565b60405180910390f35b34801561053a57600080fd5b5061054e61054936600461442c565b610e19565b60405161052591906145ec565b34801561056757600080fd5b5061050161057636600461437c565b610e37565b34801561058757600080fd5b50610590610ee4565b604051610525919061453b565b3480156105a957600080fd5b506105b2610ef3565b60405161052591906151cb565b3480156105cb57600080fd5b506105b2610ef9565b3480156105e057600080fd5b506105016105ef36600461448f565b610eff565b34801561060057600080fd5b506105b2610f9d565b34801561061557600080fd5b5061054e6106243660046143ec565b610fa3565b34801561063557600080fd5b5061050161064436600461448f565b61102b565b34801561065557600080fd5b506105b261066436600461448f565b6110cd565b34801561067557600080fd5b5061067e611110565b6040516105259190615268565b34801561069757600080fd5b506105016106a636600461448f565b611119565b3480156106b757600080fd5b506105b261118d565b3480156106cc57600080fd5b5061054e6106db36600461442c565b611193565b3480156106ec57600080fd5b506105b26111e1565b34801561070157600080fd5b506105b26107103660046144bf565b6111e7565b34801561072157600080fd5b5061050161073036600461448f565b611244565b34801561074157600080fd5b5061054e611317565b34801561075657600080fd5b5061054e611325565b34801561076b57600080fd5b50610501611334565b34801561078057600080fd5b506105b261078f3660046144e3565b611736565b3480156107a057600080fd5b50610590611763565b3480156107b557600080fd5b506105016107c436600461448f565b611787565b3480156107d557600080fd5b506105016107e436600461448f565b611833565b3480156107f557600080fd5b506105906118a7565b34801561080a57600080fd5b506105906118b6565b34801561081f57600080fd5b506105b26118cd565b34801561083457600080fd5b506105b261084336600461437c565b6118d3565b34801561085457600080fd5b50610501611935565b34801561086957600080fd5b506105906119d6565b34801561087e57600080fd5b506105b26119e5565b34801561089357600080fd5b506105b26119eb565b3480156108a857600080fd5b506105906119f1565b3480156108bd57600080fd5b50610590611a00565b3480156108d257600080fd5b506105b2611a0f565b3480156108e757600080fd5b506105b2611a15565b3480156108fc57600080fd5b50610518611a38565b34801561091157600080fd5b506105b2611a47565b34801561092657600080fd5b5061092f611a4d565b604051610525929190615244565b34801561094957600080fd5b506105b2611c0a565b34801561095e57600080fd5b5061050161096d36600461448f565b611c10565b34801561097e57600080fd5b506105b2611c84565b34801561099357600080fd5b506105016109a2366004614457565b611c8a565b3480156109b357600080fd5b50610501611d29565b3480156109c857600080fd5b5061054e6109d736600461442c565b611dc0565b3480156109e857600080fd5b50610590611e28565b3480156109fd57600080fd5b5061054e610a0c36600461442c565b611e37565b348015610a1d57600080fd5b50610590611e4b565b348015610a3257600080fd5b50610590611e5a565b348015610a4757600080fd5b50610501610a56366004614457565b611e69565b348015610a6757600080fd5b5061054e611f06565b348015610a7c57600080fd5b506105b2611f16565b348015610a9157600080fd5b506105b2611f1c565b348015610aa657600080fd5b50610501610ab536600461437c565b611f22565b348015610ac657600080fd5b50610501611fc4565b348015610adb57600080fd5b5061059061215b565b348015610af057600080fd5b5061054e610aff36600461437c565b61216a565b348015610b1057600080fd5b50610501610b1f36600461448f565b612188565b348015610b3057600080fd5b50610501610b3f36600461437c565b612234565b348015610b5057600080fd5b50610501610b5f3660046143b4565b6122d6565b348015610b7057600080fd5b50610501610b7f36600461448f565b61245a565b348015610b9057600080fd5b506105b2610b9f3660046143b4565b6124ce565b348015610bb057600080fd5b506105906124f9565b348015610bc557600080fd5b506105b2612508565b348015610bda57600080fd5b50610501610be936600461448f565b61250e565b348015610bfa57600080fd5b50610501610c0936600461437c565b6125aa565b348015610c1a57600080fd5b50610501610c2936600461437c565b61278e565b348015610c3a57600080fd5b50610501610c4936600461448f565b612866565b348015610c5a57600080fd5b50610501610c6936600461448f565b612908565b348015610c7a57600080fd5b50610501610c8936600461437c565b61299d565b348015610c9a57600080fd5b506105b2612bc0565b348015610caf57600080fd5b50610501610cbe36600461448f565b612bc6565b6000610ccd612c5e565b6001600160a01b03811660009081526004602052604090205490915060ff1615610d125760405162461bcd60e51b8152600401610d0990614a67565b60405180910390fd5b6000610d1d83612c62565b505050506001600160a01b038416600090815260016020526040902054919250610d4991905082612c3a565b6001600160a01b038316600090815260016020526040902055600e54610d6f9082612c3a565b600e55600f54610d7f9084612cc2565b600f55505050565b606060118054610d9690615434565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc290615434565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b6000610e2d610e26612c5e565b8484612cce565b5060015b92915050565b610e3f612c5e565b6001600160a01b0316610e50611a00565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610d0990614e66565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f24739a2c0afcb3dd45f0feea0f5e5648fb3d3f3729dbdc202ea75ca21e9848ae90610ed990839061453b565b60405180910390a150565b600c546001600160a01b031681565b600d5490565b60105481565b610f07612c5e565b6001600160a01b0316610f18611a00565b6001600160a01b031614610f3e5760405162461bcd60e51b8152600401610d0990614e66565b690a968163f0a57b400000811015610f685760405162461bcd60e51b8152600401610d09906148f3565b60178190556040517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90610ed99083906151cb565b601f5490565b6000610fb0848484612d82565b61102084610fbc612c5e565b61101b856040518060600160405280602881526020016154e2602891396001600160a01b038a16600090815260036020526040812090610ffa612c5e565b6001600160a01b03168152602081019190915260400160002054919061317f565b612cce565b5060015b9392505050565b611033612c5e565b6001600160a01b0316611044611a00565b6001600160a01b03161461106a5760405162461bcd60e51b8152600401610d0990614e66565b6001811015801561107c5750600a8111155b6110985760405162461bcd60e51b8152600401610d0990614ef8565b601d8190556040517f5be5e13332f5fe25d72958c9d03ce5cdb01b189670222a86673715d56e43ce2a90610ed99083906151cb565b6000600e548211156110f15760405162461bcd60e51b8152600401610d099061507d565b60006110fb611a15565b90506111078382612c52565b9150505b919050565b60135460ff1690565b611121612c5e565b6001600160a01b0316611132611a00565b6001600160a01b0316146111585760405162461bcd60e51b8152600401610d0990614e66565b60238190556040517fee4175a0818f3799ab522c7fd354f5d7a6eab7ca09d49bd933135686844d50cc90610ed99083906151cb565b60085481565b6000610e2d6111a0612c5e565b8461101b85600360006111b1612c5e565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612cc2565b60155481565b6000600d5483111561120b5760405162461bcd60e51b8152600401610d0990614ac4565b8161122a57600061121b84612c62565b50939550610e31945050505050565b600061123584612c62565b50929550610e31945050505050565b61124c612c5e565b6001600160a01b031661125d611a00565b6001600160a01b0316146112835760405162461bcd60e51b8152600401610d0990614e66565b670de0b6b3a764000081101580156112a5575069054b40b1f852bda000008111155b6112c15760405162461bcd60e51b8152600401610d0990614e9b565b601a5481116112e25760405162461bcd60e51b8152600401610d0990614d86565b60188190556040517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0090610ed99083906151cb565b601b54610100900460ff1681565b601b5462010000900460ff1681565b601b805460ff1916600117905542602055601d54600a546040517f70a082310000000000000000000000000000000000000000000000000000000081526000926113fa926064926113f492916001600160a01b0316906370a082319061139e90309060040161453b565b60206040518083038186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee91906144a7565b90612c46565b90612c52565b9050611405816131ab565b50602460009054906101000a90046001600160a01b03166001600160a01b0316637d7c2a1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906144a7565b506024546000906114a7906001600160a01b03166118d3565b905060006114c560646113f4601e5485612c4690919063ffffffff16565b905060006114d38383612c3a565b905060006114f160646113f460235485612c4690919063ffffffff16565b90506114fc81613330565b60006115088383612c3a565b9050600061152660646113f460225485612c4690919063ffffffff16565b9050611531816133d5565b600061153d8383612c3a565b90506000611549611a15565b905060006115578383612c46565b90506115926115668984612c46565b60016000611572612c5e565b6001600160a01b0316815260208101919091526040016000205490612cc2565b6001600061159e612c5e565b6001600160a01b039081168252602080830193909352604091820160009081209490945560245416835260019091528120556010546115dd9084612cc2565b601055600d546115ed9084612c3a565b600d55600e546115fd9082612c3a565b600e556006546024546040516001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611646908a906151cb565b60405180910390a3611656612c5e565b6024546040516001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611699908c906151cb565b60405180910390a36024546040516000916001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116e19087906151cb565b60405180910390a37f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd08360405161171891906151cb565b60405180910390a15050601b805460ff191690555050505050505050565b600061175b611746846002615276565b61175190600a6152f4565b6113f48685612c46565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61178f612c5e565b6001600160a01b03166117a0611a00565b6001600160a01b0316146117c65760405162461bcd60e51b8152600401610d0990614e66565b6014546117d490600a6152f4565b6117df90600a6153e0565b8111156117fe5760405162461bcd60e51b8152600401610d0990614a0a565b60158190556040517faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de290610ed99083906151cb565b61183b612c5e565b6001600160a01b031661184c611a00565b6001600160a01b0316146118725760405162461bcd60e51b8152600401610d0990614e66565b601f8190556040517faef0ff9b1fbda9f88f1a8cdea22e8d23693fa3235778c8e1431ad9694ba1721e90610ed99083906151cb565b600b546001600160a01b031681565b601b5464010000000090046001600160a01b031690565b60205490565b6001600160a01b03811660009081526004602052604081205460ff161561191357506001600160a01b03811660009081526002602052604090205461110b565b6001600160a01b038216600090815260016020526040902054610e31906110cd565b61193d612c5e565b6001600160a01b031661194e611a00565b6001600160a01b0316146119745760405162461bcd60e51b8152600401610d0990614e66565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6006546001600160a01b031681565b60175481565b60185481565b600a546001600160a01b031681565b6000546001600160a01b031690565b60095481565b6000806000611a22611a4d565b9092509050611a318282612c52565b9250505090565b606060128054610d9690615434565b60145481565b600e54600d546000918291825b600554811015611bd857826001600060058481548110611a8a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b035750816002600060058481548110611adc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1a57600e54600d5494509450505050611c06565b611b6e6001600060058481548110611b4257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612c3a565b9250611bc46002600060058481548110611b9857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612c3a565b915080611bd08161546f565b915050611a5a565b50600d54600e54611be891612c52565b821015611c0057600e54600d54935093505050611c06565b90925090505b9091565b601e5490565b611c18612c5e565b6001600160a01b0316611c29611a00565b6001600160a01b031614611c4f5760405162461bcd60e51b8152600401610d0990614e66565b60228190556040517fc7a84a15e15ebb400fead867fd3ab249b3bdfe02b530476b177320ef65b77bb590610ed99083906151cb565b60165481565b611c92612c5e565b6001600160a01b0316611ca3611a00565b6001600160a01b031614611cc95760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ed99083906145ec565b611d31612c5e565b6001600160a01b0316611d42611a00565b6001600160a01b031614611d685760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6000610e2d611dcd612c5e565b8461101b8560405180606001604052806025815260200161550a6025913960036000611df7612c5e565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061317f565b600b546001600160a01b031690565b6000610e2d611e44612c5e565b8484612d82565b6024546001600160a01b031681565b6007546001600160a01b031681565b611e71612c5e565b6001600160a01b0316611e82611a00565b6001600160a01b031614611ea85760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000001790556040517fd8c223bd6f79d10c5c38e077d3c9419f068ddfd8f149bd7a47d47072ba4a46f090610ed99083906145ec565b601b546301000000900460ff1681565b60215490565b60195481565b611f2a612c5e565b6001600160a01b0316611f3b611a00565b6001600160a01b031614611f615760405162461bcd60e51b8152600401610d0990614e66565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f6a98e98a1ad27b12d05795a58fca4f0fd8d14b2fffd74d7aba38c2c08d58934490610ed990839061453b565b601b805460ff1916600190811791829055630100000090910460ff16151514156120dc57600c546040517efdd58e0000000000000000000000000000000000000000000000000000000081526001916001600160a01b03169062fdd58e90612033903390600390600401614598565b60206040518083038186803b15801561204b57600080fd5b505afa15801561205f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208391906144a7565b10156120a15760405162461bcd60e51b8152600401610d0990614950565b6021546020546120b19190615276565b42116120cf5760405162461bcd60e51b8152600401610d0990614f55565b6120d7611334565b61214f565b601b546301000000900460ff1661214f57601f546120fb610843612c5e565b10156121195760405162461bcd60e51b8152600401610d0990614c6f565b6021546020546121299190615276565b42116121475760405162461bcd60e51b8152600401610d0990614f55565b61214f611334565b601b805460ff19169055565b601c546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b612190612c5e565b6001600160a01b03166121a1611a00565b6001600160a01b0316146121c75760405162461bcd60e51b8152600401610d0990614e66565b6014546121d590600a6152f4565b6121e090600a6153e0565b8111156121ff5760405162461bcd60e51b8152600401610d0990614896565b60168190556040517fc9c3eda55e0c1d7fbf155eefd9be0dcbb00e86498e4a8c8efb530e71d390b9ad90610ed99083906151cb565b61223c612c5e565b6001600160a01b031661224d611a00565b6001600160a01b0316146122735760405162461bcd60e51b8152600401610d0990614e66565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517fbc8b6a8d40c8bb13794b2c654ca41432d4605c8da42ccb5f3aa3a652f28b19e090610ed990839061453b565b6122de612c5e565b6001600160a01b03166122ef611a00565b6001600160a01b0316146123155760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b03821661233b5760405162461bcd60e51b8152600401610d09906150da565b6001600160a01b0381166123615760405162461bcd60e51b8152600401610d09906146c5565b6001600160a01b03811630141561238a5760405162461bcd60e51b8152600401610d0990614839565b601b546001600160a01b038281166401000000009092041614156123c05760405162461bcd60e51b8152600401610d0990614afb565b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691909117909155601b80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000009284169283021790556040517f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad90600090a25050565b612462612c5e565b6001600160a01b0316612473611a00565b6001600160a01b0316146124995760405162461bcd60e51b8152600401610d0990614e66565b60198190556040517f4a20ec16ec9328712eee6894b6007fb2e5fc53c50ea4cd271fd9e792a996818e90610ed99083906151cb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6025546001600160a01b031681565b601d5490565b612516612c5e565b6001600160a01b0316612527611a00565b6001600160a01b03161461254d5760405162461bcd60e51b8152600401610d0990614e66565b670de0b6b3a76400008110156125755760405162461bcd60e51b8152600401610d0990614668565b601a8190556040517f74272e6f6c75e19c6f48bb75e2724eb55e3e1726f8b81d97f1db21d22ead93dc90610ed99083906151cb565b6125b2612c5e565b6001600160a01b03166125c3611a00565b6001600160a01b0316146125e95760405162461bcd60e51b8152600401610d0990614e66565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156126265760405162461bcd60e51b8152600401610d0990614b58565b6001600160a01b03811630141561264f5760405162461bcd60e51b8152600401610d0990615020565b6007546001600160a01b038281169116141561267d5760405162461bcd60e51b8152600401610d0990614f8c565b6001600160a01b03811660009081526004602052604090205460ff16156126b65760405162461bcd60e51b8152600401610d09906149ad565b6001600160a01b03811660009081526001602052604090205415612710576001600160a01b0381166000908152600160205260409020546126f6906110cd565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b612796612c5e565b6001600160a01b03166127a7611a00565b6001600160a01b0316146127cd5760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b0381166127f35760405162461bcd60e51b8152600401610d09906147dc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61286e612c5e565b6001600160a01b031661287f611a00565b6001600160a01b0316146128a55760405162461bcd60e51b8152600401610d0990614e66565b600181101580156128b75750600f8111155b6128d35760405162461bcd60e51b8152600401610d099061516e565b601e8190556040517f191f6e3572a47a3b76e8dc0e19e47f7aec7730b1b4b3265bea8b9ce72a85549e90610ed99083906151cb565b612910612c5e565b6001600160a01b0316612921611a00565b6001600160a01b0316146129475760405162461bcd60e51b8152600401610d0990614e66565b60028111156129685760405162461bcd60e51b8152600401610d0990614722565b60148190556040517f1a7d0c0e85c956e4756c1a912c675c28814c419a7e8fc66c1f0512ea332fc19090610ed99083906151cb565b6129a5612c5e565b6001600160a01b03166129b6611a00565b6001600160a01b0316146129dc5760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b03811660009081526004602052604090205460ff16612a145760405162461bcd60e51b8152600401610d0990614d29565b60005b600554811015612bbc57816001600160a01b031660058281548110612a4c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415612baa5760058054612a779060019061541d565b81548110612a9557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600580546001600160a01b039092169183908110612acf57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556005805480612b4d57634e487b7160e01b600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055612bbc565b80612bb48161546f565b915050612a17565b5050565b600f5481565b612bce612c5e565b6001600160a01b0316612bdf611a00565b6001600160a01b031614612c055760405162461bcd60e51b8152600401610d0990614e66565b60218190556040517fa0583f9c9bbe7e7d0a5c3cf8e8907be543c4b59b608d0957d5669cb71cdc0f7d90610ed99083906151cb565b6000611024828461541d565b600061102482846153e0565b6000611024828461528e565b3390565b6000806000806000806000806000612c828a60155460165460145461346e565b9250925092506000612c92611a15565b90506000806000612ca58e8787876134e6565b919e509c509a509598509396509194505050505091939550919395565b60006110248284615276565b6001600160a01b038316612cf45760405162461bcd60e51b8152600401610d0990614c12565b6001600160a01b038216612d1a5760405162461bcd60e51b8152600401610d0990614ccc565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612d759085906151cb565b60405180910390a3505050565b6001600160a01b038316612da85760405162461bcd60e51b8152600401610d099061477f565b6001600160a01b038216612dce5760405162461bcd60e51b8152600401610d0990615111565b60008111612dee5760405162461bcd60e51b8152600401610d0990614bb5565b612df6611a00565b6001600160a01b0316836001600160a01b031614158015612e305750612e1a611a00565b6001600160a01b0316826001600160a01b031614155b8015612e3f5750601b5460ff16155b15612ef957601754811115612e665760405162461bcd60e51b8152600401610d0990614e09565b601c546001600160a01b0316612e7a612c5e565b6001600160a01b03161480612ec757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612ebc612c5e565b6001600160a01b0316145b8015612edc5750601b5462010000900460ff16155b15612ef95760405162461bcd60e51b8152600401610d0990614fe9565b601b5460ff16613026576000612f0e306118d3565b60185490915081108015908190612f305750601c546001600160a01b03163314155b8015612f435750601b54610100900460ff165b15613023577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa157600080fd5b505afa158015612fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd99190614398565b601b5464010000000090046001600160a01b03908116911614156130055761300082613536565b613023565b601b546130239064010000000090046001600160a01b031683613691565b50505b6001600160a01b03831660009081526004602052604090205460ff16801561306757506001600160a01b03821660009081526004602052604090205460ff16155b1561307c576130778383836138f9565b61317a565b6001600160a01b03831660009081526004602052604090205460ff161580156130bd57506001600160a01b03821660009081526004602052604090205460ff165b156130cd57613077838383613b40565b6001600160a01b03831660009081526004602052604090205460ff1615801561310f57506001600160a01b03821660009081526004602052604090205460ff16155b1561311f57613077838383613c6d565b6001600160a01b03831660009081526004602052604090205460ff16801561315f57506001600160a01b03821660009081526004602052604090205460ff165b1561316f57613077838383613cd2565b61317a838383613c6d565b505050565b600081848411156131a35760405162461bcd60e51b8152600401610d0991906145f7565b505050900390565b600a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063095ea7b390613217907f0000000000000000000000000000000000000000000000000000000000000000908690600401614598565b602060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190614473565b506024546040517faf2979eb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263af2979eb926132de92309288926000928392169042906004016145b1565b602060405180830381600087803b1580156132f857600080fd5b505af115801561330c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3191906144a7565b600061333a611a15565b905061336a6133498383612c46565b6006546001600160a01b031660009081526001602052604090205490612cc2565b600680546001600160a01b0390811660009081526001602052604090819020939093559054602454925190821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c99086906151cb565b60405180910390a35050565b60006133df611a15565b905061340f6133ee8383612c46565b600b546001600160a01b031660009081526001602052604090205490612cc2565b600b80546001600160a01b0390811660009081526001602052604090819020939093559054602454925190821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c99086906151cb565b6000808080613496613481866002615276565b61348c90600a6152f4565b6113f48a8a612c46565b905060006134bd6134a8876002615276565b6134b390600a6152f4565b6113f48b8a612c46565b905060006134d5826134cf8c86612c3a565b90612c3a565b9a9299509097509095505050505050565b60008080806134f58886612c46565b905060006135038887612c46565b905060006135118888612c46565b90506000613523826134cf8686612c3a565b939b939a50919850919650505050505050565b601b805460ff19166001179055601a54600090613554908390612c3a565b90506000613563826002612c52565b905060006135718383612c3a565b90504761357d83613d66565b60006135894783612c3a565b90506135958382613f6a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ee57600080fd5b505afa158015613602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136269190614398565b6001600160a01b03167fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f685838660405161366293929190615252565b60405180910390a26136773032601a54612d82565b61367f614060565b5050601b805460ff1916905550505050565b601b805460ff19166001179055601a546000906136af908390612c3a565b905060006136be826002612c52565b905060006136cc8383612c3a565b6025549091506136e79030906001600160a01b031684612d82565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b038716906370a082319061372f90309060040161453b565b60206040518083038186803b15801561374757600080fd5b505afa15801561375b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377f91906144a7565b6025546040517fa114398d0000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063a114398d906137cb9089908790600401614598565b600060405180830381600087803b1580156137e557600080fd5b505af11580156137f9573d6000803e3d6000fd5b50505050600061387f82886001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161382f919061453b565b60206040518083038186803b15801561384757600080fd5b505afa15801561385b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cf91906144a7565b905061388c8784836141ad565b866001600160a01b03167fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f68583866040516138c993929190615252565b60405180910390a26138de3032601a54612d82565b6138e6614060565b5050601b805460ff191690555050505050565b6000613903611a15565b905060008060008060008061391788612c62565b95509550955095509550955060006139388883612c4690919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061395e908a612c3a565b6001600160a01b038c1660009081526002602090815260408083209390935560019052205461398d9088612c3a565b6001600160a01b038c16600090815260016020526040902055601b5460ff1615613a33576001600160a01b038a166000908152600160205260409020546139d49088612cc2565b6001600160a01b03808c1660008181526001602052604090819020939093559151908d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613a26908d906151cb565b60405180910390a3613b33565b6001600160a01b038a16600090815260016020526040902054613a569087612cc2565b6001600160a01b038b16600090815260016020526040808220929092553081522054613a829082612cc2565b30600090815260016020526040902055613a9c8584614358565b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613adf91906151cb565b60405180910390a3896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b2a91906151cb565b60405180910390a35b5050505050505050505050565b6000613b4a611a15565b9050600080600080600080613b5e88612c62565b9550955095509550955095506000613b7f8883612c4690919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150613ba59088612c3a565b6001600160a01b038c16600090815260016020526040902055601b5460ff1615613c1b576001600160a01b038a16600090815260026020526040902054613bec908a612cc2565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546139d49088612cc2565b6001600160a01b038a16600090815260026020526040902054613c3e9085612cc2565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054613a569087612cc2565b6000613c77611a15565b9050600080600080600080613c8b88612c62565b9550955095509550955095506000613cac8883612c4690919063ffffffff16565b6001600160a01b038c1660009081526001602052604090205490915061398d9088612c3a565b6000613cdc611a15565b9050600080600080600080613cf088612c62565b9550955095509550955095506000613d118883612c4690919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150613d37908a612c3a565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054613ba59088612c3a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613da957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e2257600080fd5b505afa158015613e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5a9190614398565b81600181518110613e7b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050613ec6307f000000000000000000000000000000000000000000000000000000000000000084612cce565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790613f349085906000908690309042906004016151d4565b600060405180830381600087803b158015613f4e57600080fd5b505af1158015613f62573d6000803e3d6000fd5b505050505050565b613f95307f000000000000000000000000000000000000000000000000000000000000000084612cce565b6040517ff305d7190000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990839061400790309087906000908190849042906004016145b1565b6060604051808303818588803b15801561402057600080fd5b505af1158015614034573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614059919061450e565b5050505050565b60085460075460009161407f916134cf906001600160a01b03166118d3565b90506019548111156141aa5760006140988260006111e7565b601c546001600160a01b03166000908152600160205260409020549091506140c09082612cc2565b601c546001600160a01b0390811660009081526001602052604080822093909355600754909116815220546140f59082612c3a565b600780546001600160a01b039081166000908152600160205260409081902093909355601c54915492519181169216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906141529086906151cb565b60405180910390a3601c60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f4e57600080fd5b50565b6141d8307f000000000000000000000000000000000000000000000000000000000000000084612cce565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063095ea7b39061423f907f0000000000000000000000000000000000000000000000000000000000000000908590600401614598565b602060405180830381600087803b15801561425957600080fd5b505af115801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614473565b506040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e8e337009061430690309087908790879060009081908690429060040161454f565b606060405180830381600087803b15801561432057600080fd5b505af1158015614334573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f62919061450e565b600e546143659083612c3a565b600e55600f546143759082612cc2565b600f555050565b60006020828403121561438d578081fd5b8135611024816154be565b6000602082840312156143a9578081fd5b8151611024816154be565b600080604083850312156143c6578081fd5b82356143d1816154be565b915060208301356143e1816154be565b809150509250929050565b600080600060608486031215614400578081fd5b833561440b816154be565b9250602084013561441b816154be565b929592945050506040919091013590565b6000806040838503121561443e578182fd5b8235614449816154be565b946020939093013593505050565b600060208284031215614468578081fd5b8135611024816154d3565b600060208284031215614484578081fd5b8151611024816154d3565b6000602082840312156144a0578081fd5b5035919050565b6000602082840312156144b8578081fd5b5051919050565b600080604083850312156144d1578182fd5b8235915060208301356143e1816154d3565b6000806000606084860312156144f7578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215614522578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101561462357858101830151858201604001528201614607565b818111156146345783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526035908201527f504c41534d413a206175746f5377617043616c6c65724665652073686f756c6460408201527f2062652067726561746572207468616e20316531380000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a205061697220746f6b656e2061646472657373206973207a6560408201527f726f2e0000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f504c41534d413a2066656520646563696d616c732073686f756c64206265206960408201527f6e2030202d203200000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f504c41534d413a207472616e736665722066726f6d20746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526028908201527f504c41534d413a205061697220746f6b656e20616464726573732073656c662060408201527f616464726573732e000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a206c6f636b4665652073686f756c6420626520696e2030202d60408201527f2031300000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526033908201527f504c41534d413a206d61785478416d6f756e742073686f756c6420626520677260408201527f6561746572207468616e20353030303065313800000000000000000000000000606082015260800190565b6020808252603e908201527f504c41534d413a206f6e65206d75636820626520686f6c64696e67207468652060408201527f504c41534d41206f726220746f207965696c64207375636820706f7765720000606082015260800190565b60208082526023908201527f504c41534d413a204163636f756e7420697320616c7265616479206578636c7560408201527f6465640000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f504c41534d413a207461784665652073686f756c6420626520696e2030202d2060408201527f3130000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f504c41534d413a204578636c75646564206164647265737365732063616e6e6f60408201527f742063616c6c20746869732066756e6374696f6e000000000000000000000000606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526032908201527f504c41534d413a205061697220746f6b656e206164647265737320697320736160408201527f6d652061732063757272656e74206f6e652e0000000000000000000000000000606082015260800190565b6020808252602a908201527f504c41534d413a2057652063616e206e6f74206578636c75646520556e69737760408201527f617020726f757465722e00000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f504c41534d413a205472616e7366657220616d6f756e74206d7573742062652060408201527f67726561746572207468616e207a65726f000000000000000000000000000000606082015260800190565b60208082526025908201527f504c41534d413a20617070726f76652066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f504c41534d413a204163636573732064656e6965642c206e656564206d6f726560408201527f20504c41534d4120746f20667573696f6e200000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a20617070726f766520746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a204163636f756e7420697320616c726561647920696e636c7560408201527f6465640000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526043908201527f504c41534d413a206d696e546f6b656e4265666f7265537761702073686f756c60408201527f642062652067726561746572207468616e206175746f5377617043616c6c657260608201527f4665650000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526030908201527f504c41534d413a205472616e7366657220616d6f756e7420657863656564732060408201527f746865206d61785478416d6f756e742e00000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f504c41534d413a206d696e546f6b656e4265666f7265537761702073686f756c60408201527f6420626520696e2031653138202d203235303030653138000000000000000000606082015260800190565b6020808252602e908201527f504c41534d413a206c697175696469747952656d6f76654665652073686f756c60408201527f6420626520696e2031202d203130000000000000000000000000000000000000606082015260800190565b60208082526011908201527f504c41534d413a20546f6f20536f6f6e2e000000000000000000000000000000604082015260600190565b6020808252602a908201527f504c41534d413a2057652063616e206e6f74206578636c75646520726577656160408201527f72642077616c6c65742e00000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f504c41534d413a2074726164696e672069732064697361626c65642e00000000604082015260600190565b60208082526029908201527f504c41534d413a2057652063616e206e6f74206578636c75646520636f6e747260408201527f6163742073656c662e0000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f504c41534d413a20416d6f756e74206d757374206265206c657373207468616e60408201527f20746f74616c207265666c656374696f6e730000000000000000000000000000606082015260800190565b6020808252601d908201527f504c41534d413a20506f6f6c2061646472657373206973207a65726f2e000000604082015260600190565b60208082526024908201527f504c41534d413a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f504c41534d413a20667573696f6e43616c6c65724665652073686f756c64206260408201527f6520696e2031202d203135000000000000000000000000000000000000000000606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156152235784516001600160a01b0316835293830193918301916001016151fe565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60008219821115615289576152896154a8565b500190565b6000826152a957634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116152c057506152eb565b8187048211156152d2576152d26154a8565b808616156152df57918102915b9490941c9380026152b1565b94509492505050565b60006110247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848460008261532b57506001611024565b8161533857506000611024565b816001811461534e576002811461535857615385565b6001915050611024565b60ff841115615369576153696154a8565b6001841b91508482111561537f5761537f6154a8565b50611024565b5060208310610133831016604e8410600b84101617156153b8575081810a838111156153b3576153b36154a8565b611024565b6153c584848460016152ae565b8086048211156153d7576153d76154a8565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615418576154186154a8565b500290565b60008282101561542f5761542f6154a8565b500390565b60028104600182168061544857607f821691505b6020821081141561546957634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154a1576154a16154a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146141aa57600080fd5b80151581146141aa57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a6cf6969e2769b447fc1365c061a82e339a7688b768e9b643debbaa258f9b0864736f6c634300080000336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220ab7f2be6a9a2171cfc4c76622a83c7b620591dc19ed230a83cacb924f38e132a64736f6c6343000800003360a060405234801561001057600080fd5b506040516104d53803806104d583398101604081905261002f91610065565b600080546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b0319166080526100b6565b60008060408385031215610077578182fd5b82516100828161009e565b60208401519092506100938161009e565b809150509250929050565b6001600160a01b03811681146100b357600080fd5b50565b60805160601c6103f56100e06000396000818160880152818160db015261026101526103f56000f3fe60806040526004361061002d5760003560e01c8063583e0568146100395780637d7c2a1c1461006457610034565b3661003457005b600080fd5b34801561004557600080fd5b5061004e610086565b60405161005b9190610312565b60405180910390f35b34801561007057600080fd5b506100796100aa565b60405161005b91906103b6565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006100b5476100b8565b90565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561013f57600080fd5b505afa158015610153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017791906102d7565b816000815181106101b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600054825191169082906001908110610216577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517fb6f9de950000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169063b6f9de959084906102a190600090869030904290600401610333565b6000604051808303818588803b1580156102ba57600080fd5b505af11580156102ce573d6000803e3d6000fd5b50505050505050565b6000602082840312156102e8578081fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461030b578182fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b8181101561038957845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101610357565b505073ffffffffffffffffffffffffffffffffffffffff9690961660408501525050506060015292915050565b9081526020019056fea264697066735822122050fbaa1cf939a523700b4dea573b205ba765139d96728ef8648bd1de5c41e51264736f6c6343000800003360a060405234801561001057600080fd5b506040516107b03803806107b083398101604081905261002f91610065565b600080546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b0319166080526100b6565b60008060408385031215610077578182fd5b82516100828161009e565b60208401519092506100938161009e565b809150509250929050565b6001600160a01b03811681146100b357600080fd5b50565b60805160601c6106cf6100e1600039600081816070015281816103cf015261048901526106cf6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063583e05681461003b578063a114398d14610059575b600080fd5b61004361006e565b604051610050919061058c565b60405180910390f35b61006c610067366004610511565b610092565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a08231906100e790309060040161058c565b60206040518083038186803b1580156100ff57600080fd5b505afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101379190610574565b9050610143838361028c565b60006101d8828573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610182919061058c565b60206040518083038186803b15801561019a57600080fd5b505afa1580156101ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d29190610574565b906104fe565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff8087169263a9059cbb9261023392169085906004016105ad565b602060405180830381600087803b15801561024d57600080fd5b505af1158015610261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102859190610554565b5050505050565b604080516002808252606082018352600092602083019080368337505060008054835193945073ffffffffffffffffffffffffffffffffffffffff16928492506102ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110610374577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526000546040517f095ea7b300000000000000000000000000000000000000000000000000000000815291169063095ea7b3906103f9907f00000000000000000000000000000000000000000000000000000000000000009086906004016105ad565b602060405180830381600087803b15801561041357600080fd5b505af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b9190610554565b506040517f5c11d79500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635c11d795906104c79085906000908690309042906004016105d3565b600060405180830381600087803b1580156104e157600080fd5b505af11580156104f5573d6000803e3d6000fd5b50505050505050565b600061050a828461065d565b9392505050565b60008060408385031215610523578182fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610546578283fd5b946020939093013593505050565b600060208284031215610565578081fd5b8151801515811461050a578182fd5b600060208284031215610585578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561062f57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016105fd565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600082821015610694577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b50039056fea26469706673582212203d5c78bb177a34cb7a76f1008842911637246e17964b7aafc700f51b4ce0e17464736f6c63430008000033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000003f870857a3e0e3800000

Deployed Bytecode

0x6080604052600436106104d55760003560e01c806394e1078411610279578063c3d2f5561161015e578063dd6c09ce116100d6578063f53437af1161008a578063f84354f11161006f578063f84354f114610c6e578063fb1eb14b14610c8e578063fc078f7e14610ca3576104dc565b8063f53437af14610c2e578063f7505bc014610c4e576104dc565b8063efeb97e1116100bb578063efeb97e114610bce578063f2cc0c1814610bee578063f2fde38b14610c0e576104dc565b8063dd6c09ce14610ba4578063e4451f6614610bb9576104dc565b8063d51486df1161012d578063d73cf08011610112578063d73cf08014610b44578063dc17493714610b64578063dd62ed3e14610b84576104dc565b8063d51486df14610b04578063d6030bc114610b24576104dc565b8063c3d2f55614610a9a578063c626025114610aba578063c9e6da1914610acf578063cba0e99614610ae4576104dc565b8063a457c2d7116101f1578063abf9d60b116101c0578063b7d65abc116101a5578063b7d65abc14610a5b578063b8fe8d1114610a70578063c329581714610a85576104dc565b8063abf9d60b14610a26578063ad3b884a14610a3b576104dc565b8063a457c2d7146109bc578063a543d87c146109dc578063a9059cbb146109f1578063ab57265014610a11576104dc565b80639c0175fc116102485780639d6f83e41161022d5780639d6f83e4146109725780639f9a4e7f14610987578063a0ac5e19146109a7576104dc565b80639c0175fc1461093d5780639c1dbfb214610952576104dc565b806394e10784146108db57806395d89b41146108f0578063963547041461090557806397a9d5601461091a576104dc565b80634a1e7726116103ba5780635afbfd38116103325780637d1db4a5116102e65780638b1bdcb2116102cb5780638b1bdcb21461089c5780638da5cb5b146108b15780638eb3e553146108c6576104dc565b80637d1db4a5146108725780638aadb80914610887576104dc565b806370a082311161031757806370a0823114610828578063715018a614610848578063769caf601461085d576104dc565b80635afbfd38146107fe5780636b3bd90d14610813576104dc565b80635357b989116103895780635880b8731161036e5780635880b873146107a957806359758571146107c957806359ded940146107e9576104dc565b80635357b98914610774578063583e056814610794576104dc565b80634a1e7726146107155780634a74bb02146107355780634ada218b1461074a5780634ea8eb671461075f576104dc565b806323b872dd1161044d57806332dc12411161041c578063395093511161040157806339509351146106c05780633b124fe7146106e05780634549b039146106f5576104dc565b806332dc12411461068b57806334c73826146106ab576104dc565b806323b872dd1461060957806326f5ccaa146106295780632d83811914610649578063313ce56714610669576104dc565b806315e91447116104a4578063185d374c11610489578063185d374c146105bf5780631bbae6e0146105d457806320c38e13146105f4576104dc565b806315e914471461057b57806318160ddd1461059d576104dc565b8063053ab182146104e157806306fdde0314610503578063095ea7b31461052e5780630fa910c51461055b576104dc565b366104dc57005b600080fd5b3480156104ed57600080fd5b506105016104fc36600461448f565b610cc3565b005b34801561050f57600080fd5b50610518610d87565b60405161052591906145f7565b60405180910390f35b34801561053a57600080fd5b5061054e61054936600461442c565b610e19565b60405161052591906145ec565b34801561056757600080fd5b5061050161057636600461437c565b610e37565b34801561058757600080fd5b50610590610ee4565b604051610525919061453b565b3480156105a957600080fd5b506105b2610ef3565b60405161052591906151cb565b3480156105cb57600080fd5b506105b2610ef9565b3480156105e057600080fd5b506105016105ef36600461448f565b610eff565b34801561060057600080fd5b506105b2610f9d565b34801561061557600080fd5b5061054e6106243660046143ec565b610fa3565b34801561063557600080fd5b5061050161064436600461448f565b61102b565b34801561065557600080fd5b506105b261066436600461448f565b6110cd565b34801561067557600080fd5b5061067e611110565b6040516105259190615268565b34801561069757600080fd5b506105016106a636600461448f565b611119565b3480156106b757600080fd5b506105b261118d565b3480156106cc57600080fd5b5061054e6106db36600461442c565b611193565b3480156106ec57600080fd5b506105b26111e1565b34801561070157600080fd5b506105b26107103660046144bf565b6111e7565b34801561072157600080fd5b5061050161073036600461448f565b611244565b34801561074157600080fd5b5061054e611317565b34801561075657600080fd5b5061054e611325565b34801561076b57600080fd5b50610501611334565b34801561078057600080fd5b506105b261078f3660046144e3565b611736565b3480156107a057600080fd5b50610590611763565b3480156107b557600080fd5b506105016107c436600461448f565b611787565b3480156107d557600080fd5b506105016107e436600461448f565b611833565b3480156107f557600080fd5b506105906118a7565b34801561080a57600080fd5b506105906118b6565b34801561081f57600080fd5b506105b26118cd565b34801561083457600080fd5b506105b261084336600461437c565b6118d3565b34801561085457600080fd5b50610501611935565b34801561086957600080fd5b506105906119d6565b34801561087e57600080fd5b506105b26119e5565b34801561089357600080fd5b506105b26119eb565b3480156108a857600080fd5b506105906119f1565b3480156108bd57600080fd5b50610590611a00565b3480156108d257600080fd5b506105b2611a0f565b3480156108e757600080fd5b506105b2611a15565b3480156108fc57600080fd5b50610518611a38565b34801561091157600080fd5b506105b2611a47565b34801561092657600080fd5b5061092f611a4d565b604051610525929190615244565b34801561094957600080fd5b506105b2611c0a565b34801561095e57600080fd5b5061050161096d36600461448f565b611c10565b34801561097e57600080fd5b506105b2611c84565b34801561099357600080fd5b506105016109a2366004614457565b611c8a565b3480156109b357600080fd5b50610501611d29565b3480156109c857600080fd5b5061054e6109d736600461442c565b611dc0565b3480156109e857600080fd5b50610590611e28565b3480156109fd57600080fd5b5061054e610a0c36600461442c565b611e37565b348015610a1d57600080fd5b50610590611e4b565b348015610a3257600080fd5b50610590611e5a565b348015610a4757600080fd5b50610501610a56366004614457565b611e69565b348015610a6757600080fd5b5061054e611f06565b348015610a7c57600080fd5b506105b2611f16565b348015610a9157600080fd5b506105b2611f1c565b348015610aa657600080fd5b50610501610ab536600461437c565b611f22565b348015610ac657600080fd5b50610501611fc4565b348015610adb57600080fd5b5061059061215b565b348015610af057600080fd5b5061054e610aff36600461437c565b61216a565b348015610b1057600080fd5b50610501610b1f36600461448f565b612188565b348015610b3057600080fd5b50610501610b3f36600461437c565b612234565b348015610b5057600080fd5b50610501610b5f3660046143b4565b6122d6565b348015610b7057600080fd5b50610501610b7f36600461448f565b61245a565b348015610b9057600080fd5b506105b2610b9f3660046143b4565b6124ce565b348015610bb057600080fd5b506105906124f9565b348015610bc557600080fd5b506105b2612508565b348015610bda57600080fd5b50610501610be936600461448f565b61250e565b348015610bfa57600080fd5b50610501610c0936600461437c565b6125aa565b348015610c1a57600080fd5b50610501610c2936600461437c565b61278e565b348015610c3a57600080fd5b50610501610c4936600461448f565b612866565b348015610c5a57600080fd5b50610501610c6936600461448f565b612908565b348015610c7a57600080fd5b50610501610c8936600461437c565b61299d565b348015610c9a57600080fd5b506105b2612bc0565b348015610caf57600080fd5b50610501610cbe36600461448f565b612bc6565b6000610ccd612c5e565b6001600160a01b03811660009081526004602052604090205490915060ff1615610d125760405162461bcd60e51b8152600401610d0990614a67565b60405180910390fd5b6000610d1d83612c62565b505050506001600160a01b038416600090815260016020526040902054919250610d4991905082612c3a565b6001600160a01b038316600090815260016020526040902055600e54610d6f9082612c3a565b600e55600f54610d7f9084612cc2565b600f55505050565b606060118054610d9690615434565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc290615434565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b6000610e2d610e26612c5e565b8484612cce565b5060015b92915050565b610e3f612c5e565b6001600160a01b0316610e50611a00565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610d0990614e66565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f24739a2c0afcb3dd45f0feea0f5e5648fb3d3f3729dbdc202ea75ca21e9848ae90610ed990839061453b565b60405180910390a150565b600c546001600160a01b031681565b600d5490565b60105481565b610f07612c5e565b6001600160a01b0316610f18611a00565b6001600160a01b031614610f3e5760405162461bcd60e51b8152600401610d0990614e66565b690a968163f0a57b400000811015610f685760405162461bcd60e51b8152600401610d09906148f3565b60178190556040517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90610ed99083906151cb565b601f5490565b6000610fb0848484612d82565b61102084610fbc612c5e565b61101b856040518060600160405280602881526020016154e2602891396001600160a01b038a16600090815260036020526040812090610ffa612c5e565b6001600160a01b03168152602081019190915260400160002054919061317f565b612cce565b5060015b9392505050565b611033612c5e565b6001600160a01b0316611044611a00565b6001600160a01b03161461106a5760405162461bcd60e51b8152600401610d0990614e66565b6001811015801561107c5750600a8111155b6110985760405162461bcd60e51b8152600401610d0990614ef8565b601d8190556040517f5be5e13332f5fe25d72958c9d03ce5cdb01b189670222a86673715d56e43ce2a90610ed99083906151cb565b6000600e548211156110f15760405162461bcd60e51b8152600401610d099061507d565b60006110fb611a15565b90506111078382612c52565b9150505b919050565b60135460ff1690565b611121612c5e565b6001600160a01b0316611132611a00565b6001600160a01b0316146111585760405162461bcd60e51b8152600401610d0990614e66565b60238190556040517fee4175a0818f3799ab522c7fd354f5d7a6eab7ca09d49bd933135686844d50cc90610ed99083906151cb565b60085481565b6000610e2d6111a0612c5e565b8461101b85600360006111b1612c5e565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612cc2565b60155481565b6000600d5483111561120b5760405162461bcd60e51b8152600401610d0990614ac4565b8161122a57600061121b84612c62565b50939550610e31945050505050565b600061123584612c62565b50929550610e31945050505050565b61124c612c5e565b6001600160a01b031661125d611a00565b6001600160a01b0316146112835760405162461bcd60e51b8152600401610d0990614e66565b670de0b6b3a764000081101580156112a5575069054b40b1f852bda000008111155b6112c15760405162461bcd60e51b8152600401610d0990614e9b565b601a5481116112e25760405162461bcd60e51b8152600401610d0990614d86565b60188190556040517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0090610ed99083906151cb565b601b54610100900460ff1681565b601b5462010000900460ff1681565b601b805460ff1916600117905542602055601d54600a546040517f70a082310000000000000000000000000000000000000000000000000000000081526000926113fa926064926113f492916001600160a01b0316906370a082319061139e90309060040161453b565b60206040518083038186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee91906144a7565b90612c46565b90612c52565b9050611405816131ab565b50602460009054906101000a90046001600160a01b03166001600160a01b0316637d7c2a1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906144a7565b506024546000906114a7906001600160a01b03166118d3565b905060006114c560646113f4601e5485612c4690919063ffffffff16565b905060006114d38383612c3a565b905060006114f160646113f460235485612c4690919063ffffffff16565b90506114fc81613330565b60006115088383612c3a565b9050600061152660646113f460225485612c4690919063ffffffff16565b9050611531816133d5565b600061153d8383612c3a565b90506000611549611a15565b905060006115578383612c46565b90506115926115668984612c46565b60016000611572612c5e565b6001600160a01b0316815260208101919091526040016000205490612cc2565b6001600061159e612c5e565b6001600160a01b039081168252602080830193909352604091820160009081209490945560245416835260019091528120556010546115dd9084612cc2565b601055600d546115ed9084612c3a565b600d55600e546115fd9082612c3a565b600e556006546024546040516001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611646908a906151cb565b60405180910390a3611656612c5e565b6024546040516001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611699908c906151cb565b60405180910390a36024546040516000916001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116e19087906151cb565b60405180910390a37f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd08360405161171891906151cb565b60405180910390a15050601b805460ff191690555050505050505050565b600061175b611746846002615276565b61175190600a6152f4565b6113f48685612c46565b949350505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b61178f612c5e565b6001600160a01b03166117a0611a00565b6001600160a01b0316146117c65760405162461bcd60e51b8152600401610d0990614e66565b6014546117d490600a6152f4565b6117df90600a6153e0565b8111156117fe5760405162461bcd60e51b8152600401610d0990614a0a565b60158190556040517faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de290610ed99083906151cb565b61183b612c5e565b6001600160a01b031661184c611a00565b6001600160a01b0316146118725760405162461bcd60e51b8152600401610d0990614e66565b601f8190556040517faef0ff9b1fbda9f88f1a8cdea22e8d23693fa3235778c8e1431ad9694ba1721e90610ed99083906151cb565b600b546001600160a01b031681565b601b5464010000000090046001600160a01b031690565b60205490565b6001600160a01b03811660009081526004602052604081205460ff161561191357506001600160a01b03811660009081526002602052604090205461110b565b6001600160a01b038216600090815260016020526040902054610e31906110cd565b61193d612c5e565b6001600160a01b031661194e611a00565b6001600160a01b0316146119745760405162461bcd60e51b8152600401610d0990614e66565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6006546001600160a01b031681565b60175481565b60185481565b600a546001600160a01b031681565b6000546001600160a01b031690565b60095481565b6000806000611a22611a4d565b9092509050611a318282612c52565b9250505090565b606060128054610d9690615434565b60145481565b600e54600d546000918291825b600554811015611bd857826001600060058481548110611a8a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b035750816002600060058481548110611adc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1a57600e54600d5494509450505050611c06565b611b6e6001600060058481548110611b4257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612c3a565b9250611bc46002600060058481548110611b9857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612c3a565b915080611bd08161546f565b915050611a5a565b50600d54600e54611be891612c52565b821015611c0057600e54600d54935093505050611c06565b90925090505b9091565b601e5490565b611c18612c5e565b6001600160a01b0316611c29611a00565b6001600160a01b031614611c4f5760405162461bcd60e51b8152600401610d0990614e66565b60228190556040517fc7a84a15e15ebb400fead867fd3ab249b3bdfe02b530476b177320ef65b77bb590610ed99083906151cb565b60165481565b611c92612c5e565b6001600160a01b0316611ca3611a00565b6001600160a01b031614611cc95760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ed99083906145ec565b611d31612c5e565b6001600160a01b0316611d42611a00565b6001600160a01b031614611d685760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6000610e2d611dcd612c5e565b8461101b8560405180606001604052806025815260200161550a6025913960036000611df7612c5e565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061317f565b600b546001600160a01b031690565b6000610e2d611e44612c5e565b8484612d82565b6024546001600160a01b031681565b6007546001600160a01b031681565b611e71612c5e565b6001600160a01b0316611e82611a00565b6001600160a01b031614611ea85760405162461bcd60e51b8152600401610d0990614e66565b601b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000001790556040517fd8c223bd6f79d10c5c38e077d3c9419f068ddfd8f149bd7a47d47072ba4a46f090610ed99083906145ec565b601b546301000000900460ff1681565b60215490565b60195481565b611f2a612c5e565b6001600160a01b0316611f3b611a00565b6001600160a01b031614611f615760405162461bcd60e51b8152600401610d0990614e66565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f6a98e98a1ad27b12d05795a58fca4f0fd8d14b2fffd74d7aba38c2c08d58934490610ed990839061453b565b601b805460ff1916600190811791829055630100000090910460ff16151514156120dc57600c546040517efdd58e0000000000000000000000000000000000000000000000000000000081526001916001600160a01b03169062fdd58e90612033903390600390600401614598565b60206040518083038186803b15801561204b57600080fd5b505afa15801561205f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208391906144a7565b10156120a15760405162461bcd60e51b8152600401610d0990614950565b6021546020546120b19190615276565b42116120cf5760405162461bcd60e51b8152600401610d0990614f55565b6120d7611334565b61214f565b601b546301000000900460ff1661214f57601f546120fb610843612c5e565b10156121195760405162461bcd60e51b8152600401610d0990614c6f565b6021546020546121299190615276565b42116121475760405162461bcd60e51b8152600401610d0990614f55565b61214f611334565b601b805460ff19169055565b601c546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b612190612c5e565b6001600160a01b03166121a1611a00565b6001600160a01b0316146121c75760405162461bcd60e51b8152600401610d0990614e66565b6014546121d590600a6152f4565b6121e090600a6153e0565b8111156121ff5760405162461bcd60e51b8152600401610d0990614896565b60168190556040517fc9c3eda55e0c1d7fbf155eefd9be0dcbb00e86498e4a8c8efb530e71d390b9ad90610ed99083906151cb565b61223c612c5e565b6001600160a01b031661224d611a00565b6001600160a01b0316146122735760405162461bcd60e51b8152600401610d0990614e66565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517fbc8b6a8d40c8bb13794b2c654ca41432d4605c8da42ccb5f3aa3a652f28b19e090610ed990839061453b565b6122de612c5e565b6001600160a01b03166122ef611a00565b6001600160a01b0316146123155760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b03821661233b5760405162461bcd60e51b8152600401610d09906150da565b6001600160a01b0381166123615760405162461bcd60e51b8152600401610d09906146c5565b6001600160a01b03811630141561238a5760405162461bcd60e51b8152600401610d0990614839565b601b546001600160a01b038281166401000000009092041614156123c05760405162461bcd60e51b8152600401610d0990614afb565b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384811691909117909155601b80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000009284169283021790556040517f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad90600090a25050565b612462612c5e565b6001600160a01b0316612473611a00565b6001600160a01b0316146124995760405162461bcd60e51b8152600401610d0990614e66565b60198190556040517f4a20ec16ec9328712eee6894b6007fb2e5fc53c50ea4cd271fd9e792a996818e90610ed99083906151cb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6025546001600160a01b031681565b601d5490565b612516612c5e565b6001600160a01b0316612527611a00565b6001600160a01b03161461254d5760405162461bcd60e51b8152600401610d0990614e66565b670de0b6b3a76400008110156125755760405162461bcd60e51b8152600401610d0990614668565b601a8190556040517f74272e6f6c75e19c6f48bb75e2724eb55e3e1726f8b81d97f1db21d22ead93dc90610ed99083906151cb565b6125b2612c5e565b6001600160a01b03166125c3611a00565b6001600160a01b0316146125e95760405162461bcd60e51b8152600401610d0990614e66565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156126265760405162461bcd60e51b8152600401610d0990614b58565b6001600160a01b03811630141561264f5760405162461bcd60e51b8152600401610d0990615020565b6007546001600160a01b038281169116141561267d5760405162461bcd60e51b8152600401610d0990614f8c565b6001600160a01b03811660009081526004602052604090205460ff16156126b65760405162461bcd60e51b8152600401610d09906149ad565b6001600160a01b03811660009081526001602052604090205415612710576001600160a01b0381166000908152600160205260409020546126f6906110cd565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b612796612c5e565b6001600160a01b03166127a7611a00565b6001600160a01b0316146127cd5760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b0381166127f35760405162461bcd60e51b8152600401610d09906147dc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61286e612c5e565b6001600160a01b031661287f611a00565b6001600160a01b0316146128a55760405162461bcd60e51b8152600401610d0990614e66565b600181101580156128b75750600f8111155b6128d35760405162461bcd60e51b8152600401610d099061516e565b601e8190556040517f191f6e3572a47a3b76e8dc0e19e47f7aec7730b1b4b3265bea8b9ce72a85549e90610ed99083906151cb565b612910612c5e565b6001600160a01b0316612921611a00565b6001600160a01b0316146129475760405162461bcd60e51b8152600401610d0990614e66565b60028111156129685760405162461bcd60e51b8152600401610d0990614722565b60148190556040517f1a7d0c0e85c956e4756c1a912c675c28814c419a7e8fc66c1f0512ea332fc19090610ed99083906151cb565b6129a5612c5e565b6001600160a01b03166129b6611a00565b6001600160a01b0316146129dc5760405162461bcd60e51b8152600401610d0990614e66565b6001600160a01b03811660009081526004602052604090205460ff16612a145760405162461bcd60e51b8152600401610d0990614d29565b60005b600554811015612bbc57816001600160a01b031660058281548110612a4c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415612baa5760058054612a779060019061541d565b81548110612a9557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600580546001600160a01b039092169183908110612acf57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556005805480612b4d57634e487b7160e01b600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055612bbc565b80612bb48161546f565b915050612a17565b5050565b600f5481565b612bce612c5e565b6001600160a01b0316612bdf611a00565b6001600160a01b031614612c055760405162461bcd60e51b8152600401610d0990614e66565b60218190556040517fa0583f9c9bbe7e7d0a5c3cf8e8907be543c4b59b608d0957d5669cb71cdc0f7d90610ed99083906151cb565b6000611024828461541d565b600061102482846153e0565b6000611024828461528e565b3390565b6000806000806000806000806000612c828a60155460165460145461346e565b9250925092506000612c92611a15565b90506000806000612ca58e8787876134e6565b919e509c509a509598509396509194505050505091939550919395565b60006110248284615276565b6001600160a01b038316612cf45760405162461bcd60e51b8152600401610d0990614c12565b6001600160a01b038216612d1a5760405162461bcd60e51b8152600401610d0990614ccc565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612d759085906151cb565b60405180910390a3505050565b6001600160a01b038316612da85760405162461bcd60e51b8152600401610d099061477f565b6001600160a01b038216612dce5760405162461bcd60e51b8152600401610d0990615111565b60008111612dee5760405162461bcd60e51b8152600401610d0990614bb5565b612df6611a00565b6001600160a01b0316836001600160a01b031614158015612e305750612e1a611a00565b6001600160a01b0316826001600160a01b031614155b8015612e3f5750601b5460ff16155b15612ef957601754811115612e665760405162461bcd60e51b8152600401610d0990614e09565b601c546001600160a01b0316612e7a612c5e565b6001600160a01b03161480612ec757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316612ebc612c5e565b6001600160a01b0316145b8015612edc5750601b5462010000900460ff16155b15612ef95760405162461bcd60e51b8152600401610d0990614fe9565b601b5460ff16613026576000612f0e306118d3565b60185490915081108015908190612f305750601c546001600160a01b03163314155b8015612f435750601b54610100900460ff165b15613023577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa157600080fd5b505afa158015612fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd99190614398565b601b5464010000000090046001600160a01b03908116911614156130055761300082613536565b613023565b601b546130239064010000000090046001600160a01b031683613691565b50505b6001600160a01b03831660009081526004602052604090205460ff16801561306757506001600160a01b03821660009081526004602052604090205460ff16155b1561307c576130778383836138f9565b61317a565b6001600160a01b03831660009081526004602052604090205460ff161580156130bd57506001600160a01b03821660009081526004602052604090205460ff165b156130cd57613077838383613b40565b6001600160a01b03831660009081526004602052604090205460ff1615801561310f57506001600160a01b03821660009081526004602052604090205460ff16155b1561311f57613077838383613c6d565b6001600160a01b03831660009081526004602052604090205460ff16801561315f57506001600160a01b03821660009081526004602052604090205460ff165b1561316f57613077838383613cd2565b61317a838383613c6d565b505050565b600081848411156131a35760405162461bcd60e51b8152600401610d0991906145f7565b505050900390565b600a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063095ea7b390613217907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d908690600401614598565b602060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190614473565b506024546040517faf2979eb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263af2979eb926132de92309288926000928392169042906004016145b1565b602060405180830381600087803b1580156132f857600080fd5b505af115801561330c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3191906144a7565b600061333a611a15565b905061336a6133498383612c46565b6006546001600160a01b031660009081526001602052604090205490612cc2565b600680546001600160a01b0390811660009081526001602052604090819020939093559054602454925190821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c99086906151cb565b60405180910390a35050565b60006133df611a15565b905061340f6133ee8383612c46565b600b546001600160a01b031660009081526001602052604090205490612cc2565b600b80546001600160a01b0390811660009081526001602052604090819020939093559054602454925190821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c99086906151cb565b6000808080613496613481866002615276565b61348c90600a6152f4565b6113f48a8a612c46565b905060006134bd6134a8876002615276565b6134b390600a6152f4565b6113f48b8a612c46565b905060006134d5826134cf8c86612c3a565b90612c3a565b9a9299509097509095505050505050565b60008080806134f58886612c46565b905060006135038887612c46565b905060006135118888612c46565b90506000613523826134cf8686612c3a565b939b939a50919850919650505050505050565b601b805460ff19166001179055601a54600090613554908390612c3a565b90506000613563826002612c52565b905060006135718383612c3a565b90504761357d83613d66565b60006135894783612c3a565b90506135958382613f6a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ee57600080fd5b505afa158015613602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136269190614398565b6001600160a01b03167fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f685838660405161366293929190615252565b60405180910390a26136773032601a54612d82565b61367f614060565b5050601b805460ff1916905550505050565b601b805460ff19166001179055601a546000906136af908390612c3a565b905060006136be826002612c52565b905060006136cc8383612c3a565b6025549091506136e79030906001600160a01b031684612d82565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b038716906370a082319061372f90309060040161453b565b60206040518083038186803b15801561374757600080fd5b505afa15801561375b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377f91906144a7565b6025546040517fa114398d0000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063a114398d906137cb9089908790600401614598565b600060405180830381600087803b1580156137e557600080fd5b505af11580156137f9573d6000803e3d6000fd5b50505050600061387f82886001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161382f919061453b565b60206040518083038186803b15801561384757600080fd5b505afa15801561385b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cf91906144a7565b905061388c8784836141ad565b866001600160a01b03167fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f68583866040516138c993929190615252565b60405180910390a26138de3032601a54612d82565b6138e6614060565b5050601b805460ff191690555050505050565b6000613903611a15565b905060008060008060008061391788612c62565b95509550955095509550955060006139388883612c4690919063ffffffff16565b6001600160a01b038c1660009081526002602052604090205490915061395e908a612c3a565b6001600160a01b038c1660009081526002602090815260408083209390935560019052205461398d9088612c3a565b6001600160a01b038c16600090815260016020526040902055601b5460ff1615613a33576001600160a01b038a166000908152600160205260409020546139d49088612cc2565b6001600160a01b03808c1660008181526001602052604090819020939093559151908d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613a26908d906151cb565b60405180910390a3613b33565b6001600160a01b038a16600090815260016020526040902054613a569087612cc2565b6001600160a01b038b16600090815260016020526040808220929092553081522054613a829082612cc2565b30600090815260016020526040902055613a9c8584614358565b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613adf91906151cb565b60405180910390a3896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b2a91906151cb565b60405180910390a35b5050505050505050505050565b6000613b4a611a15565b9050600080600080600080613b5e88612c62565b9550955095509550955095506000613b7f8883612c4690919063ffffffff16565b6001600160a01b038c16600090815260016020526040902054909150613ba59088612c3a565b6001600160a01b038c16600090815260016020526040902055601b5460ff1615613c1b576001600160a01b038a16600090815260026020526040902054613bec908a612cc2565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546139d49088612cc2565b6001600160a01b038a16600090815260026020526040902054613c3e9085612cc2565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054613a569087612cc2565b6000613c77611a15565b9050600080600080600080613c8b88612c62565b9550955095509550955095506000613cac8883612c4690919063ffffffff16565b6001600160a01b038c1660009081526001602052604090205490915061398d9088612c3a565b6000613cdc611a15565b9050600080600080600080613cf088612c62565b9550955095509550955095506000613d118883612c4690919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150613d37908a612c3a565b6001600160a01b038c16600090815260026020908152604080832093909355600190522054613ba59088612c3a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613da957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e2257600080fd5b505afa158015613e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5a9190614398565b81600181518110613e7b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050613ec6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cce565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790613f349085906000908690309042906004016151d4565b600060405180830381600087803b158015613f4e57600080fd5b505af1158015613f62573d6000803e3d6000fd5b505050505050565b613f95307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cce565b6040517ff305d7190000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990839061400790309087906000908190849042906004016145b1565b6060604051808303818588803b15801561402057600080fd5b505af1158015614034573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614059919061450e565b5050505050565b60085460075460009161407f916134cf906001600160a01b03166118d3565b90506019548111156141aa5760006140988260006111e7565b601c546001600160a01b03166000908152600160205260409020549091506140c09082612cc2565b601c546001600160a01b0390811660009081526001602052604080822093909355600754909116815220546140f59082612c3a565b600780546001600160a01b039081166000908152600160205260409081902093909355601c54915492519181169216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906141529086906151cb565b60405180910390a3601c60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f4e57600080fd5b50565b6141d8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cce565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063095ea7b39061423f907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d908590600401614598565b602060405180830381600087803b15801561425957600080fd5b505af115801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614473565b506040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063e8e337009061430690309087908790879060009081908690429060040161454f565b606060405180830381600087803b15801561432057600080fd5b505af1158015614334573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f62919061450e565b600e546143659083612c3a565b600e55600f546143759082612cc2565b600f555050565b60006020828403121561438d578081fd5b8135611024816154be565b6000602082840312156143a9578081fd5b8151611024816154be565b600080604083850312156143c6578081fd5b82356143d1816154be565b915060208301356143e1816154be565b809150509250929050565b600080600060608486031215614400578081fd5b833561440b816154be565b9250602084013561441b816154be565b929592945050506040919091013590565b6000806040838503121561443e578182fd5b8235614449816154be565b946020939093013593505050565b600060208284031215614468578081fd5b8135611024816154d3565b600060208284031215614484578081fd5b8151611024816154d3565b6000602082840312156144a0578081fd5b5035919050565b6000602082840312156144b8578081fd5b5051919050565b600080604083850312156144d1578182fd5b8235915060208301356143e1816154d3565b6000806000606084860312156144f7578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215614522578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101561462357858101830151858201604001528201614607565b818111156146345783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526035908201527f504c41534d413a206175746f5377617043616c6c65724665652073686f756c6460408201527f2062652067726561746572207468616e20316531380000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a205061697220746f6b656e2061646472657373206973207a6560408201527f726f2e0000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f504c41534d413a2066656520646563696d616c732073686f756c64206265206960408201527f6e2030202d203200000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f504c41534d413a207472616e736665722066726f6d20746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526028908201527f504c41534d413a205061697220746f6b656e20616464726573732073656c662060408201527f616464726573732e000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a206c6f636b4665652073686f756c6420626520696e2030202d60408201527f2031300000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526033908201527f504c41534d413a206d61785478416d6f756e742073686f756c6420626520677260408201527f6561746572207468616e20353030303065313800000000000000000000000000606082015260800190565b6020808252603e908201527f504c41534d413a206f6e65206d75636820626520686f6c64696e67207468652060408201527f504c41534d41206f726220746f207965696c64207375636820706f7765720000606082015260800190565b60208082526023908201527f504c41534d413a204163636f756e7420697320616c7265616479206578636c7560408201527f6465640000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f504c41534d413a207461784665652073686f756c6420626520696e2030202d2060408201527f3130000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f504c41534d413a204578636c75646564206164647265737365732063616e6e6f60408201527f742063616c6c20746869732066756e6374696f6e000000000000000000000000606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526032908201527f504c41534d413a205061697220746f6b656e206164647265737320697320736160408201527f6d652061732063757272656e74206f6e652e0000000000000000000000000000606082015260800190565b6020808252602a908201527f504c41534d413a2057652063616e206e6f74206578636c75646520556e69737760408201527f617020726f757465722e00000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f504c41534d413a205472616e7366657220616d6f756e74206d7573742062652060408201527f67726561746572207468616e207a65726f000000000000000000000000000000606082015260800190565b60208082526025908201527f504c41534d413a20617070726f76652066726f6d20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f504c41534d413a204163636573732064656e6965642c206e656564206d6f726560408201527f20504c41534d4120746f20667573696f6e200000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a20617070726f766520746f20746865207a65726f206164647260408201527f6573730000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f504c41534d413a204163636f756e7420697320616c726561647920696e636c7560408201527f6465640000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526043908201527f504c41534d413a206d696e546f6b656e4265666f7265537761702073686f756c60408201527f642062652067726561746572207468616e206175746f5377617043616c6c657260608201527f4665650000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526030908201527f504c41534d413a205472616e7366657220616d6f756e7420657863656564732060408201527f746865206d61785478416d6f756e742e00000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f504c41534d413a206d696e546f6b656e4265666f7265537761702073686f756c60408201527f6420626520696e2031653138202d203235303030653138000000000000000000606082015260800190565b6020808252602e908201527f504c41534d413a206c697175696469747952656d6f76654665652073686f756c60408201527f6420626520696e2031202d203130000000000000000000000000000000000000606082015260800190565b60208082526011908201527f504c41534d413a20546f6f20536f6f6e2e000000000000000000000000000000604082015260600190565b6020808252602a908201527f504c41534d413a2057652063616e206e6f74206578636c75646520726577656160408201527f72642077616c6c65742e00000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f504c41534d413a2074726164696e672069732064697361626c65642e00000000604082015260600190565b60208082526029908201527f504c41534d413a2057652063616e206e6f74206578636c75646520636f6e747260408201527f6163742073656c662e0000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f504c41534d413a20416d6f756e74206d757374206265206c657373207468616e60408201527f20746f74616c207265666c656374696f6e730000000000000000000000000000606082015260800190565b6020808252601d908201527f504c41534d413a20506f6f6c2061646472657373206973207a65726f2e000000604082015260600190565b60208082526024908201527f504c41534d413a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f504c41534d413a20667573696f6e43616c6c65724665652073686f756c64206260408201527f6520696e2031202d203135000000000000000000000000000000000000000000606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156152235784516001600160a01b0316835293830193918301916001016151fe565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60008219821115615289576152896154a8565b500190565b6000826152a957634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116152c057506152eb565b8187048211156152d2576152d26154a8565b808616156152df57918102915b9490941c9380026152b1565b94509492505050565b60006110247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848460008261532b57506001611024565b8161533857506000611024565b816001811461534e576002811461535857615385565b6001915050611024565b60ff841115615369576153696154a8565b6001841b91508482111561537f5761537f6154a8565b50611024565b5060208310610133831016604e8410600b84101617156153b8575081810a838111156153b3576153b36154a8565b611024565b6153c584848460016152ae565b8086048211156153d7576153d76154a8565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615418576154186154a8565b500290565b60008282101561542f5761542f6154a8565b500390565b60028104600182168061544857607f821691505b6020821081141561546957634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154a1576154a16154a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146141aa57600080fd5b80151581146141aa57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a6cf6969e2769b447fc1365c061a82e339a7688b768e9b643debbaa258f9b0864736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000003f870857a3e0e3800000

-----Decoded View---------------
Arg [0] : uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initialMrFusionLockAmount (uint256): 300000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000000000000000000000003f870857a3e0e3800000


Deployed Bytecode Sourcemap

30654:34833:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37882:427;;;;;;;;;;-1:-1:-1;37882:427:0;;;;;:::i;:::-;;:::i;:::-;;35408:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36393:193;;;;;;;;;;-1:-1:-1;36393:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;63521:124::-;;;;;;;;;;-1:-1:-1;63521:124:0;;;;;:::i;:::-;;:::i;31324:20::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35685:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31533:26::-;;;;;;;;;;;;;:::i;60676:294::-;;;;;;;;;;-1:-1:-1;60676:294:0;;;;;:::i;:::-;;:::i;59373:106::-;;;;;;;;;;;;;:::i;36594:446::-;;;;;;;;;;-1:-1:-1;36594:446:0;;;;;:::i;:::-;;:::i;62171:382::-;;;;;;;;;;-1:-1:-1;62171:382:0;;;;;:::i;:::-;;:::i;38804:330::-;;;;;;;;;;-1:-1:-1;38804:330:0;;;;;:::i;:::-;;:::i;35594:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;63873:143::-;;;;;;;;;;-1:-1:-1;63873:143:0;;;;;:::i;:::-;;:::i;31163:41::-;;;;;;;;;;;;;:::i;37048:300::-;;;;;;;;;;-1:-1:-1;37048:300:0;;;;;:::i;:::-;;:::i;31721:22::-;;;;;;;;;;;;;:::i;38317:479::-;;;;;;;;;;-1:-1:-1;38317:479:0;;;;;:::i;:::-;;:::i;60978:576::-;;;;;;;;;;-1:-1:-1;60978:576:0;;;;;:::i;:::-;;:::i;32017:33::-;;;;;;;;;;;;;:::i;32057:26::-;;;;;;;;;;;;;:::i;48308:1528::-;;;;;;;;;;;;;:::i;58053:234::-;;;;;;;;;;-1:-1:-1;58053:234:0;;;;;:::i;:::-;;:::i;30772:52::-;;;;;;;;;;;;;:::i;60111:270::-;;;;;;;;;;-1:-1:-1;60111:270:0;;;;;:::i;:::-;;:::i;62901:218::-;;;;;;;;;;-1:-1:-1;62901:218:0;;;;;:::i;:::-;;:::i;31288:29::-;;;;;;;;;;;;;:::i;59022:117::-;;;;;;;;;;;;;:::i;59487:92::-;;;;;;;;;;;;;:::i;35788:198::-;;;;;;;;;;-1:-1:-1;35788:198:0;;;;;:::i;:::-;;:::i;2748:148::-;;;;;;;;;;;;;:::i;31094:31::-;;;;;;;;;;;;;:::i;31780:39::-;;;;;;;;;;;;;:::i;31826:45::-;;;;;;;;;;;;;:::i;31251:30::-;;;;;;;;;;;;;:::i;2097:87::-;;;;;;;;;;;;;:::i;31211:33::-;;;;;;;;;;;;;:::i;57882:163::-;;;;;;;;;;;;;:::i;35499:87::-;;;;;;;;;;;;;:::i;31683:31::-;;;;;;;;;;;;;:::i;58295:604::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;59263:102::-;;;;;;;;;;;;;:::i;63653:212::-;;;;;;;;;;-1:-1:-1;63653:212:0;;;;;:::i;:::-;;:::i;31750:23::-;;;;;;;;;;;;;:::i;64243:174::-;;;;;;;;;;-1:-1:-1;64243:174:0;;;;;:::i;:::-;;:::i;65198:114::-;;;;;;;;;;;;;:::i;37356:400::-;;;;;;;;;;-1:-1:-1;37356:400:0;;;;;:::i;:::-;;:::i;59695:105::-;;;;;;;;;;;;;:::i;35994:199::-;;;;;;;;;;-1:-1:-1;35994:199:0;;;;;:::i;:::-;;:::i;34117:22::-;;;;;;;;;;;;;:::i;31132:24::-;;;;;;;;;;;;;:::i;65320:164::-;;;;;;;;;;-1:-1:-1;65320:164:0;;;;;:::i;:::-;;:::i;32090:33::-;;;;;;;;;;;;;:::i;59587:100::-;;;;;;;;;;;;;:::i;31878:44::-;;;;;;;;;;;;;:::i;64024:211::-;;;;;;;;;;-1:-1:-1;64024:211:0;;;;;:::i;:::-;;:::i;47440:860::-;;;;;;;;;;;;;:::i;58907:107::-;;;;;;;;;;;;;:::i;37764:110::-;;;;;;;;;;-1:-1:-1;37764:110:0;;;;;:::i;:::-;;:::i;60389:279::-;;;;;;;;;;-1:-1:-1;60389:279:0;;;;;:::i;:::-;;:::i;63312:201::-;;;;;;;;;;-1:-1:-1;63312:201:0;;;;;:::i;:::-;;:::i;64425:765::-;;;;;;;;;;-1:-1:-1;64425:765:0;;;;;:::i;:::-;;:::i;61927:236::-;;;;;;;;;;-1:-1:-1;61927:236:0;;;;;:::i;:::-;;:::i;36201:184::-;;;;;;;;;;-1:-1:-1;36201:184:0;;;;;:::i;:::-;;:::i;34146:30::-;;;;;;;;;;;;;:::i;59147:108::-;;;;;;;;;;;;;:::i;61562:357::-;;;;;;;;;;-1:-1:-1;61562:357:0;;;;;:::i;:::-;;:::i;39142:748::-;;;;;;;;;;-1:-1:-1;39142:748:0;;;;;:::i;:::-;;:::i;3051:244::-;;;;;;;;;;-1:-1:-1;3051:244:0;;;;;:::i;:::-;;:::i;62561:332::-;;;;;;;;;;-1:-1:-1;62561:332:0;;;;;:::i;:::-;;:::i;59808:295::-;;;;;;;;;;-1:-1:-1;59808:295:0;;;;;:::i;:::-;;:::i;39898:486::-;;;;;;;;;;-1:-1:-1;39898:486:0;;;;;:::i;:::-;;:::i;31501:25::-;;;;;;;;;;;;;:::i;63127:177::-;;;;;;;;;;-1:-1:-1;63127:177:0;;;;;:::i;:::-;;:::i;37882:427::-;37934:14;37951:12;:10;:12::i;:::-;-1:-1:-1;;;;;37997:19:0;;;;;;:11;:19;;;;;;37934:29;;-1:-1:-1;37997:19:0;;37996:20;37974:122;;;;-1:-1:-1;;;37974:122:0;;;;;;;:::i;:::-;;;;;;;;;38108:15;38137:19;38148:7;38137:10;:19::i;:::-;-1:-1:-1;;;;;;;;;38185:15:0;;;;;;:7;:15;;;;;;38107:49;;-1:-1:-1;38185:28:0;;:15;-1:-1:-1;38107:49:0;38185:19;:28::i;:::-;-1:-1:-1;;;;;38167:15:0;;;;;;:7;:15;;;;;:46;38234:7;;:20;;38246:7;38234:11;:20::i;:::-;38224:7;:30;38278:10;;:23;;38293:7;38278:14;:23::i;:::-;38265:10;:36;-1:-1:-1;;;37882:427:0:o;35408:83::-;35445:13;35478:5;35471:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35408:83;:::o;36393:193::-;36495:4;36517:39;36526:12;:10;:12::i;:::-;36540:7;36549:6;36517:8;:39::i;:::-;-1:-1:-1;36574:4:0;36393:193;;;;;:::o;63521:124::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63592:5:::1;:12:::0;;;::::1;-1:-1:-1::0;;;;;63592:12:0;::::1;;::::0;;63620:17:::1;::::0;::::1;::::0;::::1;::::0;63592:12;;63620:17:::1;:::i;:::-;;;;;;;;63521:124:::0;:::o;31324:20::-;;;-1:-1:-1;;;;;31324:20:0;;:::o;35685:95::-;35765:7;;35685:95;:::o;31533:26::-;;;;:::o;60676:294::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;60791:8:::1;60776:11;:23;;60754:124;;;;-1:-1:-1::0;;;60754:124:0::1;;;;;;;:::i;:::-;60889:12;:26:::0;;;60931:31:::1;::::0;::::1;::::0;::::1;::::0;60904:11;;60931:31:::1;:::i;59373:106::-:0;59453:18;;59373:106;:::o;36594:446::-;36726:4;36743:36;36753:6;36761:9;36772:6;36743:9;:36::i;:::-;36790:220;36813:6;36834:12;:10;:12::i;:::-;36861:138;36917:6;36861:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36861:19:0;;;;;;:11;:19;;;;;;36881:12;:10;:12::i;:::-;-1:-1:-1;;;;;36861:33:0;;;;;;;;;;;;-1:-1:-1;36861:33:0;;;:138;:37;:138::i;:::-;36790:8;:220::i;:::-;-1:-1:-1;37028:4:0;36594:446;;;;;;:::o;62171:382::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;62330:1:::1;62308:18;:23;;:51;;;;;62357:2;62335:18;:24;;62308:51;62286:147;;;;-1:-1:-1::0;;;62286:147:0::1;;;;;;;:::i;:::-;62444:19;:40:::0;;;62500:45:::1;::::0;::::1;::::0;::::1;::::0;62466:18;;62500:45:::1;:::i;38804:330::-:0;38898:7;38956;;38945;:18;;38923:118;;;;-1:-1:-1;;;38923:118:0;;;;;;;:::i;:::-;39052:19;39074:10;:8;:10::i;:::-;39052:32;-1:-1:-1;39102:24:0;:7;39052:32;39102:11;:24::i;:::-;39095:31;;;38804:330;;;;:::o;35594:83::-;35660:9;;;;35594:83;:::o;63873:143::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63945:9:::1;:20:::0;;;63983:25:::1;::::0;::::1;::::0;::::1;::::0;63957:8;;63983:25:::1;:::i;31163:41::-:0;;;;:::o;37048:300::-;37163:4;37185:133;37208:12;:10;:12::i;:::-;37235:7;37257:50;37296:10;37257:11;:25;37269:12;:10;:12::i;:::-;-1:-1:-1;;;;;37257:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37257:25:0;;;:34;;;;;;;;;;;:38;:50::i;31721:22::-;;;;:::o;38317:479::-;38435:7;38479;;38468;:18;;38460:62;;;;-1:-1:-1;;;38460:62:0;;;;;;;:::i;:::-;38538:17;38533:256;;38573:15;38602:19;38613:7;38602:10;:19::i;:::-;-1:-1:-1;38572:49:0;;-1:-1:-1;38636:14:0;;-1:-1:-1;;;;;38636:14:0;38533:256;38686:23;38721:19;38732:7;38721:10;:19::i;:::-;-1:-1:-1;38683:57:0;;-1:-1:-1;38755:22:0;;-1:-1:-1;;;;;38755:22:0;60978:576;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;61140:4:::1;61117:19;:27;;:62;;;;;61171:8;61148:19;:31;;61117:62;61095:167;;;;-1:-1:-1::0;;;61095:167:0::1;;;;;;;:::i;:::-;61317:18;;61295:19;:40;61273:157;;;;-1:-1:-1::0;;;61273:157:0::1;;;;;;;:::i;:::-;61441:20;:42:::0;;;61499:47:::1;::::0;::::1;::::0;::::1;::::0;61464:19;;61499:47:::1;:::i;32017:33::-:0;;;;;;;;;:::o;32057:26::-;;;;;;;;;:::o;48308:1528::-;34033:16;:23;;-1:-1:-1;;34033:23:0;34052:4;34033:23;;;48377:15:::1;48363:11;:29:::0;48532:19:::1;::::0;48450:15:::1;::::0;48443:66:::1;::::0;;;;34033:16;;48443:136:::1;::::0;48575:3:::1;::::0;48443:109:::1;::::0;48532:19;-1:-1:-1;;;;;48450:15:0::1;::::0;48443:51:::1;::::0;:66:::1;::::0;48503:4:::1;::::0;48443:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88:::0;::::1;:109::i;:::-;:131:::0;::::1;:136::i;:::-;48405:174;;48592:34;48611:14;48592:18;:34::i;:::-;;48639:7;;;;;;;;;-1:-1:-1::0;;;;;48639:7:0::1;-1:-1:-1::0;;;;;48639:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;48716:7:0::1;::::0;48671:24:::1;::::0;48698:27:::1;::::0;-1:-1:-1;;;;;48716:7:0::1;48698:9;:27::i;:::-;48671:54;;48736:24;48776:47;48819:3;48776:38;48797:16;;48776;:20;;:38;;;;:::i;:47::-;48736:87:::0;-1:-1:-1;48834:18:0::1;48855:38;:16:::0;48736:87;48855:20:::1;:38::i;:::-;48834:59;;48906:18;48927:34;48957:3;48927:25;48942:9;;48927:10;:14;;:25;;;;:::i;:34::-;48906:55;;48974:23;48986:10;48974:11;:23::i;:::-;49010:16;49029:26;:10:::0;49044;49029:14:::1;:26::i;:::-;49010:45;;49068:12;49083:40;49119:3;49083:31;49096:17;;49083:8;:12;;:31;;;;:::i;:40::-;49068:55;;49136:13;49144:4;49136:7;:13::i;:::-;49162;49178:18;:8:::0;49191:4;49178:12:::1;:18::i;:::-;49162:34;;49207:19;49229:10;:8;:10::i;:::-;49207:32:::0;-1:-1:-1;49250:13:0::1;49266:22;:5:::0;49207:32;49266:9:::1;:22::i;:::-;49250:38:::0;-1:-1:-1;49325:84:0::1;49365:33;:16:::0;49386:11;49365:20:::1;:33::i;:::-;49325:7;:21;49333:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;49325:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;49325:21:0;;;:25:::1;:84::i;:::-;49301:7;:21;49309:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;49301:21:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;49301:21:0;;;:108;;;;49438:7:::1;::::0;::::1;49422:25:::0;;:7:::1;:25:::0;;;;;:29;49478:11:::1;::::0;:22:::1;::::0;49494:5;49478:15:::1;:22::i;:::-;49464:11;:36:::0;49521:7:::1;::::0;:18:::1;::::0;49533:5;49521:11:::1;:18::i;:::-;49511:7;:28:::0;49560:7:::1;::::0;:18:::1;::::0;49572:5;49560:11:::1;:18::i;:::-;49550:7;:28:::0;49631:16:::1;::::0;49613:7:::1;::::0;49596:65:::1;::::0;-1:-1:-1;;;;;49631:16:0;;::::1;::::0;49613:7;;::::1;::::0;49596:65:::1;::::0;::::1;::::0;49650:10;;49596:65:::1;:::i;:::-;;;;;;;;49704:12;:10;:12::i;:::-;49694:7;::::0;49677:58:::1;::::0;-1:-1:-1;;;;;49677:58:0;;::::1;::::0;49694:7;;::::1;::::0;49677:58:::1;::::0;::::1;::::0;49718:16;;49677:58:::1;:::i;:::-;;;;;;;;49768:7;::::0;49751:45:::1;::::0;49786:1:::1;::::0;-1:-1:-1;;;;;49768:7:0::1;::::0;49751:45:::1;::::0;::::1;::::0;49790:5;;49751:45:::1;:::i;:::-;;;;;;;;49812:16;49822:5;49812:16;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;34079:16:0;:24;;-1:-1:-1;;34079:24:0;;;-1:-1:-1;;;;;;;;48308:1528:0:o;58053:234::-;58186:14;58222:57;58256:21;58264:8;58276:1;58256:21;:::i;:::-;58251:27;;:2;:27;:::i;:::-;58222:24;:7;58234:11;58222;:24::i;:57::-;58213:66;58053:234;-1:-1:-1;;;;58053:234:0:o;30772:52::-;;;:::o;60111:270::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;60235:12:::1;::::0;60231:16:::1;::::0;:2:::1;:16;:::i;:::-;60226:21;::::0;:2:::1;:21;:::i;:::-;60216:6;:31;;60179:130;;;;-1:-1:-1::0;;;60179:130:0::1;;;;;;;:::i;:::-;60320:7;:16:::0;;;60352:21:::1;::::0;::::1;::::0;::::1;::::0;60330:6;;60352:21:::1;:::i;62901:218::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63014:18:::1;:38:::0;;;63068:43:::1;::::0;::::1;::::0;::::1;::::0;63035:17;;63068:43:::1;:::i;31288:29::-:0;;;-1:-1:-1;;;;;31288:29:0;;:::o;59022:117::-;59108:23;;;;;-1:-1:-1;;;;;59108:23:0;;59022:117::o;59487:92::-;59560:11;;59487:92;:::o;35788:198::-;-1:-1:-1;;;;;35878:20:0;;35854:7;35878:20;;;:11;:20;;;;;;;;35874:49;;;-1:-1:-1;;;;;;35907:16:0;;;;;;:7;:16;;;;;;35900:23;;35874:49;-1:-1:-1;;;;;35961:16:0;;;;;;:7;:16;;;;;;35941:37;;:19;:37::i;2748:148::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;2855:1:::1;2839:6:::0;;2818:40:::1;::::0;-1:-1:-1;;;;;2839:6:0;;::::1;::::0;2818:40:::1;::::0;2855:1;;2818:40:::1;2886:1;2869:19:::0;;;::::1;::::0;;2748:148::o;31094:31::-;;;-1:-1:-1;;;;;31094:31:0;;:::o;31780:39::-;;;;:::o;31826:45::-;;;;:::o;31251:30::-;;;-1:-1:-1;;;;;31251:30:0;;:::o;2097:87::-;2143:7;2170:6;-1:-1:-1;;;;;2170:6:0;2097:87;:::o;31211:33::-;;;;:::o;57882:163::-;57923:7;57944:15;57961;57980:19;:17;:19::i;:::-;57943:56;;-1:-1:-1;57943:56:0;-1:-1:-1;58017:20:0;57943:56;;58017:11;:20::i;:::-;58010:27;;;;57882:163;:::o;35499:87::-;35538:13;35571:7;35564:14;;;;;:::i;31683:31::-;;;;:::o;58295:604::-;58392:7;;58428;;58345;;;;;58446:338;58470:9;:16;58466:20;;58446:338;;;58554:7;58530;:21;58538:9;58548:1;58538:12;;;;;;-1:-1:-1;;;58538:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58538:12:0;58530:21;;;;;;;;;;;;;:31;;:83;;;58606:7;58582;:21;58590:9;58600:1;58590:12;;;;;;-1:-1:-1;;;58590:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58590:12:0;58582:21;;;;;;;;;;;;;:31;58530:83;58508:146;;;58637:7;;58646;;58629:25;;;;;;;;;58508:146;58679:34;58691:7;:21;58699:9;58709:1;58699:12;;;;;;-1:-1:-1;;;58699:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58699:12:0;58691:21;;;;;;;;;;;;;58679:7;;:11;:34::i;:::-;58669:44;;58738:34;58750:7;:21;58758:9;58768:1;58758:12;;;;;;-1:-1:-1;;;58758:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58758:12:0;58750:21;;;;;;;;;;;;;58738:7;;:11;:34::i;:::-;58728:44;-1:-1:-1;58488:3:0;;;;:::i;:::-;;;;58446:338;;;-1:-1:-1;58820:7:0;;58808;;:20;;:11;:20::i;:::-;58798:7;:30;58794:61;;;58838:7;;58847;;58830:25;;;;;;;;58794:61;58874:7;;-1:-1:-1;58883:7:0;-1:-1:-1;58295:604:0;;;:::o;59263:102::-;59341:16;;59263:102;:::o;63653:212::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63764:17:::1;:36:::0;;;63816:41:::1;::::0;::::1;::::0;::::1;::::0;63784:16;;63816:41:::1;:::i;31750:23::-:0;;;;:::o;64243:174::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;64323:21:::1;:32:::0;;;::::1;;::::0;::::1;;;;::::0;;64371:38:::1;::::0;::::1;::::0;::::1;::::0;64323:32;;64371:38:::1;:::i;65198:114::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;65256:14:::1;:21:::0;;;::::1;::::0;::::1;::::0;;65288:16:::1;::::0;::::1;::::0;65256:21;;65288:16:::1;65198:114::o:0;37356:400::-;37476:4;37498:228;37521:12;:10;:12::i;:::-;37548:7;37570:145;37627:15;37570:145;;;;;;;;;;;;;;;;;:11;:25;37582:12;:10;:12::i;:::-;-1:-1:-1;;;;;37570:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37570:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;59695:105::-;59778:14;;-1:-1:-1;;;;;59778:14:0;59695:105;:::o;35994:199::-;36099:4;36121:42;36131:12;:10;:12::i;:::-;36145:9;36156:6;36121:9;:42::i;34117:22::-;;;-1:-1:-1;;;;;34117:22:0;;:::o;31132:24::-;;;-1:-1:-1;;;;;31132:24:0;;:::o;65320:164::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;65394:21:::1;:28:::0;;;::::1;::::0;::::1;::::0;;65438:38:::1;::::0;::::1;::::0;::::1;::::0;65467:8;;65438:38:::1;:::i;32090:33::-:0;;;;;;;;;:::o;59587:100::-;59664:15;;59587:100;:::o;31878:44::-;;;;:::o;64024:211::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;64135:16:::1;:34:::0;;;::::1;-1:-1:-1::0;;;;;64135:34:0;::::1;;::::0;;64187:40:::1;::::0;::::1;::::0;::::1;::::0;64135:34;;64187:40:::1;:::i;47440:860::-:0;34033:16;:23;;-1:-1:-1;;34033:23:0;34052:4;34033:23;;;;;;;47492:21;;;::::1;34033:23:::0;47492:21:::1;:29;;;47488:805;;;47573:5;::::0;47564:40:::1;::::0;;;;47608:1:::1;::::0;-1:-1:-1;;;;;47573:5:0::1;::::0;47564:25:::1;::::0;:40:::1;::::0;47590:10:::1;::::0;47602:1:::1;::::0;47564:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;47538:169;;;;-1:-1:-1::0;;;47538:169:0::1;;;;;;;:::i;:::-;47782:15;;47768:11;;:29;;;;:::i;:::-;47750:15;:47;47724:126;;;;-1:-1:-1::0;;;47724:126:0::1;;;;;;;:::i;:::-;47867:15;:13;:15::i;:::-;47488:805;;;47904:21;::::0;;;::::1;;;47900:393;;48004:18;;47977:23;47987:12;:10;:12::i;47977:23::-;:45;;47951:157;;;;-1:-1:-1::0;;;47951:157:0::1;;;;;;;:::i;:::-;48181:15;;48167:11;;:29;;;;:::i;:::-;48149:15;:47;48123:126;;;;-1:-1:-1::0;;;48123:126:0::1;;;;;;;:::i;:::-;48266:15;:13;:15::i;:::-;34079:16:::0;:24;;-1:-1:-1;;34079:24:0;;;47440:860::o;58907:107::-;58988:18;;-1:-1:-1;;;;;58988:18:0;58907:107;:::o;37764:110::-;-1:-1:-1;;;;;37846:20:0;37822:4;37846:20;;;:11;:20;;;;;;;;;37764:110::o;60389:279::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;60517:12:::1;::::0;60513:16:::1;::::0;:2:::1;:16;:::i;:::-;60508:21;::::0;:2:::1;:21;:::i;:::-;60497:7;:32;;60459:133;;;;-1:-1:-1::0;;;60459:133:0::1;;;;;;;:::i;:::-;60603:8;:18:::0;;;60637:23:::1;::::0;::::1;::::0;::::1;::::0;60614:7;;60637:23:::1;:::i;63312:201::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63424:14:::1;:30:::0;;;::::1;-1:-1:-1::0;;;;;63424:30:0;::::1;;::::0;;63470:35:::1;::::0;::::1;::::0;::::1;::::0;63424:30;;63470:35:::1;:::i;64425:765::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;64559:25:0;::::1;64551:67;;;;-1:-1:-1::0;;;64551:67:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64651:30:0;::::1;64629:115;;;;-1:-1:-1::0;;;64629:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64777:33:0;::::1;64805:4;64777:33;;64755:123;;;;-1:-1:-1::0;;;64755:123:0::1;;;;;;;:::i;:::-;64931:23;::::0;-1:-1:-1;;;;;64911:43:0;;::::1;64931:23:::0;;;::::1;;64911:43;;64889:143;;;;-1:-1:-1::0;;;64889:143:0::1;;;;;;;:::i;:::-;65045:18;:32:::0;;;::::1;-1:-1:-1::0;;;;;65045:32:0;;::::1;::::0;;;::::1;::::0;;;65088:23:::1;:42:::0;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;65148:34:::1;::::0;::::1;::::0;-1:-1:-1;;65148:34:0::1;64425:765:::0;;:::o;61927:236::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;62046:21:::1;:44:::0;;;62106:49:::1;::::0;::::1;::::0;::::1;::::0;62070:20;;62106:49:::1;:::i;36201:184::-:0;-1:-1:-1;;;;;36350:18:0;;;36318:7;36350:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36201:184::o;34146:30::-;;;-1:-1:-1;;;;;34146:30:0;;:::o;59147:108::-;59228:19;;59147:108;:::o;61562:357::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;61718:4:::1;61697:17;:25;;61675:128;;;;-1:-1:-1::0;;;61675:128:0::1;;;;;;;:::i;:::-;61814:18;:38:::0;;;61868:43:::1;::::0;::::1;::::0;::::1;::::0;61835:17;;61868:43:::1;:::i;39142:748::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;39248:42:::1;-1:-1:-1::0;;;;;39237:53:0;::::1;;;39215:145;;;;-1:-1:-1::0;;;39215:145:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39393:24:0;::::1;39412:4;39393:24;;39371:115;;;;-1:-1:-1::0;;;39371:115:0::1;;;;;;;:::i;:::-;39530:9;::::0;-1:-1:-1;;;;;39519:20:0;;::::1;39530:9:::0;::::1;39519:20;;39497:112;;;;-1:-1:-1::0;;;39497:112:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39629:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;39628:21;39620:69;;;;-1:-1:-1::0;;;39620:69:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39706:16:0;::::1;39725:1;39706:16:::0;;;:7:::1;:16;::::0;;;;;:20;39702:109:::1;;-1:-1:-1::0;;;;;39782:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;39762:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;39743:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;39702:109:::1;-1:-1:-1::0;;;;;39821:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;39821:27:0::1;39844:4;39821:27:::0;;::::1;::::0;;;39859:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;39142:748::o;3051:244::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3140:22:0;::::1;3132:73;;;;-1:-1:-1::0;;;3132:73:0::1;;;;;;;:::i;:::-;3242:6;::::0;;3221:38:::1;::::0;-1:-1:-1;;;;;3221:38:0;;::::1;::::0;3242:6;::::1;::::0;3221:38:::1;::::0;::::1;3270:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;3270:17:0;;;::::1;::::0;;;::::1;::::0;;3051:244::o;62561:332::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;62688:1:::1;62669:15;:20;;:45;;;;;62712:2;62693:15;:21;;62669:45;62647:138;;;;-1:-1:-1::0;;;62647:138:0::1;;;;;;;:::i;:::-;62796:16;:34:::0;;;62846:39:::1;::::0;::::1;::::0;::::1;::::0;62815:15;;62846:39:::1;:::i;59808:295::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;59943:1:::1;59928:11;:16;;59886:125;;;;-1:-1:-1::0;;;59886:125:0::1;;;;;;;:::i;:::-;60022:12;:26:::0;;;60064:31:::1;::::0;::::1;::::0;::::1;::::0;60037:11;;60064:31:::1;:::i;39898:486::-:0;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39979:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;39971:68;;;;-1:-1:-1::0;;;39971:68:0::1;;;;;;;:::i;:::-;40055:9;40050:327;40074:9;:16:::0;40070:20;::::1;40050:327;;;40132:7;-1:-1:-1::0;;;;;40116:23:0::1;:9;40126:1;40116:12;;;;;;-1:-1:-1::0;;;40116:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40116:12:0::1;:23;40112:254;;;40175:9;40185:16:::0;;:20:::1;::::0;40204:1:::1;::::0;40185:20:::1;:::i;:::-;40175:31;;;;;;-1:-1:-1::0;;;40175:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;40160:9:::1;:12:::0;;-1:-1:-1;;;;;40175:31:0;;::::1;::::0;40170:1;;40160:12;::::1;;;-1:-1:-1::0;;;40160:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;40160:46:0;;::::1;;::::0;;40225:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;40264:11:::1;:20:::0;;;;:28;;-1:-1:-1;;40264:28:0::1;::::0;;40311:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;40311:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;40345:5:::1;;40112:254;40092:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40050:327;;;;39898:486:::0;:::o;31501:25::-;;;;:::o;63127:177::-;2328:12;:10;:12::i;:::-;-1:-1:-1;;;;;2317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2317:23:0;;2309:68;;;;-1:-1:-1;;;2309:68:0;;;;;;;:::i;:::-;63211:15:::1;:32:::0;;;63259:37:::1;::::0;::::1;::::0;::::1;::::0;63229:14;;63259:37:::1;:::i;14500:98::-:0;14558:7;14585:5;14589:1;14585;:5;:::i;14857:98::-;14915:7;14942:5;14946:1;14942;:5;:::i;15256:98::-;15314:7;15341:5;15345:1;15341;:5;:::i;655:98::-;735:10;655:98;:::o;56154:628::-;56254:7;56276;56298;56320;56342;56364;56400:23;56425:12;56439:13;56469:53;56481:7;56490;;56499:8;;56509:12;;56469:11;:53::i;:::-;56399:123;;;;;;56533:19;56555:10;:8;:10::i;:::-;56533:32;;56577:15;56594:23;56619:12;56648:46;56660:7;56669:4;56675:5;56682:11;56648;:46::i;:::-;56576:118;;-1:-1:-1;56576:118:0;-1:-1:-1;56576:118:0;-1:-1:-1;56745:15:0;;-1:-1:-1;56762:4:0;;-1:-1:-1;56768:5:0;;-1:-1:-1;;;;;56154:628:0;;;;;;;:::o;14119:98::-;14177:7;14204:5;14208:1;14204;:5;:::i;40392:373::-;-1:-1:-1;;;;;40519:19:0;;40511:69;;;;-1:-1:-1;;;40511:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40599:21:0;;40591:69;;;;-1:-1:-1;;;40591:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40673:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;40725:32;;;;;40703:6;;40725:32;:::i;:::-;;;;;;;;40392:373;;;:::o;40773:2255::-;-1:-1:-1;;;;;40904:20:0;;40896:71;;;;-1:-1:-1;;;40896:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41000:23:0;;40978:109;;;;-1:-1:-1;;;40978:109:0;;;;;;;:::i;:::-;41129:1;41120:6;:10;41098:109;;;;-1:-1:-1;;;41098:109:0;;;;;;;:::i;:::-;41234:7;:5;:7::i;:::-;-1:-1:-1;;;;;41224:17:0;:6;-1:-1:-1;;;;;41224:17:0;;;:41;;;;;41258:7;:5;:7::i;:::-;-1:-1:-1;;;;;41245:20:0;:9;-1:-1:-1;;;;;41245:20:0;;;41224:41;:62;;;;-1:-1:-1;41270:16:0;;;;41269:17;41224:62;41220:464;;;41339:12;;41329:6;:22;;41303:132;;;;-1:-1:-1;;;41303:132:0;;;;;;;:::i;:::-;41489:18;;-1:-1:-1;;;;;41489:18:0;41473:12;:10;:12::i;:::-;-1:-1:-1;;;;;41473:34:0;;:100;;;;41556:16;-1:-1:-1;;;;;41532:41:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;41532:41:0;;41473:100;41472:138;;;;-1:-1:-1;41596:14:0;;;;;;;41595:15;41472:138;41450:222;;;41626:46;;-1:-1:-1;;;41626:46:0;;;;;;;:::i;:::-;41701:16;;;;41696:716;;41734:28;41765:24;41783:4;41765:9;:24::i;:::-;41872:20;;41734:55;;-1:-1:-1;41848:44:0;;;;;;;41929:72;;-1:-1:-1;41983:18:0;;-1:-1:-1;;;;;41983:18:0;41969:10;:32;;41929:72;:114;;;;-1:-1:-1;42022:21:0;;;;;;;41929:114;41907:494;;;42109:16;-1:-1:-1;;;;;42109:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42082;;;;;-1:-1:-1;;;;;42082:23:0;;;:50;;;42078:307;;;42155:42;42176:20;42155;:42::i;:::-;42078:307;;;42292:23;;42242:143;;42292:23;;;-1:-1:-1;;;;;42292:23:0;42342:20;42242:23;:143::i;:::-;41696:716;;;-1:-1:-1;;;;;42428:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42452:22:0;;;;;;:11;:22;;;;;;;;42451:23;42428:46;42424:597;;;42491:48;42513:6;42521:9;42532:6;42491:21;:48::i;:::-;42424:597;;;-1:-1:-1;;;;;42562:19:0;;;;;;:11;:19;;;;;;;;42561:20;:46;;;;-1:-1:-1;;;;;;42585:22:0;;;;;;:11;:22;;;;;;;;42561:46;42557:464;;;42624:46;42644:6;42652:9;42663:6;42624:19;:46::i;42557:464::-;-1:-1:-1;;;;;42693:19:0;;;;;;:11;:19;;;;;;;;42692:20;:47;;;;-1:-1:-1;;;;;;42717:22:0;;;;;;:11;:22;;;;;;;;42716:23;42692:47;42688:333;;;42756:44;42774:6;42782:9;42793:6;42756:17;:44::i;42688:333::-;-1:-1:-1;;;;;42822:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42845:22:0;;;;;;:11;:22;;;;;;;;42822:45;42818:203;;;42884:48;42906:6;42914:9;42925:6;42884:21;:48::i;42818:203::-;42965:44;42983:6;42991:9;43002:6;42965:17;:44::i;:::-;40773:2255;;;:::o;16398:206::-;16484:7;16545:12;16537:6;;;;16529:29;;;;-1:-1:-1;;;16529:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;16580:5:0;;;16398:206::o;50426:450::-;50549:15;;50542:68;;;;;50507:17;;-1:-1:-1;;;;;50549:15:0;;50542:31;;:68;;50582:16;;50601:8;;50542:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50819:7:0;;50635:233;;;;;-1:-1:-1;;;;;50635:16:0;:78;;;;;:233;;50736:4;;50756:8;;50779:1;;;;50819:7;;50842:15;;50635:233;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;50121:297::-;50181:19;50203:10;:8;:10::i;:::-;50181:32;-1:-1:-1;50254:82:0;50298:27;:10;50181:32;50298:14;:27::i;:::-;50262:16;;-1:-1:-1;;;;;50262:16:0;50254:25;;;;:7;:25;;;;;;;:29;:82::i;:::-;50234:16;;;-1:-1:-1;;;;;50234:16:0;;;50226:25;;;;:7;:25;;;;;;;:110;;;;50381:16;;50371:7;;50354:56;;50381:16;;;;50371:7;;;;50354:56;;;;50399:10;;50354:56;:::i;:::-;;;;;;;;50121:297;;:::o;49844:269::-;49894:19;49916:10;:8;:10::i;:::-;49894:32;-1:-1:-1;49965:74:0;50007:21;:4;49894:32;50007:8;:21::i;:::-;49973:14;;-1:-1:-1;;;;;49973:14:0;49965:23;;;;:7;:23;;;;;;;:27;:74::i;:::-;49947:14;;;-1:-1:-1;;;;;49947:14:0;;;49939:23;;;;:7;:23;;;;;;;:100;;;;50084:14;;50074:7;;50057:48;;50084:14;;;;50074:7;;;;50057:48;;;;50100:4;;50057:48;:::i;56790:542::-;56988:7;;;;57082:46;57111:15;:11;57125:1;57111:15;:::i;:::-;57106:21;;:2;:21;:::i;:::-;57082:19;:7;57094:6;57082:11;:19::i;:46::-;57067:61;-1:-1:-1;57139:16:0;57158:47;57188:15;:11;57202:1;57188:15;:::i;:::-;57183:21;;:2;:21;:::i;:::-;57158:20;:7;57170;57158:11;:20::i;:47::-;57139:66;-1:-1:-1;57216:23:0;57242:31;57139:66;57242:17;:7;57254:4;57242:11;:17::i;:::-;:21;;:31::i;:::-;57216:57;57309:4;;-1:-1:-1;57315:8:0;;-1:-1:-1;56790:542:0;;-1:-1:-1;;;;;;56790:542:0:o;57340:534::-;57534:7;;;;57631:24;:7;57643:11;57631;:24::i;:::-;57613:42;-1:-1:-1;57666:12:0;57681:21;:4;57690:11;57681:8;:21::i;:::-;57666:36;-1:-1:-1;57713:13:0;57729:22;:5;57739:11;57729:9;:22::i;:::-;57713:38;-1:-1:-1;57762:23:0;57788:28;57713:38;57788:17;:7;57800:4;57788:11;:17::i;:28::-;57835:7;;;;-1:-1:-1;57861:4:0;;-1:-1:-1;57340:534:0;;-1:-1:-1;;;;;;;57340:534:0:o;43073:1224::-;34033:16;:23;;-1:-1:-1;;34033:23:0;34052:4;34033:23;;;43308:18:::1;::::0;34033:16;;43283:44:::1;::::0;:20;;:24:::1;:44::i;:::-;43259:68:::0;-1:-1:-1;43338:12:0::1;43353:20;43259:68:::0;43371:1:::1;43353:17;:20::i;:::-;43338:35:::0;-1:-1:-1;43384:17:0::1;43404:23;:13:::0;43338:35;43404:17:::1;:23::i;:::-;43384:43:::0;-1:-1:-1;43730:21:0::1;43796:22;43813:4:::0;43796:16:::1;:22::i;:::-;43879:18;43900:41;:21;43926:14:::0;43900:25:::1;:41::i;:::-;43879:62;;43991:41;44010:9;44021:10;43991:18;:41::i;:::-;44079:16;-1:-1:-1::0;;;;;44079:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44050:131:0::1;;44117:4;44136:10;44161:9;44050:131;;;;;;;;:::i;:::-;;;;;;;;44194:55;44212:4;44219:9;44230:18;;44194:9;:55::i;:::-;44262:27;:25;:27::i;:::-;-1:-1:-1::0;;34079:16:0;:24;;-1:-1:-1;;34079:24:0;;;-1:-1:-1;;;;43073:1224:0:o;45454:1210::-;34033:16;:23;;-1:-1:-1;;34033:23:0;34052:4;34033:23;;;45720:18:::1;::::0;34033:16;;45695:44:::1;::::0;:20;;:24:::1;:44::i;:::-;45671:68:::0;-1:-1:-1;45750:12:0::1;45765:20;45671:68:::0;45783:1:::1;45765:17;:20::i;:::-;45750:35:::0;-1:-1:-1;45796:17:0::1;45816:23;:13:::0;45750:35;45816:17:::1;:23::i;:::-;45885:11;::::0;45796:43;;-1:-1:-1;45852:52:0::1;::::0;45870:4:::1;::::0;-1:-1:-1;;;;;45885:11:0::1;45899:4:::0;45852:9:::1;:52::i;:::-;45964:49;::::0;;;;45917:31:::1;::::0;-1:-1:-1;;;;;45964:34:0;::::1;::::0;::::1;::::0;:49:::1;::::0;46007:4:::1;::::0;45964:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46064:11;::::0;:46:::1;::::0;;;;45917:96;;-1:-1:-1;;;;;;46064:11:0::1;::::0;:22:::1;::::0;:46:::1;::::0;46087:16;;46105:4;;46064:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46123:27;46166:110;46238:23;46173:16;-1:-1:-1::0;;;;;46166:34:0::1;;46209:4;46166:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:110::-;46123:153;;46326:71;46348:16;46366:9;46377:19;46326:21;:71::i;:::-;46444:16;-1:-1:-1::0;;;;;46415:133:0::1;;46475:4;46494:19;46528:9;46415:133;;;;;;;;:::i;:::-;;;;;;;;46561:55;46579:4;46586:9;46597:18;;46561:9;:55::i;:::-;46629:27;:25;:27::i;:::-;-1:-1:-1::0;;34079:16:0;:24;;-1:-1:-1;;34079:24:0;;;-1:-1:-1;;;;;45454:1210:0:o;53713:1064::-;53849:19;53871:10;:8;:10::i;:::-;53849:32;;53907:15;53937:23;53975:12;54002:23;54040:12;54067:13;54094:19;54105:7;54094:10;:19::i;:::-;53892:221;;;;;;;;;;;;54124:13;54140:22;54150:11;54140:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;54191:15:0;;;;;;:7;:15;;;;;;54124:38;;-1:-1:-1;54191:28:0;;54211:7;54191:19;:28::i;:::-;-1:-1:-1;;;;;54173:15:0;;;;;;:7;:15;;;;;;;;:46;;;;54248:7;:15;;;;:28;;54268:7;54248:19;:28::i;:::-;-1:-1:-1;;;;;54230:15:0;;;;;;:7;:15;;;;;:46;54291:16;;;;54287:483;;;-1:-1:-1;;;;;54345:18:0;;;;;;:7;:18;;;;;;:31;;54368:7;54345:22;:31::i;:::-;-1:-1:-1;;;;;54324:18:0;;;;;;;:7;:18;;;;;;;:52;;;;54396:36;;;;;;;;;;54424:7;;54396:36;:::i;:::-;;;;;;;;54287:483;;;-1:-1:-1;;;;;54486:18:0;;;;;;:7;:18;;;;;;:39;;54509:15;54486:22;:39::i;:::-;-1:-1:-1;;;;;54465:18:0;;;;;;:7;:18;;;;;;:60;;;;54581:4;54565:22;;;;:33;;54592:5;54565:26;:33::i;:::-;54556:4;54540:22;;;;:7;:22;;;;;:58;54613:23;54625:4;54631;54613:11;:23::i;:::-;54681:4;-1:-1:-1;;;;;54656:38:0;54665:6;-1:-1:-1;;;;;54656:38:0;;54688:5;54656:38;;;;;;:::i;:::-;;;;;;;;54731:9;-1:-1:-1;;;;;54714:44:0;54723:6;-1:-1:-1;;;;;54714:44:0;;54742:15;54714:44;;;;;;:::i;:::-;;;;;;;;54287:483;53713:1064;;;;;;;;;;;:::o;52558:1147::-;52692:19;52714:10;:8;:10::i;:::-;52692:32;;52750:15;52780:23;52818:12;52845:23;52883:12;52910:13;52937:19;52948:7;52937:10;:19::i;:::-;52735:221;;;;;;;;;;;;52967:13;52983:22;52993:11;52983:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;53034:15:0;;;;;;:7;:15;;;;;;52967:38;;-1:-1:-1;53034:28:0;;53054:7;53034:19;:28::i;:::-;-1:-1:-1;;;;;53016:15:0;;;;;;:7;:15;;;;;:46;53077:16;;;;53073:625;;;-1:-1:-1;;;;;53131:18:0;;;;;;:7;:18;;;;;;:31;;53154:7;53131:22;:31::i;:::-;-1:-1:-1;;;;;53110:18:0;;;;;;:7;:18;;;;;;;;:52;;;;53198:7;:18;;;;:31;;53221:7;53198:22;:31::i;53073:625::-;-1:-1:-1;;;;;53339:18:0;;;;;;:7;:18;;;;;;:39;;53362:15;53339:22;:39::i;:::-;-1:-1:-1;;;;;53318:18:0;;;;;;:7;:18;;;;;;;;:60;;;;53414:7;:18;;;;:39;;53437:15;53414:22;:39::i;51547:1003::-;51679:19;51701:10;:8;:10::i;:::-;51679:32;;51737:15;51767:23;51805:12;51832:23;51870:12;51897:13;51924:19;51935:7;51924:10;:19::i;:::-;51722:221;;;;;;;;;;;;51954:13;51970:22;51980:11;51970:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;52021:15:0;;;;;;:7;:15;;;;;;51954:38;;-1:-1:-1;52021:28:0;;52041:7;52021:19;:28::i;54785:1206::-;54921:19;54943:10;:8;:10::i;:::-;54921:32;;54979:15;55009:23;55047:12;55074:23;55112:12;55139:13;55166:19;55177:7;55166:10;:19::i;:::-;54964:221;;;;;;;;;;;;55196:13;55212:22;55222:11;55212:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;55263:15:0;;;;;;:7;:15;;;;;;55196:38;;-1:-1:-1;55263:28:0;;55283:7;55263:19;:28::i;:::-;-1:-1:-1;;;;;55245:15:0;;;;;;:7;:15;;;;;;;;:46;;;;55320:7;:15;;;;:28;;55340:7;55320:19;:28::i;44305:592::-;44455:16;;;44469:1;44455:16;;;;;;;;44431:21;;44455:16;;;;;;;;;;-1:-1:-1;44455:16:0;44431:40;;44500:4;44482;44487:1;44482:7;;;;;;-1:-1:-1;;;44482:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;44482:23:0;;;-1:-1:-1;;;;;44482:23:0;;;;;44526:16;-1:-1:-1;;;;;44526:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44516:4;44521:1;44516:7;;;;;;-1:-1:-1;;;44516:7:0;;;;;;;;;;;;;;:33;-1:-1:-1;;;;;44516:33:0;;;-1:-1:-1;;;;;44516:33:0;;;;;44562:63;44579:4;44594:16;44613:11;44562:8;:63::i;:::-;44664:225;;;;;-1:-1:-1;;;;;44664:16:0;:67;;;;:225;;44746:11;;44772:1;;44816:4;;44843;;44863:15;;44664:225;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44305:592;;:::o;44905:541::-;45073:63;45090:4;45105:16;45124:11;45073:8;:63::i;:::-;45179:259;;;;;-1:-1:-1;;;;;45179:16:0;:32;;;;45219:9;;45179:259;;45252:4;;45272:11;;45298:1;;;;45252:4;;45412:15;;45179:259;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44905:541;;:::o;50884:655::-;51004:26;;50989:9;;50940:23;;50979:52;;:20;;-1:-1:-1;;;;;50989:9:0;50979;:20::i;:52::-;50940:91;;51064:21;;51046:15;:39;51042:490;;;51102:23;51145:43;51165:15;51182:5;51145:19;:43::i;:::-;51241:18;;-1:-1:-1;;;;;51241:18:0;51233:27;;;;:7;:27;;;;;;51102:86;;-1:-1:-1;51233:80:0;;51102:86;51233:31;:80::i;:::-;51211:18;;-1:-1:-1;;;;;51211:18:0;;;51203:27;;;;:7;:27;;;;;;:110;;;;51357:9;;;;;51349:18;;;;:39;;51372:15;51349:22;:39::i;:::-;51336:9;;;-1:-1:-1;;;;;51336:9:0;;;51328:18;;;;:7;:18;;;;;;;:60;;;;51428:18;;51417:9;;51408:56;;51428:18;;;;51417:9;;51408:56;;;;51448:15;;51408:56;:::i;:::-;;;;;;;;51494:18;;;;;;;;;-1:-1:-1;;;;;51494:18:0;-1:-1:-1;;;;;51479:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51042:490;50884:655;:::o;46672:760::-;46895:63;46912:4;46927:16;46946:11;46895:8;:63::i;:::-;46969:113;;;;;-1:-1:-1;;;;;46969:32:0;;;;;:113;;47024:16;;47056:15;;46969:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;47125:299:0;;;;;-1:-1:-1;;;;;47125:16:0;:29;;;;:299;;47177:4;;47197:16;;47228:11;;47254:15;;47284:1;;;;47177:4;;47398:15;;47125:299;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;55999:147::-;56077:7;;:17;;56089:4;56077:11;:17::i;:::-;56067:7;:27;56118:10;;:20;;56133:4;56118:14;:20::i;:::-;56105:10;:33;-1:-1:-1;;55999:147:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:470::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1329:366;;1631:7;;-1:-1:-1;;;1685:2:1;1670:18;;;;1657:32;;1329:366::o;1700:327::-;;;1829:2;1817:9;1808:7;1804:23;1800:32;1797:2;;;1850:6;1842;1835:22;1797:2;1894:9;1881:23;1913:33;1940:5;1913:33;:::i;:::-;1965:5;2017:2;2002:18;;;;1989:32;;-1:-1:-1;;;1787:240:1:o;2032:253::-;;2141:2;2129:9;2120:7;2116:23;2112:32;2109:2;;;2162:6;2154;2147:22;2109:2;2206:9;2193:23;2225:30;2249:5;2225:30;:::i;2290:257::-;;2410:2;2398:9;2389:7;2385:23;2381:32;2378:2;;;2431:6;2423;2416:22;2378:2;2468:9;2462:16;2487:30;2511:5;2487:30;:::i;2552:190::-;;2664:2;2652:9;2643:7;2639:23;2635:32;2632:2;;;2685:6;2677;2670:22;2632:2;-1:-1:-1;2713:23:1;;2622:120;-1:-1:-1;2622:120:1:o;2747:194::-;;2870:2;2858:9;2849:7;2845:23;2841:32;2838:2;;;2891:6;2883;2876:22;2838:2;-1:-1:-1;2919:16:1;;2828:113;-1:-1:-1;2828:113:1:o;2946:321::-;;;3072:2;3060:9;3051:7;3047:23;3043:32;3040:2;;;3093:6;3085;3078:22;3040:2;3134:9;3121:23;3111:33;;3194:2;3183:9;3179:18;3166:32;3207:30;3231:5;3207:30;:::i;3272:326::-;;;;3418:2;3406:9;3397:7;3393:23;3389:32;3386:2;;;3439:6;3431;3424:22;3386:2;-1:-1:-1;;3467:23:1;;;3537:2;3522:18;;3509:32;;-1:-1:-1;3588:2:1;3573:18;;;3560:32;;3376:222;-1:-1:-1;3376:222:1:o;3603:316::-;;;;3760:2;3748:9;3739:7;3735:23;3731:32;3728:2;;;3781:6;3773;3766:22;3728:2;3815:9;3809:16;3799:26;;3865:2;3854:9;3850:18;3844:25;3834:35;;3909:2;3898:9;3894:18;3888:25;3878:35;;3718:201;;;;;:::o;3924:226::-;-1:-1:-1;;;;;4088:55:1;;;;4070:74;;4058:2;4043:18;;4025:125::o;4394:783::-;-1:-1:-1;;;;;4832:15:1;;;4814:34;;4884:15;;;4879:2;4864:18;;4857:43;4931:2;4916:18;;4909:34;;;;4974:2;4959:18;;4952:34;;;;5017:3;5002:19;;4995:35;;;;5061:3;5046:19;;5039:35;5111:15;;;5105:3;5090:19;;5083:44;5158:3;5143:19;;5136:35;;;;4740:3;4725:19;;4707:470::o;5182:305::-;-1:-1:-1;;;;;5382:55:1;;;;5364:74;;5469:2;5454:18;;5447:34;5352:2;5337:18;;5319:168::o;5794:630::-;-1:-1:-1;;;;;6176:15:1;;;6158:34;;6223:2;6208:18;;6201:34;;;;6266:2;6251:18;;6244:34;;;;6309:2;6294:18;;6287:34;;;;6358:15;;;6352:3;6337:19;;6330:44;6405:3;6390:19;;6383:35;;;;6084:3;6069:19;;6051:373::o;6429:187::-;6594:14;;6587:22;6569:41;;6557:2;6542:18;;6524:92::o;7385:662::-;;7526:2;7555;7544:9;7537:21;7587:6;7581:13;7630:6;7625:2;7614:9;7610:18;7603:34;7655:4;7668:140;7682:6;7679:1;7676:13;7668:140;;;7777:14;;;7773:23;;7767:30;7743:17;;;7762:2;7739:26;7732:66;7697:10;;7668:140;;;7826:6;7823:1;7820:13;7817:2;;;7896:4;7891:2;7882:6;7871:9;7867:22;7863:31;7856:45;7817:2;-1:-1:-1;7963:2:1;7951:15;7968:66;7947:88;7932:104;;;;8038:2;7928:113;;7506:541;-1:-1:-1;;;7506:541:1:o;8052:417::-;8254:2;8236:21;;;8293:2;8273:18;;;8266:30;8332:34;8327:2;8312:18;;8305:62;8403:23;8398:2;8383:18;;8376:51;8459:3;8444:19;;8226:243::o;8474:399::-;8676:2;8658:21;;;8715:2;8695:18;;;8688:30;8754:34;8749:2;8734:18;;8727:62;8825:5;8820:2;8805:18;;8798:33;8863:3;8848:19;;8648:225::o;8878:403::-;9080:2;9062:21;;;9119:2;9099:18;;;9092:30;9158:34;9153:2;9138:18;;9131:62;9229:9;9224:2;9209:18;;9202:37;9271:3;9256:19;;9052:229::o;9286:402::-;9488:2;9470:21;;;9527:2;9507:18;;;9500:30;9566:34;9561:2;9546:18;;9539:62;9637:8;9632:2;9617:18;;9610:36;9678:3;9663:19;;9460:228::o;9693:402::-;9895:2;9877:21;;;9934:2;9914:18;;;9907:30;9973:34;9968:2;9953:18;;9946:62;10044:8;10039:2;10024:18;;10017:36;10085:3;10070:19;;9867:228::o;10100:404::-;10302:2;10284:21;;;10341:2;10321:18;;;10314:30;10380:34;10375:2;10360:18;;10353:62;10451:10;10446:2;10431:18;;10424:38;10494:3;10479:19;;10274:230::o;10509:399::-;10711:2;10693:21;;;10750:2;10730:18;;;10723:30;10789:34;10784:2;10769:18;;10762:62;10860:5;10855:2;10840:18;;10833:33;10898:3;10883:19;;10683:225::o;10913:415::-;11115:2;11097:21;;;11154:2;11134:18;;;11127:30;11193:34;11188:2;11173:18;;11166:62;11264:21;11259:2;11244:18;;11237:49;11318:3;11303:19;;11087:241::o;11333:426::-;11535:2;11517:21;;;11574:2;11554:18;;;11547:30;11613:34;11608:2;11593:18;;11586:62;11684:32;11679:2;11664:18;;11657:60;11749:3;11734:19;;11507:252::o;11764:399::-;11966:2;11948:21;;;12005:2;11985:18;;;11978:30;12044:34;12039:2;12024:18;;12017:62;12115:5;12110:2;12095:18;;12088:33;12153:3;12138:19;;11938:225::o;12168:398::-;12370:2;12352:21;;;12409:2;12389:18;;;12382:30;12448:34;12443:2;12428:18;;12421:62;12519:4;12514:2;12499:18;;12492:32;12556:3;12541:19;;12342:224::o;12571:416::-;12773:2;12755:21;;;12812:2;12792:18;;;12785:30;12851:34;12846:2;12831:18;;12824:62;12922:22;12917:2;12902:18;;12895:50;12977:3;12962:19;;12745:242::o;12992:355::-;13194:2;13176:21;;;13233:2;13213:18;;;13206:30;13272:33;13267:2;13252:18;;13245:61;13338:2;13323:18;;13166:181::o;13352:414::-;13554:2;13536:21;;;13593:2;13573:18;;;13566:30;13632:34;13627:2;13612:18;;13605:62;13703:20;13698:2;13683:18;;13676:48;13756:3;13741:19;;13526:240::o;13771:406::-;13973:2;13955:21;;;14012:2;13992:18;;;13985:30;14051:34;14046:2;14031:18;;14024:62;14122:12;14117:2;14102:18;;14095:40;14167:3;14152:19;;13945:232::o;14182:413::-;14384:2;14366:21;;;14423:2;14403:18;;;14396:30;14462:34;14457:2;14442:18;;14435:62;14533:19;14528:2;14513:18;;14506:47;14585:3;14570:19;;14356:239::o;14600:401::-;14802:2;14784:21;;;14841:2;14821:18;;;14814:30;14880:34;14875:2;14860:18;;14853:62;14951:7;14946:2;14931:18;;14924:35;14991:3;14976:19;;14774:227::o;15006:414::-;15208:2;15190:21;;;15247:2;15227:18;;;15220:30;15286:34;15281:2;15266:18;;15259:62;15357:20;15352:2;15337:18;;15330:48;15410:3;15395:19;;15180:240::o;15425:399::-;15627:2;15609:21;;;15666:2;15646:18;;;15639:30;15705:34;15700:2;15685:18;;15678:62;15776:5;15771:2;15756:18;;15749:33;15814:3;15799:19;;15599:225::o;15829:399::-;16031:2;16013:21;;;16070:2;16050:18;;;16043:30;16109:34;16104:2;16089:18;;16082:62;16180:5;16175:2;16160:18;;16153:33;16218:3;16203:19;;16003:225::o;16233:471::-;16435:2;16417:21;;;16474:2;16454:18;;;16447:30;16513:34;16508:2;16493:18;;16486:62;16584:34;16579:2;16564:18;;16557:62;16656:5;16650:3;16635:19;;16628:34;16694:3;16679:19;;16407:297::o;16709:412::-;16911:2;16893:21;;;16950:2;16930:18;;;16923:30;16989:34;16984:2;16969:18;;16962:62;17060:18;17055:2;17040:18;;17033:46;17111:3;17096:19;;16883:238::o;17126:356::-;17328:2;17310:21;;;17347:18;;;17340:30;17406:34;17401:2;17386:18;;17379:62;17473:2;17458:18;;17300:182::o;17487:419::-;17689:2;17671:21;;;17728:2;17708:18;;;17701:30;17767:34;17762:2;17747:18;;17740:62;17838:25;17833:2;17818:18;;17811:53;17896:3;17881:19;;17661:245::o;17911:410::-;18113:2;18095:21;;;18152:2;18132:18;;;18125:30;18191:34;18186:2;18171:18;;18164:62;18262:16;18257:2;18242:18;;18235:44;18311:3;18296:19;;18085:236::o;18326:341::-;18528:2;18510:21;;;18567:2;18547:18;;;18540:30;18606:19;18601:2;18586:18;;18579:47;18658:2;18643:18;;18500:167::o;18672:406::-;18874:2;18856:21;;;18913:2;18893:18;;;18886:30;18952:34;18947:2;18932:18;;18925:62;19023:12;19018:2;19003:18;;18996:40;19068:3;19053:19;;18846:232::o;19083:352::-;19285:2;19267:21;;;19324:2;19304:18;;;19297:30;19363;19358:2;19343:18;;19336:58;19426:2;19411:18;;19257:178::o;19440:405::-;19642:2;19624:21;;;19681:2;19661:18;;;19654:30;19720:34;19715:2;19700:18;;19693:62;19791:11;19786:2;19771:18;;19764:39;19835:3;19820:19;;19614:231::o;19850:414::-;20052:2;20034:21;;;20091:2;20071:18;;;20064:30;20130:34;20125:2;20110:18;;20103:62;20201:20;20196:2;20181:18;;20174:48;20254:3;20239:19;;20024:240::o;20269:353::-;20471:2;20453:21;;;20510:2;20490:18;;;20483:30;20549:31;20544:2;20529:18;;20522:59;20613:2;20598:18;;20443:179::o;20627:400::-;20829:2;20811:21;;;20868:2;20848:18;;;20841:30;20907:34;20902:2;20887:18;;20880:62;20978:6;20973:2;20958:18;;20951:34;21017:3;21002:19;;20801:226::o;21032:407::-;21234:2;21216:21;;;21273:2;21253:18;;;21246:30;21312:34;21307:2;21292:18;;21285:62;21383:13;21378:2;21363:18;;21356:41;21429:3;21414:19;;21206:233::o;21444:177::-;21590:25;;;21578:2;21563:18;;21545:76::o;21626:1029::-;;21936:3;21925:9;21921:19;21967:6;21956:9;21949:25;21993:2;22031:6;22026:2;22015:9;22011:18;22004:34;22074:3;22069:2;22058:9;22054:18;22047:31;22098:6;22133;22127:13;22164:6;22156;22149:22;22202:3;22191:9;22187:19;22180:26;;22241:2;22233:6;22229:15;22215:29;;22262:4;22275:218;22289:6;22286:1;22283:13;22275:218;;;22354:13;;-1:-1:-1;;;;;22350:62:1;22338:75;;22468:15;;;;22433:12;;;;22311:1;22304:9;22275:218;;;-1:-1:-1;;;;;;;22549:55:1;;;;22544:2;22529:18;;22522:83;-1:-1:-1;;;22636:3:1;22621:19;22614:35;22510:3;21897:758;-1:-1:-1;;;21897:758:1:o;22660:248::-;22834:25;;;22890:2;22875:18;;22868:34;22822:2;22807:18;;22789:119::o;22913:319::-;23115:25;;;23171:2;23156:18;;23149:34;;;;23214:2;23199:18;;23192:34;23103:2;23088:18;;23070:162::o;23237:184::-;23409:4;23397:17;;;;23379:36;;23367:2;23352:18;;23334:87::o;23426:128::-;;23497:1;23493:6;23490:1;23487:13;23484:2;;;23503:18;;:::i;:::-;-1:-1:-1;23539:9:1;;23474:80::o;23559:274::-;;23625:1;23615:2;;-1:-1:-1;;;23657:1:1;23650:88;23761:4;23758:1;23751:15;23789:4;23786:1;23779:15;23615:2;-1:-1:-1;23818:9:1;;23605:228::o;23838:453::-;23934:6;23957:5;23971:314;24020:1;24057:2;24047:8;24044:16;24034:2;;24064:5;;;24034:2;24105:4;24100:3;24096:14;24090:4;24087:24;24084:2;;;24114:18;;:::i;:::-;24164:2;24154:8;24150:17;24147:2;;;24179:16;;;;24147:2;24258:17;;;;;24218:15;;23971:314;;;23915:376;;;;;;;:::o;24296:199::-;;24385:104;24422:66;24412:8;24406:4;24500:922;24584:8;24574:2;;-1:-1:-1;24625:1:1;24639:5;;24574:2;24673:4;24663:2;;-1:-1:-1;24710:1:1;24724:5;;24663:2;24755:4;24773:1;24768:59;;;;24841:1;24836:183;;;;24748:271;;24768:59;24798:1;24789:10;;24812:5;;;24836:183;24873:3;24863:8;24860:17;24857:2;;;24880:18;;:::i;:::-;24936:1;24926:8;24922:16;24913:25;;24964:3;24957:5;24954:14;24951:2;;;24971:18;;:::i;:::-;25004:5;;;24748:271;;25103:2;25093:8;25090:16;25084:3;25078:4;25075:13;25071:36;25065:2;25055:8;25052:16;25047:2;25041:4;25038:12;25034:35;25031:77;25028:2;;;-1:-1:-1;25140:19:1;;;25175:14;;;25172:2;;;25192:18;;:::i;:::-;25225:5;;25028:2;25272:42;25310:3;25300:8;25294:4;25291:1;25272:42;:::i;:::-;25347:6;25342:3;25338:16;25329:7;25326:29;25323:2;;;25358:18;;:::i;:::-;25396:20;;24564:858;-1:-1:-1;;;;24564:858:1:o;25427:228::-;;25593:1;25525:66;25521:74;25518:1;25515:81;25510:1;25503:9;25496:17;25492:105;25489:2;;;25600:18;;:::i;:::-;-1:-1:-1;25640:9:1;;25479:176::o;25660:125::-;;25728:1;25725;25722:8;25719:2;;;25733:18;;:::i;:::-;-1:-1:-1;25770:9:1;;25709:76::o;25790:437::-;25875:1;25865:12;;25922:1;25912:12;;;25933:2;;25987:4;25979:6;25975:17;25965:27;;25933:2;26040;26032:6;26029:14;26009:18;26006:38;26003:2;;;-1:-1:-1;;;26074:1:1;26067:88;26178:4;26175:1;26168:15;26206:4;26203:1;26196:15;26003:2;;25845:382;;;:::o;26232:195::-;;26302:66;26295:5;26292:77;26289:2;;;26372:18;;:::i;:::-;-1:-1:-1;26419:1:1;26408:13;;26279:148::o;26432:184::-;-1:-1:-1;;;26481:1:1;26474:88;26581:4;26578:1;26571:15;26605:4;26602:1;26595:15;26621:156;-1:-1:-1;;;;;26702:5:1;26698:54;26691:5;26688:65;26678:2;;26767:1;26764;26757:12;26782:120;26870:5;26863:13;26856:21;26849:5;26846:32;26836:2;;26892:1;26889;26882:12

Swarm Source

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