Contract 0xBdfbeecF52bCfF5aa8cc1B8A4B737B2Af3D1BA2F

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x75cc9a5fe95d216d5e2ec7851d7ca7986ae76a87978ccfd8beb44856e79125feStake Tokens293291322021-10-22 5:42:372 mins ago0x819695c73524a422a4ce1f53ac62aaf76bcde700 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00022103552.25
0xbc9db52e9c7441adbbbe32b1958a69d3175de2855575e2f1b13b733622c38837Stake Tokens293290552021-10-22 5:38:466 mins ago0x8d5ca432208d93f9bf0d14b3f21068da112a28a3 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00022100852.25
0x6b0c94f3429dda68810c957768654479a8399b1067bdd4379bcc14e2c0b096e1Unstake Tokens293290372021-10-22 5:37:526 mins ago0x99c16dd504c0f56f00443c7d1ef55fe57423e871 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000145010252.25
0xf928fe5c1d012d3be4f17ae08456714ac45e90110365f7f409e3608cb263d287Stake Tokens93288232021-10-22 5:27:1017 mins ago0x5bf1cf1fdc97a8a84184610192ae0a4068c71c3f IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000176042.25
0x72810b34a60ecb0b6140cf24e0d51bd7fa57e4417cd746ec026cec9db3b674bdStake Tokens93288082021-10-22 5:26:2518 mins ago0x0db178efbd06a95571820449a8f31357f6661265 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x2130d3abba5714c30220a468923ee68539f33153bf81b90880929ffe292d810fStake Tokens93288042021-10-22 5:26:1318 mins ago0x554fcba8aa3f5943e604adce9cf060079038cedd IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000176042.25
0x65a6ee39ac7eb101dbe6b9c136d82ea8b8670a4eff4c412f5aeecbb958b0958aStake Tokens93287872021-10-22 5:25:2219 mins ago0x554fcba8aa3f5943e604adce9cf060079038cedd IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000176042.25
0x7ec965237e52e0609cef0dae346f68e9998588d4b75f237e555d208ef6163a6cStake Tokens93287782021-10-22 5:24:5519 mins ago0x814dc30e17261b26bdbe36e1ea01b2ac9816f2e4 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375922.25
0xf6d38acffbe2bb5ca063e5be18ed983d10064890d00f1a261dfc5dea85c60319Stake Tokens93287732021-10-22 5:24:4020 mins ago0x26bef00d26d5b9ffbb02ba2ab8ef55740f4ac999 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000176042.25
0x8fc2881f1f0e3e4312f5a979e613245820f36d6d583cd97d66f6b24a3a8214f2Unstake Tokens93287672021-10-22 5:24:2220 mins ago0x554fcba8aa3f5943e604adce9cf060079038cedd IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00009783452.25
0xfbaf4511daafa5aa1352af50d15de24add3150477825af8be33855abb851d4f7Stake Tokens93287642021-10-22 5:24:1320 mins ago0x6a8c47d507430add403c35c8c7157384b7e8d269 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0xc0bb4313526fc562ffc2ba914cec5a598414656fa6ffde5851137a49c47ba2f7Stake Tokens93287622021-10-22 5:24:0720 mins ago0x2e62efbd97ad176e7cd22924b70b58fa3bbb8439 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x35e595a2c478b194af6430908b3c680c5f4c642ce3fef30da1280a676b523ef4Stake Tokens93287452021-10-22 5:23:1621 mins ago0x2dc83263686d8217320e3e3739a9d12ada16a6c4 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001760672.25
0xb31bd2c8ea4facde947fc65a53e7fd5a2bb32c221fa703e6935cf3ef1be483a7Unstake Tokens93287352021-10-22 5:22:4622 mins ago0x2dc83263686d8217320e3e3739a9d12ada16a6c4 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00009783452.25
0x5eb3215407d81667e9b6690afce4eb434ad586cdb9ee1b4719c5e4b45a103b4bStake Tokens93287322021-10-22 5:22:3722 mins ago0x316e0e678a4bae9ad01aaf89fec792bc3f31713c IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x491107add96abb40550bfdf803a97d1afeda635bdcf90da03f63b0b03ff0096dStake Tokens93287182021-10-22 5:21:5522 mins ago0x316e0e678a4bae9ad01aaf89fec792bc3f31713c IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0xe53d56de64817ba082dbaab677fabd2814f77d70ccb066f6fb8f2dd2ab937fccStake Tokens93287112021-10-22 5:21:3423 mins ago0x60befcc68696b2dddaf772cb86e8f5513db9b32a IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x700fac555fc5bae96013903b7725b5ec021648b22dde84ffaa23ca2d62a203a7Stake Tokens93287022021-10-22 5:21:0723 mins ago0xfb7220952eb99ba592220cd414d4db825ac61522 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.000176042.25
0x69bb5933a6f0b3d0a359ec2228045705a6e047d66153cfb73a5ff6d051225bdcUnstake Tokens93286992021-10-22 5:20:5823 mins ago0x26bef00d26d5b9ffbb02ba2ab8ef55740f4ac999 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00009783452.25
0x0c51a01840c3b4879d813c2d37f720c0b41ea0e252f7908a06462ce11dc6e452Unstake Tokens93286942021-10-22 5:20:4324 mins ago0xf57f288c4721c15ffb8a585de5c15c809d733c2d IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.00009783452.25
0xbf708990c24b453c70445471b5a52f0196994d8ba1c07946c57ce77112b406ddStake Tokens93285142021-10-22 5:11:4333 mins ago0xd7ec09d2ed57e4c6dbbf25261f1a4f4761a8ca03 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x8b55ad2434b8c4d37f008b181b4ea7abccc30768b69d72adbefbedfed0642f48Stake Tokens93284302021-10-22 5:07:3137 mins ago0x0e6ea13b2157ef3aab2bb20a3f794659c6caf8ad IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0xff161985c855d00d2a252e9a25379745bf5c36cda40f0ee9ff4640c96489ceffStake Tokens93284152021-10-22 5:06:4638 mins ago0xf64f9444426034fbca8136c642b930f4ef7927fe IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375382.25
0xa03cf3e5bd54843b43303cd337d1801847a56f729625df0f83fb9b6c80b48eb7Stake Tokens93284142021-10-22 5:06:4338 mins ago0xb911bb440ee413e7dfde44b126aa6f6f11bd0781 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
0x418db828859d89e90fe16adf3ac1ee6f9c449f0d8139e71c54549d6b712db6e8Stake Tokens93284052021-10-22 5:06:1638 mins ago0xedd3bf1d885c5ace21391c0d4ffbbd1b45515b46 IN  0xbdfbeecf52bcff5aa8cc1b8a4b737b2af3d1ba2f0 HT0.0001375652.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NXTPFarm

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-06-17
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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: node_modules\@openzeppelin\contracts\math\SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @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 in 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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin\contracts\token\ERC20\SafeERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: node_modules\@openzeppelin\contracts\GSN\Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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.
 */
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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

// File: @openzeppelin\contracts\utils\ReentrancyGuard.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: contracts\NXTPFarm.sol

pragma solidity ^0.6.0;





contract NXTPFarm is Ownable, ReentrancyGuard{
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string public name = "NXTP Farm";

    // pool > token > address
    mapping(uint256 => mapping(address => mapping(address => uint256))) public stakingBalance;
    mapping(uint256 => mapping(address => mapping(address => uint256))) public stakingBalance2;
    address[] allowedTokens;

    event AddAllowedTokens(address token);
    event StakeTokens(uint256 _amount, address token, uint256 pool);
    event UnstakeTokens(address token, uint256 pool);
    event StakeTokens2(uint256 _amount1, address token1, uint256 _amount2, address token2, uint256 pool);
    event UnstakeTokens2(address token1, address token2, uint256 pool);


    function addAllowedTokens(address token) public onlyOwner {
        require(token != address(0), "token is zero address");
        if (tokenIsAllowed(token) == false) {
            allowedTokens.push(token);
            emit AddAllowedTokens(token);
        }
    }


    function stakeTokens(uint256 _amount, address token, uint256 pool) public nonReentrant{
        // Require amount greater than 0
        require(_amount > 0, "amount cannot be 0");
        if (tokenIsAllowed(token)) {

            IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);
            stakingBalance[pool][token][msg.sender] = stakingBalance[pool][token][msg.sender].add(_amount);

            emit StakeTokens(_amount, token, pool);
        }
    }

    // Unstaking Tokens (Withdraw)
    function unstakeTokens(address token, uint256 pool) public nonReentrant{
        require(token != address(0), "token is zero address");
        // Fetch staking balance
        uint256 balance = stakingBalance[pool][token][msg.sender];
        require(balance > 0, "staking balance cannot be 0");
        IERC20(token).safeTransfer(msg.sender, balance);
        stakingBalance[pool][token][msg.sender] = 0;

        emit UnstakeTokens(token, pool);
    }


    function tokenIsAllowed(address token) public view returns (bool) {
        for (
            uint256 allowedTokensIndex = 0;
            allowedTokensIndex < allowedTokens.length;
            allowedTokensIndex++
        ) {
            if (allowedTokens[allowedTokensIndex] == token) {
                return true;
            }
        }
        return false;
    }


    function getUserStakingBalanceValue(address user, address token, uint256 pool) public view returns (uint256) {
        return stakingBalance[pool][token][user];
    }


    //double
    function stakeTokens2(uint256 _amount1, address token1, uint256 _amount2, address token2, uint256 pool) public nonReentrant{
        // Require amount greater than 0
        require(_amount1 > 0, "amount1 cannot be 0");
        require(_amount2 > 0, "amount2 cannot be 0");

        if (tokenIsAllowed(token1) && tokenIsAllowed(token2)) {
            IERC20(token1).safeTransferFrom(msg.sender, address(this), _amount1);
            IERC20(token2).safeTransferFrom(msg.sender, address(this), _amount2);

            stakingBalance2[pool][token1][msg.sender] = stakingBalance2[pool][token1][msg.sender].add(_amount1);
            stakingBalance2[pool][token2][msg.sender] = stakingBalance2[pool][token2][msg.sender].add(_amount2);

            emit StakeTokens2(_amount1, token1, _amount2, token2, pool);
        }
    }


    // Unstaking Tokens (Withdraw)
    function unstakeTokens2(address token1, address token2, uint256 pool) public nonReentrant{
        require(token1 != address(0), "token1 is zero address");
        require(token2 != address(0), "token2 is zero address");
        require(token1 != token2, "token1 and token2 is same");

        // Fetch staking balance
        uint256 balance1 = stakingBalance2[pool][token1][msg.sender];
        require(balance1 > 0, "staking balance cannot be 0");
        
        uint256 balance2 = stakingBalance2[pool][token2][msg.sender];
        require(balance2 > 0, "staking balance cannot be 0");
        
        IERC20(token1).safeTransfer(msg.sender, balance1);
        IERC20(token2).safeTransfer(msg.sender, balance2);
        
        stakingBalance2[pool][token1][msg.sender] = 0;
        stakingBalance2[pool][token2][msg.sender] = 0;

        emit UnstakeTokens2(token1, token2, pool);
    }


    function getUserStakingBalanceValue2(address user, address token, uint256 pool) public view returns (uint256) {
        return stakingBalance2[pool][token][user];
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"AddAllowedTokens","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":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"StakeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount1","type":"uint256"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount2","type":"uint256"},{"indexed":false,"internalType":"address","name":"token2","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"StakeTokens2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"UnstakeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"token2","type":"address"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"}],"name":"UnstakeTokens2","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addAllowedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"getUserStakingBalanceValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"getUserStakingBalanceValue2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"_amount2","type":"uint256"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"stakeTokens2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"stakingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"stakingBalance2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"tokenIsAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"unstakeTokens2","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600981526020017f4e585450204661726d0000000000000000000000000000000000000000000000815250600290805190602001906200005192919062000117565b506000620000646200010f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060018081905550620001c6565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200015a57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018a5782518255916020019190600101906200016d565b5b5090506200019a91906200019e565b5090565b620001c391905b80821115620001bf576000816000905550600101620001a5565b5090565b90565b6126ee80620001d66000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063dd5b846711610066578063dd5b8467146104d8578063e89a173e14610534578063f2fde38b14610582578063f315aa84146105c6576100ea565b80638da5cb5b146103b4578063b9f6ac47146103fe578063cec534d614610480576100ea565b8063715018a6116100c8578063715018a6146102385780637189bd5414610242578063778b215f146102c45780638d69b8e814610332576100ea565b806306fdde03146100ef578063102c9db614610172578063171e44ea146101f4575b600080fd5b6100f7610648565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101de6004803603606081101561018857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106e6565b6040518082815260200191505060405180910390f35b6102366004803603602081101561020a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061077f565b005b6102406109ca565b005b6102ae6004803603606081101561025857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b52565b6040518082815260200191505060405180910390f35b610330600480360360608110156102da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610beb565b005b6103b2600480360360a081101561034857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061128d565b005b6103bc611793565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61046a6004803603606081101561041457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117bc565b6040518082815260200191505060405180910390f35b6104d66004803603606081101561049657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ee565b005b61051a600480360360208110156104ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad1565b604051808215151515815260200191505060405180910390f35b6105806004803603604081101561054a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b73565b005b6105c46004803603602081101561059857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed4565b005b610632600480360360608110156105dc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120e1565b6040518082815260200191505060405180910390f35b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b505050505081565b60006004600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b610787612113565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f746f6b656e206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600015156108f882611ad1565b151514156109c7576005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4eec973584b9930388bebeff27c40485ca0a973c42e435e870dbdcb4623e4f6681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50565b6109d2612113565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b60026001541415610c64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f746f6b656e31206973207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610db2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f746f6b656e32206973207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e3120616e6420746f6b656e322069732073616d650000000000000081525060200191505060405180910390fd5b60006004600083815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7374616b696e672062616c616e63652063616e6e6f742062652030000000000081525060200191505060405180910390fd5b60006004600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7374616b696e672062616c616e63652063616e6e6f742062652030000000000081525060200191505060405180910390fd5b61108f33838773ffffffffffffffffffffffffffffffffffffffff1661211b9092919063ffffffff16565b6110ba33828673ffffffffffffffffffffffffffffffffffffffff1661211b9092919063ffffffff16565b60006004600085815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f43aef3bf33e815eb666fc7800aede708bf3b500f1adcfb979d530148118512d0858585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505060018081905550505050565b60026001541415611306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060008511611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616d6f756e74312063616e6e6f7420626520300000000000000000000000000081525060200191505060405180910390fd5b600083116113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616d6f756e74322063616e6e6f7420626520300000000000000000000000000081525060200191505060405180910390fd5b61140384611ad1565b8015611414575061141382611ad1565b5b15611785576114463330878773ffffffffffffffffffffffffffffffffffffffff166121d3909392919063ffffffff16565b6114733330858573ffffffffffffffffffffffffffffffffffffffff166121d3909392919063ffffffff16565b611513856004600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b6004600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611644836004600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b6004600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7be908765ae45e606d7b122cd9d233e82a0ac3e7e9b1219a79f6278072d841f78585858585604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a15b600180819055505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b60026001541415611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600083116118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f616d6f756e742063616e6e6f742062652030000000000000000000000000000081525060200191505060405180910390fd5b6118ee82611ad1565b15611ac5576119203330858573ffffffffffffffffffffffffffffffffffffffff166121d3909392919063ffffffff16565b6119c0836003600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122c090919063ffffffff16565b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f41a0e13b292918e235bfe0fd9c277c3988381f8105673088910c47ca994a0318838383604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15b60018081905550505050565b600080600090505b600580549050811015611b68578273ffffffffffffffffffffffffffffffffffffffff1660058281548110611b0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b5b576001915050611b6e565b8080600101915050611ad9565b50600090505b919050565b60026001541415611bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f746f6b656e206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b60006003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7374616b696e672062616c616e63652063616e6e6f742062652030000000000081525060200191505060405180910390fd5b611dca33828573ffffffffffffffffffffffffffffffffffffffff1661211b9092919063ffffffff16565b60006003600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507ff74a79d13d6fdbdf26b2c779e6a24490a43e65d60cc7e064740f8d40b2b5ea2c8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150600180819055505050565b611edc612113565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612023576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806126696026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600033905090565b6121ce8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612348565b505050565b6122ba846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612348565b50505050565b60008082840190508381101561233e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60606123aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124379092919063ffffffff16565b9050600081511115612432578080602001905160208110156123cb57600080fd5b8101908080519060200190929190505050612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061268f602a913960400191505060405180910390fd5b5b505050565b6060612446848460008561244f565b90509392505050565b606061245a85612655565b6124cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061251c57805182526020820191506020810190506020830392506124f9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461257e576040519150601f19603f3d011682016040523d82523d6000602084013e612583565b606091505b5091509150811561259857809250505061264d565b6000815111156125ab5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126125780820151818401526020810190506125f7565b50505050905090810190601f16801561263f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208d195f648fd54ad57c840997d38351946b4ed02327990cf26625208dc78720df64736f6c63430006060033

Deployed ByteCode Sourcemap

24386:4610:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24386:4610:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;24506:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;24506:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28823:170;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28823:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25156:271;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;25156:271:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21041:148;;;:::i;:::-;;26828:168;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26828:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27899:914;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27899:914:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27020:833;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27020:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20399:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24674:90;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24674:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25437:485;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;25437:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26439:379;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;26439:379:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25966:463;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;25966:463:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21344:244;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21344:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;24578:89;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24578:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24506:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28823:170::-;28924:7;28951:15;:21;28967:4;28951:21;;;;;;;;;;;:28;28973:5;28951:28;;;;;;;;;;;;;;;:34;28980:4;28951:34;;;;;;;;;;;;;;;;28944:41;;28823:170;;;;;:::o;25156:271::-;20621:12;:10;:12::i;:::-;20611:22;;:6;;;;;;;;;;;:22;;;20603:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25250:1:::1;25233:19;;:5;:19;;;;25225:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25318:5;25293:30;;:21;25308:5;25293:14;:21::i;:::-;:30;;;25289:131;;;25340:13;25359:5;25340:25;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;25340:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25385:23;25402:5;25385:23;;;;;;;;;;;;;;;;;;;;;;25289:131;25156:271:::0;:::o;21041:148::-;20621:12;:10;:12::i;:::-;20611:22;;:6;;;;;;;;;;;:22;;;20603:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21148:1:::1;21111:40;;21132:6;::::0;::::1;;;;;;;;;21111:40;;;;;;;;;;;;21179:1;21162:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;21041:148::o:0;26828:168::-;26928:7;26955:14;:20;26970:4;26955:20;;;;;;;;;;;:27;26976:5;26955:27;;;;;;;;;;;;;;;:33;26983:4;26955:33;;;;;;;;;;;;;;;;26948:40;;26828:168;;;;;:::o;27899:914::-;23361:1;23967:7;;:19;;23959:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:1;24100:7;:18;;;;28025:1:::1;28007:20;;:6;:20;;;;27999:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28091:1;28073:20;;:6;:20;;;;28065:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28149:6;28139:16;;:6;:16;;;;28131:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28232:16;28251:15;:21;28267:4;28251:21;;;;;;;;;;;:29;28273:6;28251:29;;;;;;;;;;;;;;;:41;28281:10;28251:41;;;;;;;;;;;;;;;;28232:60;;28322:1;28311:8;:12;28303:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28376:16;28395:15;:21;28411:4;28395:21;;;;;;;;;;;:29;28417:6;28395:29;;;;;;;;;;;;;;;:41;28425:10;28395:41;;;;;;;;;;;;;;;;28376:60;;28466:1;28455:8;:12;28447:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28520:49;28548:10;28560:8;28527:6;28520:27;;;;:49;;;;;:::i;:::-;28580;28608:10;28620:8;28587:6;28580:27;;;;:49;;;;;:::i;:::-;28694:1;28650:15;:21;28666:4;28650:21;;;;;;;;;;;:29;28672:6;28650:29;;;;;;;;;;;;;;;:41;28680:10;28650:41;;;;;;;;;;;;;;;:45;;;;28750:1;28706:15;:21;28722:4;28706:21;;;;;;;;;;;:29;28728:6;28706:29;;;;;;;;;;;;;;;:41;28736:10;28706:41;;;;;;;;;;;;;;;:45;;;;28769:36;28784:6;28792;28800:4;28769:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24131:1;;23317::::0;24279:7;:22;;;;27899:914;;;:::o;27020:833::-;23361:1;23967:7;;:19;;23959:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:1;24100:7;:18;;;;27215:1:::1;27204:8;:12;27196:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27270:1;27259:8;:12;27251:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27312:22;27327:6;27312:14;:22::i;:::-;:48;;;;;27338:22;27353:6;27338:14;:22::i;:::-;27312:48;27308:538;;;27377:68;27409:10;27429:4;27436:8;27384:6;27377:31;;;;:68;;;;;;:::i;:::-;27460;27492:10;27512:4;27519:8;27467:6;27460:31;;;;:68;;;;;;:::i;:::-;27589:55;27635:8;27589:15;:21;27605:4;27589:21;;;;;;;;;;;:29;27611:6;27589:29;;;;;;;;;;;;;;;:41;27619:10;27589:41;;;;;;;;;;;;;;;;:45;;:55;;;;:::i;:::-;27545:15;:21;27561:4;27545:21;;;;;;;;;;;:29;27567:6;27545:29;;;;;;;;;;;;;;;:41;27575:10;27545:41;;;;;;;;;;;;;;;:99;;;;27703:55;27749:8;27703:15;:21;27719:4;27703:21;;;;;;;;;;;:29;27725:6;27703:29;;;;;;;;;;;;;;;:41;27733:10;27703:41;;;;;;;;;;;;;;;;:45;;:55;;;;:::i;:::-;27659:15;:21;27675:4;27659:21;;;;;;;;;;;:29;27681:6;27659:29;;;;;;;;;;;;;;;:41;27689:10;27659:41;;;;;;;;;;;;;;;:99;;;;27780:54;27793:8;27803:6;27811:8;27821:6;27829:4;27780:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27308:538;23317:1:::0;24279:7;:22;;;;27020:833;;;;;:::o;20399:79::-;20437:7;20464:6;;;;;;;;;;;20457:13;;20399:79;:::o;24674:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25437:485::-;23361:1;23967:7;;:19;;23959:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:1;24100:7;:18;;;;25594:1:::1;25584:7;:11;25576:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25633:21;25648:5;25633:14;:21::i;:::-;25629:286;;;25673:66;25704:10;25724:4;25731:7;25680:5;25673:30;;;;:66;;;;;;:::i;:::-;25796:52;25840:7;25796:14;:20;25811:4;25796:20;;;;;;;;;;;:27;25817:5;25796:27;;;;;;;;;;;;;;;:39;25824:10;25796:39;;;;;;;;;;;;;;;;:43;;:52;;;;:::i;:::-;25754:14;:20;25769:4;25754:20;;;;;;;;;;;:27;25775:5;25754:27;;;;;;;;;;;;;;;:39;25782:10;25754:39;;;;;;;;;;;;;;;:94;;;;25870:33;25882:7;25891:5;25898:4;25870:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25629:286;23317:1:::0;24279:7;:22;;;;25437:485;;;:::o;26439:379::-;26499:4;26535:26;26564:1;26535:30;;26516:272;26601:13;:20;;;;26580:18;:41;26516:272;;;26724:5;26687:42;;:13;26701:18;26687:33;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;26683:94;;;26757:4;26750:11;;;;;26683:94;26636:20;;;;;;;26516:272;;;;26805:5;26798:12;;26439:379;;;;:::o;25966:463::-;23361:1;23967:7;;:19;;23959:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:1;24100:7;:18;;;;26073:1:::1;26056:19;;:5;:19;;;;26048:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26146:15;26164:14;:20;26179:4;26164:20;;;;;;;;;;;:27;26185:5;26164:27;;;;;;;;;;;;;;;:39;26192:10;26164:39;;;;;;;;;;;;;;;;26146:57;;26232:1;26222:7;:11;26214:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26276:47;26303:10;26315:7;26283:5;26276:26;;;;:47;;;;;:::i;:::-;26376:1;26334:14;:20;26349:4;26334:20;;;;;;;;;;;:27;26355:5;26334:27;;;;;;;;;;;;;;;:39;26362:10;26334:39;;;;;;;;;;;;;;;:43;;;;26395:26;26409:5;26416:4;26395:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;24131:1;23317::::0;24279:7;:22;;;;25966:463;;:::o;21344:244::-;20621:12;:10;:12::i;:::-;20611:22;;:6;;;;;;;;;;;:22;;;20603:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21453:1:::1;21433:22;;:8;:22;;;;21425:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21543:8;21514:38;;21535:6;::::0;::::1;;;;;;;;;21514:38;;;;;;;;;;;;21572:8;21563:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;21344:244:::0;:::o;24578:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18920:106::-;18973:15;19008:10;19001:17;;18920:106;:::o;15177:177::-;15260:86;15280:5;15310:23;;;15335:2;15339:5;15287:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15287:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15287:58:0;15260:19;:86::i;:::-;15177:177;;;:::o;15362:205::-;15463:96;15483:5;15513:27;;;15542:4;15548:2;15552:5;15490:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15490:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15490:68:0;15463:19;:96::i;:::-;15362:205;;;;:::o;3937:181::-;3995:7;4015:9;4031:1;4027;:5;4015:17;;4056:1;4051;:6;;4043:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4109:1;4102:8;;;3937:181;;;;:::o;17482:761::-;17906:23;17932:69;17960:4;17932:69;;;;;;;;;;;;;;;;;17940:5;17932:27;;;;:69;;;;;:::i;:::-;17906:95;;18036:1;18016:10;:17;:21;18012:224;;;18158:10;18147:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18147:30:0;;;;;;;;;;;;;;;;18139:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18012:224;17482:761;;;:::o;12125:196::-;12228:12;12260:53;12283:6;12291:4;12297:1;12300:12;12260:22;:53::i;:::-;12253:60;;12125:196;;;;;:::o;13502:979::-;13632:12;13665:18;13676:6;13665:10;:18::i;:::-;13657:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13791:12;13805:23;13832:6;:11;;13852:8;13863:4;13832:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13832:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;13790:78:0;;;;13883:7;13879:595;;;13914:10;13907:17;;;;;;13879:595;14048:1;14028:10;:17;:21;14024:439;;;14291:10;14285:17;14352:15;14339:10;14335:2;14331:19;14324:44;14239:148;14434:12;14427:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14427:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13502:979;;;;;;;:::o;9207:422::-;9267:4;9475:12;9586:7;9574:20;9566:28;;9620:1;9613:4;:8;9606:15;;;9207:422;;;:::o

Swarm Source

ipfs://8d195f648fd54ad57c840997d38351946b4ed02327990cf26625208dc78720df
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading