Contract 0xed7f93C8FD3B96B53c924F601B3948175D2820D8

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x435ee63e56d2ccf59e8d0c02fa1fd3e5cd997490e4b7c37b0fd7ad2a71a72dfcClaim My Funds204041542022-09-29 0:03:2012 hrs 1 min ago0xb328eb9dbee899aeee858e213cb2ac8236b6f7e1 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.00175536 26.5
0x09535b898a632c7b93c6f5a70df3cfa366a3d2717dcc1f9a367210805f8cc000Stake203514062022-09-27 17:53:091 day 18 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025014675 26.5
0xa8c625f88f233b7e9822b45b36da207bf7f9e75fcdffb39f2032a3579bee77a3Claim My Funds202772292022-09-25 23:18:223 days 12 hrs ago0xb328eb9dbee899aeee858e213cb2ac8236b6f7e1 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0022451796 26.94
0x3c4114d6668412cfdfbb29741cf6ecb88ebd2434ab1f145516e51a4859ff6694Claim My Funds202011102022-09-24 3:09:465 days 8 hrs ago0xb7cb05f0c12b8c23cb9e522121dc42fcb0cf5f88 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002210094105 26.519007749
0x293ba83ff34babe5beaff1ed44ff805b6b86c055a4f782a9870d62e572bb72e7Claim My Funds201697132022-09-23 8:46:596 days 3 hrs ago0x0342bf051724c2697362a3b947e170b4bea63299 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.00175536 26.5
0xcd20f421062060be45f9e79a2fca246cb722bddda03aea59e820f99457e21b23Stake201475142022-09-22 19:39:436 days 16 hrs ago0x88d239fcf4dc6fe988e1818db7a0666619bac674 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002426923 26.5
0x98c5cdae5b89075483b6bdfaa1636456578df75134076687fda61fb4388ec3afStake201239072022-09-22 5:23:487 days 6 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025014675 26.5
0xd8ae9c3a588fb5b400c8ec265a33ffc2bdf28320cb6e961840ba805dd29a8be4Stake200925492022-09-21 6:44:368 days 5 hrs ago0xac9be1372ab5fc54cdf4dd2afe7a678e94706e82 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002456718837 26.825346
0xb3c82fa4569e05d1227d507ef049a2f9bae11fe2e97ceca84e130a4f5afa6c1bStake200925282022-09-21 6:43:428 days 5 hrs ago0xac9be1372ab5fc54cdf4dd2afe7a678e94706e82 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002426923 26.5
0x48f306bd3aaf885b3a6011d8134217d8a1e40c4f309d2f1609f4813a70855d03Stake200660002022-09-20 11:42:039 days 22 mins ago0xa558139e7ed8e2926ca0abe3c84c9506155e7092 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.005589675 27
0x555a1ee041e74513a6be33e3c8c4407299808916eea25bdb0f0f0dad3489b06cStake200657482022-09-20 11:31:319 days 32 mins ago0x6f7bf13e057305d04abd72e637e491cc30569f43 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0029275698 26.94
0x9c9949a0a1f4db0552d54d225fbb6a3eb325f72aebffa4e69a8944abd1af4752Claim My Funds200657162022-09-20 11:30:129 days 34 mins ago0x6f7bf13e057305d04abd72e637e491cc30569f43 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.001740582475 27.425
0x55321245ec7f93dd2a566b3d51877bafc3e5438de34be9a608b0162ff45b9f1eStake200106522022-09-18 20:53:2210 days 15 hrs ago0xa61ac86ad089021fa0be089a5064cb8238e72adb IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0054861625 26.5
0x483dc099d0885e0d215e0a5241f28ceba32d44325e2ceddb638332d9630400a4Stake200090522022-09-18 19:45:1410 days 16 hrs ago0x4764a86acb7d8db876f1cc97850ed00dc0bf0de5 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0024183637 26.41
0x1f1f97f0e0c45f20625a1f805a26b0afa9420cb8f995312478d0df790fafedf9Claim My Funds200086352022-09-18 19:26:3010 days 16 hrs ago0x4764a86acb7d8db876f1cc97850ed00dc0bf0de5 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.001762939178 26.614419968
0x4647a0c5a54d1b50dcc7d761dc81c134d4157c95c7839bb32744537a2bcb2cccClaim My Funds200049902022-09-18 16:46:5010 days 19 hrs ago0xb328eb9dbee899aeee858e213cb2ac8236b6f7e1 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002279536515 27.35225
0x03c60a9185f1152344fed84d31bc733200252b4f5e3cd44c691b50b368c8ecf5Stake199648842022-09-17 11:39:2012 days 25 mins ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025014675 26.5
0xbf71c5d9eb8a306ed43bcb47df900b602735dc9e72999ef1a2483c355ec1c8fcStake199648452022-09-17 11:37:3812 days 26 mins ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.002588782875 27.425
0x4938b0ab1bb23479ef486e0f3f32219f660e8b0bf953fadd8688d25ca4ed5300Claim My Funds199192952022-09-16 2:51:5513 days 9 hrs ago0x1a1e852f970a231d32271c88162e222a09c1650a IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.001802604489 27.213232025
0x88392d652fb8a04cfc13902442943a7dcc2a0b3a613ad897295ef5f43c5fdc86Claim My Funds199012152022-09-15 14:11:1513 days 21 hrs ago0x9dc1eb2f96a03f4054e5fe2e80cf23c75d0fe93f IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.00175536 26.5
0xa43047fdbed1e55e541513e998d5f9a0fe7390c53ae081207aa8203e192141a9Stake198932022022-09-15 8:29:1014 days 3 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025014675 26.5
0xc608df276fe8fded9acb3989d38a1d14c67ae77e9caf81254e2b9c1d1303205dStake198772812022-09-14 21:27:2214 days 14 hrs ago0x88d239fcf4dc6fe988e1818db7a0666619bac674 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.00254332458 26.94
0x2a9f313d7d768690f6240776fefc1f3a05760948c44981e0983b6cb60de4aee8Stake198546942022-09-14 5:25:1915 days 6 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025014675 26.5
0x3465edcad218ea744ec0c8737f5634d4483e3f22040703203ed3ac9034724b40Stake198355802022-09-13 15:50:2015 days 20 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025008315 26.5
0x95ed36eebd757e90bc9f4667f37f92672f0d360ba90f98bb1822cb662c5c19a8Stake197963972022-09-12 12:25:3416 days 23 hrs ago0x6a2166a6a1e2573b772e48f529e0d6299bab2998 IN  0xed7f93c8fd3b96b53c924f601b3948175d2820d80 AVAX0.0025017855 26.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VestingStake

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-05-23
*/

// Sources flattened with hardhat v2.8.4 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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");

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

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.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 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'
        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) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _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
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.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].
 */
abstract 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() {
        _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 making 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 @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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) {
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/VestingStake.sol

pragma solidity 0.8.9;

/// @title A vesting style staking contract with extendable linear decay
/// @author Auroter
/// @notice Allows you to lock tokens in exchange for governance tokens
/// @notice Locks can be extended or deposited into
/// @notice Maximum deposit duration is two years (104 weeks)
/// @dev Simply call stake(...) to create initial lock or extend one that already exists for the user




contract VestingStake is ReentrancyGuard, Ownable {
    using SafeERC20 for IERC20;

    // Info pertaining to staking contract
    address public stakedToken; // An ERC20 Token to be staked (i.e. Axial)
    string public name; // New asset after staking (i.e. sAxial)
    string public symbol; // New asset symbol after staking (i.e. sAXIAL)
    uint256 private interpolationGranularity = 1e18; // Note: ERC20.decimals() is for display and does not affect arithmetic!

    // Info pertaining to users
    address[] private users; // An array containing all user addresses
    mapping(address => LockVe) private locks; // A mapping of each users lock
    mapping(address => uint256) private lockedFunds; // A mapping of each users total deposited funds
    mapping(address => uint256) private deferredFunds; // A mapping of vested funds the user wishes to leave unclaimed

    // Lock structure, only one of these is allowed per user
    // A DELTA can be derived as the degree of interpolation between the start/end block:
    // Delta = (end - now) / end - start
    // This can be used to determine how much of our staked token is unlocked:
    // currentAmountLocked = startingAmountLocked - (delta * startingAmountLocked)
    struct LockVe {
        uint256 startBlockTime;
        uint256 endBlockTime;
        uint256 startingAmountLocked;
        bool initialized;
    }

    /// @notice Constructor
    /// @param _stakedToken Address of the token our users will deposit and lock in exchange for governance tokens
    /// @param _name Desired name of our governance token
    /// @param _symbol Desired symbol of our governance token
    /// @param _governance Address of wallet which will be given adminstrative access to this contract
    constructor(
        address _stakedToken,
        string memory _name,
        string memory _symbol,
        address _governance
    ) {
        transferOwnership(_governance);
        stakedToken = _stakedToken;
        name = _name;
        symbol = _symbol;
    }

    /// @notice Emitted when a user stakes for the first time
    /// @param user Address of the user who staked
    /// @param amount Quantity of tokens staked
    /// @param duration Length in seconds of stake
    event userStaked(address indexed user, uint256 amount, uint256 duration);

    /// @notice Emitted when a user extends and/or deposits into their existing stake
    /// @param user Address of the user who staked
    /// @param amount New total quantity of tokens in stake
    /// @param duration New total length of stake
    event userExtended(address indexed user, uint256 amount, uint256 duration);

    /// @notice Emitted when a user claims outstanding vested balance
    /// @param user Address of the user who claimed
    /// @param amount Quantity of tokens claimed
    event userClaimed(address indexed user, uint256 amount);

    /// @notice Calculate the number of vested tokens a user has not claimed
    /// @param _userAddr Address of any user to view the number of vested tokens they have not yet claimed
    /// @return Quantity of tokens which have vested but are unclaimed by the specified user
    function getUnclaimed(address _userAddr) public view returns (uint256) {
        uint256 totalFundsDeposited = lockedFunds[_userAddr] + deferredFunds[_userAddr];
        uint256 currentBalance = getBalance(_userAddr);
        uint256 fundsToClaim = totalFundsDeposited - currentBalance;
        return fundsToClaim;
    }

    /// @notice Calculate the number of tokens a user still has locked
    /// @param _userAddr Address of any user to view the number of tokens they still have locked
    /// @return Quantity of tokens the user has locked
    function getBalance(address _userAddr) public view returns (uint256) {
        LockVe memory usersLock = locks[_userAddr];

        uint256 currentTimestamp = block.timestamp;
        uint256 balance = 0;

        if (usersLock.endBlockTime > currentTimestamp) {
            uint256 granularDelta = ((usersLock.endBlockTime - currentTimestamp) * interpolationGranularity) / (usersLock.endBlockTime - usersLock.startBlockTime);
            balance += (usersLock.startingAmountLocked * granularDelta) / interpolationGranularity;
        }
        return balance;
    }

    /// @notice This is an overload for getPower so that users can see the 'token' in their wallets
    function balanceOf(address _account) external view returns (uint256) {
        return getPower(_account);
    }

    /// @notice Calculate the number of governance tokens currently allocated to a user by this contract
    /// @param _userAddr Address of any user to view the number of governance tokens currently awarded to them
    /// @return Quantity of governance tokens allocated to the user
    function getPower(address _userAddr) public view returns (uint256) {
        LockVe memory usersLock = locks[_userAddr];

        uint256 currentTimestamp = block.timestamp;
        uint256 power = 0;

        if (usersLock.endBlockTime > currentTimestamp) {
            // let delta = elapsed / totalLocktinme
            // let startingPower = duration / 2 years
            // let power = delta * startingPower
            uint256 startingAmountAwarded = ((usersLock.endBlockTime - usersLock.startBlockTime) * usersLock.startingAmountLocked) / 104 weeks;
            uint256 granularDelta = ((usersLock.endBlockTime - currentTimestamp) * interpolationGranularity) / (usersLock.endBlockTime - usersLock.startBlockTime);
            power += (startingAmountAwarded * granularDelta) / interpolationGranularity;
        }
        return power;
    }

    /// @notice Retrieve a list of all users who have ever staked
    /// @return An array of addresses of all users who have ever staked
    function getAllUsers() public view returns (address[] memory) {
        return users;
    }

    /// @notice Check if a user has ever created a Lock in this contract
    /// @param _userAddr Address of any user to check
    /// @dev This may be used by the web application to determine if the UI says "Create Lock" or "Add to Lock"
    /// @return True if the user has ever created a lock
    function isUserLocked(address _userAddr) public view returns (bool) {
        LockVe memory usersLock = locks[_userAddr];
        return usersLock.initialized;
    }

    /// @notice View a users Lock
    /// @param _userAddr Address of any user to view all Locks they have ever created
    /// @dev This may be used by the web application for graphical illustration purposes
    /// @return Users Lock in the format of the LockVe struct
    function getLock(address _userAddr) public view returns (LockVe memory) {
        return locks[_userAddr];
    }

    /// @notice Allow owner to reclaim tokens not matching the deposit token
    /// @notice Some users may have accidentally sent these to the contract
    /// @param _token Address of the non-deposit token
    /// @dev Always ensure the _token is legitimate before calling this
    /// @dev A bad token can mimic safetransfer or balanceof with a nocive function
    function ownerRemoveNonDepositToken(address _token) public nonReentrant onlyOwner {
        require(_token != stakedToken, "!invalid");
        uint256 balanceOfToken = IERC20(_token).balanceOf(address(this));
        require(balanceOfToken > 0, "!balance");
        IERC20(_token).safeTransfer(owner(), balanceOfToken);
    }

    /// @notice Transfers vested tokens back to their original owner
    /// @notice It is up to the user to invoke this manually
    /// @dev This will need to be called by the web application via a button or some other means
    function claimMyFunds() external nonReentrant {
        address userAddr = msg.sender;
        uint256 totalFundsDeposited = lockedFunds[userAddr] + deferredFunds[userAddr];
        uint256 currentBalance = getBalance(userAddr);
        uint256 fundsToClaim = totalFundsDeposited - currentBalance;

        IERC20(stakedToken).safeTransfer(userAddr, fundsToClaim);

        lockedFunds[userAddr] = currentBalance;
        deferredFunds[userAddr] = 0;

        emit userClaimed(userAddr, fundsToClaim);
    }

    /// @notice Create/extend the duration of the invoking users lock and/or deposit additional tokens into it
    /// @param _duration Number of seconds the invoking user will extend their lock for
    /// @param _amount Number of additional tokens to deposit into the lock
    /// @param _deferUnclaimed If True, leaves any unclaimed vested balance in the staking contract
    function stake(uint256 _duration, uint256 _amount, bool _deferUnclaimed) public nonReentrant {
        require(_duration > 0 || _amount > 0, "null");

        // Retrieve lock the user may have already created
        address userAddr = msg.sender;
        LockVe memory usersLock = locks[userAddr];

        uint256 oldDurationRemaining = 0;

        // Keep track of new user or pre-existing lockout period
        if (!usersLock.initialized) {
            users.push(userAddr);
        } else if (block.timestamp < usersLock.endBlockTime) {
            oldDurationRemaining = usersLock.endBlockTime - block.timestamp;
        }

        require (oldDurationRemaining + _duration <= 104 weeks, ">2 years");

        // Receive the users tokens
        require(IERC20(stakedToken).balanceOf(userAddr) >= _amount, "!balance");
        require(IERC20(stakedToken).allowance(userAddr, address(this)) >= _amount, "!approved");
        IERC20(stakedToken).safeTransferFrom(userAddr,  address(this), _amount);

        // Account for balance / unclaimed funds
        uint256 totalFundsDeposited = lockedFunds[userAddr];
        uint256 oldBalance = getBalance(userAddr);
        uint256 fundsUnclaimed = totalFundsDeposited - oldBalance;
        if (!_deferUnclaimed) {
            fundsUnclaimed += deferredFunds[userAddr];
            IERC20(stakedToken).safeTransfer(userAddr, fundsUnclaimed);
            deferredFunds[userAddr] = 0;
            emit userClaimed(userAddr, fundsUnclaimed);
        } else {
            deferredFunds[userAddr] += fundsUnclaimed;
        }
        uint256 newTotalDeposit = oldBalance + _amount;

        // Update balance
        lockedFunds[userAddr] = newTotalDeposit;

        // Fill out updated LockVe struct
        LockVe memory newLock;
        newLock.startBlockTime = block.timestamp;
        newLock.endBlockTime = newLock.startBlockTime + _duration + oldDurationRemaining;
        newLock.startingAmountLocked = newTotalDeposit;
        newLock.initialized = true;
        locks[userAddr] = newLock;

        // Events
        if (oldDurationRemaining == 0) {
            emit userStaked(userAddr, newTotalDeposit, newLock.endBlockTime - newLock.startBlockTime);
        } else {
            emit userExtended(userAddr, newTotalDeposit, newLock.endBlockTime - newLock.startBlockTime);
        }
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakedToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"userClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"userExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"userStaked","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMyFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllUsers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getLock","outputs":[{"components":[{"internalType":"uint256","name":"startBlockTime","type":"uint256"},{"internalType":"uint256","name":"endBlockTime","type":"uint256"},{"internalType":"uint256","name":"startingAmountLocked","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"}],"internalType":"struct VestingStake.LockVe","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"isUserLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ownerRemoveNonDepositToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_deferUnclaimed","type":"bool"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a76400006005553480156200001d57600080fd5b506040516200198e3803806200198e833981016040819052620000409162000363565b60016000556200005033620000ac565b6200005b81620000fe565b600280546001600160a01b0319166001600160a01b03861617905582516200008b906003906020860190620001d3565b508151620000a1906004906020850190620001d3565b505050505062000430565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001546001600160a01b031633146200015e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000155565b620001d081620000ac565b50565b828054620001e190620003f3565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b80516001600160a01b03811681146200029157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002be57600080fd5b81516001600160401b0380821115620002db57620002db62000296565b604051601f8301601f19908116603f0116810190828211818310171562000306576200030662000296565b816040528381526020925086838588010111156200032357600080fd5b600091505b8382101562000347578582018301518183018401529082019062000328565b83821115620003595760008385830101525b9695505050505050565b600080600080608085870312156200037a57600080fd5b620003858562000279565b60208601519094506001600160401b0380821115620003a357600080fd5b620003b188838901620002ac565b94506040870151915080821115620003c857600080fd5b50620003d787828801620002ac565b925050620003e86060860162000279565b905092959194509250565b600181811c908216806200040857607f821691505b602082108114156200042a57634e487b7160e01b600052602260045260246000fd5b50919050565b61154e80620004406000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063e2842d7911610066578063e2842d7914610295578063e313a113146102aa578063f2fde38b146102b2578063f8b2cb4f146102c557600080fd5b8063715018a61461024d5780638da5cb5b1461025557806395d89b411461027a578063cc7a262e1461028257600080fd5b8063561b2463116100d3578063561b2463146101cc5780635dd9147c146101df5780636b9db4e6146101f257806370a082311461023a57600080fd5b806306fdde0314610105578063204552b01461012357806330d00505146101385780633ab1ced1146101ab575b600080fd5b61010d6102d8565b60405161011a91906112a9565b60405180910390f35b6101366101313660046112dc565b610366565b005b61019b6101463660046112dc565b6001600160a01b031660009081526007602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606090910181905290565b604051901515815260200161011a565b6101be6101b93660046112dc565b6104f0565b60405190815260200161011a565b6101366101da366004611313565b610543565b6101be6101ed3660046112dc565b610ac5565b6102056102003660046112dc565b610bc1565b60405161011a919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b6101be6102483660046112dc565b610c41565b610136610c52565b6001546001600160a01b03165b6040516001600160a01b03909116815260200161011a565b61010d610c88565b600254610262906001600160a01b031681565b61029d610c95565b60405161011a919061134c565b610136610cf7565b6101366102c03660046112dc565b610de0565b6101be6102d33660046112dc565b610e7b565b600380546102e590611399565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611399565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b505050505081565b600260005414156103925760405162461bcd60e51b8152600401610389906113d4565b60405180910390fd5b60026000556001546001600160a01b031633146103c15760405162461bcd60e51b81526004016103899061140b565b6002546001600160a01b038281169116141561040a5760405162461bcd60e51b8152602060048201526008602482015267085a5b9d985b1a5960c21b6044820152606401610389565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561044c57600080fd5b505afa158015610460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104849190611440565b9050600081116104c15760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610389565b6104e76104d66001546001600160a01b031690565b6001600160a01b0384169083610f40565b50506001600055565b6001600160a01b0381166000908152600960209081526040808320546008909252822054829161051f9161146f565b9050600061052c84610e7b565b9050600061053a8284611487565b95945050505050565b600260005414156105665760405162461bcd60e51b8152600401610389906113d4565b6002600055821515806105795750600082115b6105ae5760405162461bcd60e51b8152600401610389906020808252600490820152631b9d5b1b60e21b604082015260600190565b3360008181526007602090815260408083208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615156060820181905290919061064b57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b03851617905561066a565b816020015142101561066a574282602001516106679190611487565b90505b6303bfc400610679878361146f565b11156106b25760405162461bcd60e51b81526020600482015260086024820152673e3220796561727360c01b6044820152606401610389565b6002546040516370a0823160e01b81526001600160a01b038581166004830152879216906370a082319060240160206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190611440565b10156107685760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610389565b600254604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301528792169063dd62ed3e9060440160206040518083038186803b1580156107b357600080fd5b505afa1580156107c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb9190611440565b10156108255760405162461bcd60e51b815260206004820152600960248201526808585c1c1c9bdd995960ba1b6044820152606401610389565b60025461083d906001600160a01b0316843088610fa8565b6001600160a01b0383166000908152600860205260408120549061086085610e7b565b9050600061086e8284611487565b90508661090c576001600160a01b038616600090815260096020526040902054610898908261146f565b6002549091506108b2906001600160a01b03168783610f40565b6001600160a01b03861660008181526009602052604080822091909155517ffcbf8b246b3ac6aa7e8002686cf3d119427dd6d829425af7accd635930643edb906108ff9084815260200190565b60405180910390a261093a565b6001600160a01b0386166000908152600960205260408120805483929061093490849061146f565b90915550505b6000610946898461146f565b6001600160a01b038816600090815260086020908152604080832084905580516080810182529182018390528101829052606081019190915242808252919250908690610994908d9061146f565b61099e919061146f565b602082810191825260408084018581526001606086018181526001600160a01b038e1660009081526007909552929093208551815593519284019290925590516002830155516003909101805460ff191691151591909117905585610a5a57876001600160a01b03167f1835b101ea7447f2acc185724289ae4febae3bfcd360c35fe5e92f998d158e648383600001518460200151610a3d9190611487565b6040805192835260208301919091520160405180910390a2610ab3565b876001600160a01b03167f1283a4a0284d28123a496b22cd97a140ab9f481d8b8b2088e4d2b95fd6a2412e8383600001518460200151610a9a9190611487565b6040805192835260208301919091520160405180910390a25b50506001600055505050505050505050565b6001600160a01b038116600090815260076020908152604080832081516080810183528154815260018201549381018490526002820154928101929092526003015460ff16151560608201529042908390821015610bb95760006303bfc400846040015185600001518660200151610b3d9190611487565b610b47919061149e565b610b5191906114bd565b9050600084600001518560200151610b699190611487565b600554858760200151610b7c9190611487565b610b86919061149e565b610b9091906114bd565b600554909150610ba0828461149e565b610baa91906114bd565b610bb4908461146f565b925050505b949350505050565b610bee60405180608001604052806000815260200160008152602001600081526020016000151581525090565b506001600160a01b031660009081526007602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606082015290565b6000610c4c82610ac5565b92915050565b6001546001600160a01b03163314610c7c5760405162461bcd60e51b81526004016103899061140b565b610c866000610fe6565b565b600480546102e590611399565b60606006805480602002602001604051908101604052809291908181526020018280548015610ced57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ccf575b5050505050905090565b60026000541415610d1a5760405162461bcd60e51b8152600401610389906113d4565b6002600090815533808252600960209081526040808420546008909252832054919291610d47919061146f565b90506000610d5483610e7b565b90506000610d628284611487565b600254909150610d7c906001600160a01b03168583610f40565b6001600160a01b0384166000818152600860209081526040808320869055600982528083209290925590518381527ffcbf8b246b3ac6aa7e8002686cf3d119427dd6d829425af7accd635930643edb910160405180910390a2505060016000555050565b6001546001600160a01b03163314610e0a5760405162461bcd60e51b81526004016103899061140b565b6001600160a01b038116610e6f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610389565b610e7881610fe6565b50565b6001600160a01b038116600090815260076020908152604080832081516080810183528154815260018201549381018490526002820154928101929092526003015460ff16151560608201529042908390821015610bb95782516020840151600091610ee691611487565b600554848660200151610ef99190611487565b610f03919061149e565b610f0d91906114bd565b9050600554818560400151610f22919061149e565b610f2c91906114bd565b610f36908361146f565b9695505050505050565b6040516001600160a01b038316602482015260448101829052610fa390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611038565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610fe09085906323b872dd60e01b90608401610f6c565b50505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061108d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661110a9092919063ffffffff16565b805190915015610fa357808060200190518101906110ab91906114df565b610fa35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610389565b60606111198484600085611123565b90505b9392505050565b6060824710156111845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610389565b6001600160a01b0385163b6111db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610389565b600080866001600160a01b031685876040516111f791906114fc565b60006040518083038185875af1925050503d8060008114611234576040519150601f19603f3d011682016040523d82523d6000602084013e611239565b606091505b5091509150610bb48282866060831561125357508161111c565b8251156112635782518084602001fd5b8160405162461bcd60e51b815260040161038991906112a9565b60005b83811015611298578181015183820152602001611280565b83811115610fe05750506000910152565b60208152600082518060208401526112c881604085016020870161127d565b601f01601f19169190910160400192915050565b6000602082840312156112ee57600080fd5b81356001600160a01b038116811461111c57600080fd5b8015158114610e7857600080fd5b60008060006060848603121561132857600080fd5b8335925060208401359150604084013561134181611305565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561138d5783516001600160a01b031683529284019291840191600101611368565b50909695505050505050565b600181811c908216806113ad57607f821691505b602082108114156113ce57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561145257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561148257611482611459565b500190565b60008282101561149957611499611459565b500390565b60008160001904831182151516156114b8576114b8611459565b500290565b6000826114da57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156114f157600080fd5b815161111c81611305565b6000825161150e81846020870161127d565b919091019291505056fea2646970667358221220e8820236781dacaeea96cda8d11063a07cdff20f84ec367e71df5fd1c9112b8a64736f6c63430008090033000000000000000000000000cf8419a615c57511807236751c0af38db4ba3351000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809000000000000000000000000000000000000000000000000000000000000000673417869616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000673415849414c0000000000000000000000000000000000000000000000000000

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

000000000000000000000000cf8419a615c57511807236751c0af38db4ba3351000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809000000000000000000000000000000000000000000000000000000000000000673417869616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000673415849414c0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _stakedToken (address): 0xcf8419a615c57511807236751c0af38db4ba3351
Arg [1] : _name (string): sAxial
Arg [2] : _symbol (string): sAXIAL
Arg [3] : _governance (address): 0x4980ad7ccb304f7d3c5053aa1131ed1edaf48809

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf8419a615c57511807236751c0af38db4ba3351
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 73417869616c0000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 73415849414c0000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

22145:11102:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22358:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29370:331;;;;;;:::i;:::-;;:::i;:::-;;28428:168;;;;;;:::i;:::-;-1:-1:-1;;;;;28533:16:0;28490:4;28533:16;;;:5;:16;;;;;;;;;28507:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28428:168;;;;1121:14:1;;1114:22;1096:41;;1084:2;1069:18;28428:168:0;956:187:1;25362:326:0;;;;;;:::i;:::-;;:::i;:::-;;;1294:25:1;;;1282:2;1267:18;25362:326:0;1148:177:1;30845:2399:0;;;;;;:::i;:::-;;:::i;27016:863::-;;;;;;:::i;:::-;;:::i;28879:114::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;2046:13:1;;2028:32;;2116:4;2104:17;;;2098:24;2076:20;;;2069:54;2179:4;2167:17;;;2161:24;2139:20;;;2132:54;2256:4;2244:17;;;2238:24;2231:32;2224:40;2202:20;;;2195:70;;;;2015:3;2000:19;;1835:436;26608:113:0;;;;;;:::i;:::-;;:::i;20867:103::-;;;:::i;20216:87::-;20289:6;;-1:-1:-1;;;;;20289:6:0;20216:87;;;-1:-1:-1;;;;;2440:32:1;;;2422:51;;2410:2;2395:18;20216:87:0;2276:203:1;22424:20:0;;;:::i;22281:26::-;;;;;-1:-1:-1;;;;;22281:26:0;;;28027:93;;;:::i;:::-;;;;;;;:::i;29939:519::-;;;:::i;21125:201::-;;;;;;:::i;:::-;;:::i;25922:577::-;;;;;;:::i;:::-;;:::i;22358:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29370:331::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;;;;;;;;;17304:1;18035:7;:18;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23:::1;20428:68;;;;-1:-1:-1::0;;;20428:68:0::1;;;;;;;:::i;:::-;29481:11:::2;::::0;-1:-1:-1;;;;;29471:21:0;;::::2;29481:11:::0;::::2;29471:21;;29463:42;;;::::0;-1:-1:-1;;;29463:42:0;;4455:2:1;29463:42:0::2;::::0;::::2;4437:21:1::0;4494:1;4474:18;;;4467:29;-1:-1:-1;;;4512:18:1;;;4505:38;4560:18;;29463:42:0::2;4253:331:1::0;29463:42:0::2;29541:39;::::0;-1:-1:-1;;;29541:39:0;;29574:4:::2;29541:39;::::0;::::2;2422:51:1::0;29516:22:0::2;::::0;-1:-1:-1;;;;;29541:24:0;::::2;::::0;::::2;::::0;2395:18:1;;29541:39:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29516:64;;29616:1;29599:14;:18;29591:39;;;::::0;-1:-1:-1;;;29591:39:0;;4980:2:1;29591:39:0::2;::::0;::::2;4962:21:1::0;5019:1;4999:18;;;4992:29;-1:-1:-1;;;5037:18:1;;;5030:38;5085:18;;29591:39:0::2;4778:331:1::0;29591:39:0::2;29641:52;29669:7;20289:6:::0;;-1:-1:-1;;;;;20289:6:0;;20216:87;29669:7:::2;-1:-1:-1::0;;;;;29641:27:0;::::2;::::0;29678:14;29641:27:::2;:52::i;:::-;-1:-1:-1::0;;17260:1:0;18214:7;:22;29370:331::o;25362:326::-;-1:-1:-1;;;;;25499:24:0;;25424:7;25499:24;;;:13;:24;;;;;;;;;25474:11;:22;;;;;;25424:7;;25474:49;;;:::i;:::-;25444:79;;25534:22;25559:21;25570:9;25559:10;:21::i;:::-;25534:46;-1:-1:-1;25591:20:0;25614:36;25534:46;25614:19;:36;:::i;:::-;25591:59;25362:326;-1:-1:-1;;;;;25362:326:0:o;30845:2399::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;17304:1;18035:7;:18;30957:13;;;;:28:::1;;;30984:1;30974:7;:11;30957:28;30949:45;;;;-1:-1:-1::0;;;30949:45:0::1;;;;;;5711:2:1::0;5693:21;;;5750:1;5730:18;;;5723:29;-1:-1:-1;;;5783:2:1;5768:18;;5761:34;5827:2;5812:18;;5509:327;30949:45:0::1;31086:10;31067:16;31133:15:::0;;;:5:::1;:15;::::0;;;;;;;31107:41;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;;::::0;::::1;;;;::::0;;;;;;;;31067:16;31272:217:::1;;31315:5;:20:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;31315:20:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;31315:20:0::1;-1:-1:-1::0;;;;;31315:20:0;::::1;;::::0;;31272:217:::1;;;31375:9;:22;;;31357:15;:40;31353:136;;;31462:15;31437:9;:22;;;:40;;;;:::i;:::-;31414:63;;31353:136;31546:9;31510:32;31533:9:::0;31510:20;:32:::1;:::i;:::-;:45;;31501:67;;;::::0;-1:-1:-1;;;31501:67:0;;6043:2:1;31501:67:0::1;::::0;::::1;6025:21:1::0;6082:1;6062:18;;;6055:29;-1:-1:-1;;;6100:18:1;;;6093:38;6148:18;;31501:67:0::1;5841:331:1::0;31501:67:0::1;31633:11;::::0;31626:39:::1;::::0;-1:-1:-1;;;31626:39:0;;-1:-1:-1;;;;;2440:32:1;;;31626:39:0::1;::::0;::::1;2422:51:1::0;31669:7:0;;31633:11:::1;::::0;31626:29:::1;::::0;2395:18:1;;31626:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;31618:71;;;::::0;-1:-1:-1;;;31618:71:0;;4980:2:1;31618:71:0::1;::::0;::::1;4962:21:1::0;5019:1;4999:18;;;4992:29;-1:-1:-1;;;5037:18:1;;;5030:38;5085:18;;31618:71:0::1;4778:331:1::0;31618:71:0::1;31715:11;::::0;31708:54:::1;::::0;-1:-1:-1;;;31708:54:0;;-1:-1:-1;;;;;6407:15:1;;;31708:54:0::1;::::0;::::1;6389:34:1::0;31756:4:0::1;6439:18:1::0;;;6432:43;31766:7:0;;31715:11:::1;::::0;31708:29:::1;::::0;6324:18:1;;31708:54:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;31700:87;;;::::0;-1:-1:-1;;;31700:87:0;;6688:2:1;31700:87:0::1;::::0;::::1;6670:21:1::0;6727:1;6707:18;;;6700:29;-1:-1:-1;;;6745:18:1;;;6738:39;6794:18;;31700:87:0::1;6486:332:1::0;31700:87:0::1;31805:11;::::0;31798:71:::1;::::0;-1:-1:-1;;;;;31805:11:0::1;31835:8:::0;31854:4:::1;31861:7:::0;31798:36:::1;:71::i;:::-;-1:-1:-1::0;;;;;31962:21:0;::::1;31932:27;31962:21:::0;;;:11:::1;:21;::::0;;;;;;32015:20:::1;31974:8:::0;32015:10:::1;:20::i;:::-;31994:41:::0;-1:-1:-1;32046:22:0::1;32071:32;31994:41:::0;32071:19;:32:::1;:::i;:::-;32046:57;;32119:15;32114:336;;-1:-1:-1::0;;;;;32169:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;32151:41:::1;::::0;;::::1;:::i;:::-;32214:11;::::0;32151:41;;-1:-1:-1;32207:58:0::1;::::0;-1:-1:-1;;;;;32214:11:0::1;32240:8:::0;32151:41;32207:32:::1;:58::i;:::-;-1:-1:-1::0;;;;;32280:23:0;::::1;32306:1;32280:23:::0;;;:13:::1;:23;::::0;;;;;:27;;;;32327:37;::::1;::::0;::::1;::::0;32349:14;1294:25:1;;1282:2;1267:18;;1148:177;32327:37:0::1;;;;;;;;32114:336;;;-1:-1:-1::0;;;;;32397:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;:41;;32424:14;;32397:23;:41:::1;::::0;32424:14;;32397:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;32114:336:0::1;32460:23;32486:20;32499:7:::0;32486:10;:20:::1;:::i;:::-;-1:-1:-1::0;;;;;32546:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:39;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;32698:15:0::1;32673:40:::0;;;32546:39;;-1:-1:-1;;32784:20:0;;32747:34:::1;::::0;32772:9;;32747:34:::1;:::i;:::-;:57;;;;:::i;:::-;32724:20;::::0;;::::1;:80:::0;;;32815:28:::1;::::0;;::::1;:46:::0;;;32894:4:::1;32872:19;::::0;::::1;:26:::0;;;-1:-1:-1;;;;;32909:15:0;::::1;-1:-1:-1::0;32909:15:0;;;:5:::1;:15:::0;;;;;;;:25;;;;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;32909:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32970;32966:271:::1;;33028:8;-1:-1:-1::0;;;;;33017:84:0::1;;33038:15;33078:7;:22;;;33055:7;:20;;;:45;;;;:::i;:::-;33017:84;::::0;;6997:25:1;;;7053:2;7038:18;;7031:34;;;;6970:18;33017:84:0::1;;;;;;;32966:271;;;33152:8;-1:-1:-1::0;;;;;33139:86:0::1;;33162:15;33202:7;:22;;;33179:7;:20;;;:45;;;;:::i;:::-;33139:86;::::0;;6997:25:1;;;7053:2;7038:18;;7031:34;;;;6970:18;33139:86:0::1;;;;;;;32966:271;-1:-1:-1::0;;17260:1:0;18214:7;:22;-1:-1:-1;;;;;;;;;30845:2399:0:o;27016:863::-;-1:-1:-1;;;;;27120:16:0;;27074:7;27120:16;;;:5;:16;;;;;;;;27094:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27176:15;;27074:7;;27236:41;-1:-1:-1;27232:617:0;;;27452:29;27573:9;27539;:30;;;27511:9;:24;;;27486:9;:22;;;:49;;;;:::i;:::-;27485:84;;;;:::i;:::-;27484:98;;;;:::i;:::-;27452:130;;27597:21;27722:9;:24;;;27697:9;:22;;;:49;;;;:::i;:::-;27668:24;;27648:16;27623:9;:22;;;:41;;;;:::i;:::-;27622:70;;;;:::i;:::-;27621:126;;;;:::i;:::-;27813:24;;27597:150;;-1:-1:-1;27772:37:0;27597:150;27772:21;:37;:::i;:::-;27771:66;;;;:::i;:::-;27762:75;;;;:::i;:::-;;;27279:570;;27232:617;27866:5;27016:863;-1:-1:-1;;;;27016:863:0:o;28879:114::-;28936:13;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28936:13:0;-1:-1:-1;;;;;;28969:16:0;;;;;:5;:16;;;;;;;;;28962:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28879:114::o;26608:113::-;26668:7;26695:18;26704:8;26695;:18::i;:::-;26688:25;26608:113;-1:-1:-1;;26608:113:0:o;20867:103::-;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23;20428:68;;;;-1:-1:-1;;;20428:68:0;;;;;;;:::i;:::-;20932:30:::1;20959:1;20932:18;:30::i;:::-;20867:103::o:0;22424:20::-;;;;;;;:::i;28027:93::-;28071:16;28107:5;28100:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28100:12:0;;;;;;;;;;;;;;;;;;;;;;;28027:93;:::o;29939:519::-;17304:1;17902:7;;:19;;17894:63;;;;-1:-1:-1;;;17894:63:0;;;;;;;:::i;:::-;17304:1;18035:7;:18;;;30015:10:::1;30090:23:::0;;;:13:::1;:23;::::0;;;;;;;;30066:11:::1;:21:::0;;;;;;30015:10;;18035:7;30066:47:::1;::::0;30090:23;30066:47:::1;:::i;:::-;30036:77;;30124:22;30149:20;30160:8;30149:10;:20::i;:::-;30124:45:::0;-1:-1:-1;30180:20:0::1;30203:36;30124:45:::0;30203:19;:36:::1;:::i;:::-;30259:11;::::0;30180:59;;-1:-1:-1;30252:56:0::1;::::0;-1:-1:-1;;;;;30259:11:0::1;30285:8:::0;30180:59;30252:32:::1;:56::i;:::-;-1:-1:-1::0;;;;;30321:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:38;;;30370:13:::1;:23:::0;;;;;:27;;;;30415:35;;1294:25:1;;;30415:35:0::1;::::0;1267:18:1;30415:35:0::1;;;;;;;-1:-1:-1::0;;17260:1:0;18214:7;:22;-1:-1:-1;;29939:519:0:o;21125:201::-;20289:6;;-1:-1:-1;;;;;20289:6:0;19016:10;20436:23;20428:68;;;;-1:-1:-1;;;20428:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21214:22:0;::::1;21206:73;;;::::0;-1:-1:-1;;;21206:73:0;;7673:2:1;21206:73:0::1;::::0;::::1;7655:21:1::0;7712:2;7692:18;;;7685:30;7751:34;7731:18;;;7724:62;-1:-1:-1;;;7802:18:1;;;7795:36;7848:19;;21206:73:0::1;7471:402:1::0;21206:73:0::1;21290:28;21309:8;21290:18;:28::i;:::-;21125:201:::0;:::o;25922:577::-;-1:-1:-1;;;;;26028:16:0;;25982:7;26028:16;;;:5;:16;;;;;;;;26002:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26084:15;;25982:7;;26146:41;-1:-1:-1;26142:325:0;;;26329:24;;26304:22;;;;26204:21;;26304:49;;;:::i;:::-;26275:24;;26255:16;26230:9;:22;;;:41;;;;:::i;:::-;26229:70;;;;:::i;:::-;26228:126;;;;:::i;:::-;26204:150;;26431:24;;26414:13;26381:9;:30;;;:46;;;;:::i;:::-;26380:75;;;;:::i;:::-;26369:86;;;;:::i;:::-;;26484:7;-1:-1:-1;;;;;;25922:577:0:o;12190:211::-;12334:58;;-1:-1:-1;;;;;8070:32:1;;12334:58:0;;;8052:51:1;8119:18;;;8112:34;;;12307:86:0;;12327:5;;-1:-1:-1;;;12357:23:0;8025:18:1;;12334:58:0;;;;-1:-1:-1;;12334:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12334:58:0;-1:-1:-1;;;;;;12334:58:0;;;;;;;;;;12307:19;:86::i;:::-;12190:211;;;:::o;12409:248::-;12580:68;;-1:-1:-1;;;;;8415:15:1;;;12580:68:0;;;8397:34:1;8467:15;;8447:18;;;8440:43;8499:18;;;8492:34;;;12553:96:0;;12573:5;;-1:-1:-1;;;12603:27:0;8332:18:1;;12580:68:0;8157:375:1;12553:96:0;12409:248;;;;:::o;21486:191::-;21579:6;;;-1:-1:-1;;;;;21596:17:0;;;-1:-1:-1;;;;;;21596:17:0;;;;;;;21629:40;;21579:6;;;21596:17;21579:6;;21629:40;;21560:16;;21629:40;21549:128;21486:191;:::o;14763:716::-;15187:23;15213:69;15241:4;15213:69;;;;;;;;;;;;;;;;;15221:5;-1:-1:-1;;;;;15213:27:0;;;:69;;;;;:::i;:::-;15297:17;;15187:95;;-1:-1:-1;15297:21:0;15293:179;;15394:10;15383:30;;;;;;;;;;;;:::i;:::-;15375:85;;;;-1:-1:-1;;;15375:85:0;;8989:2:1;15375:85:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;-1:-1:-1;;;9118:18:1;;;9111:40;9168:19;;15375:85:0;8787:406:1;6964:229:0;7101:12;7133:52;7155:6;7163:4;7169:1;7172:12;7133:21;:52::i;:::-;7126:59;;6964:229;;;;;;:::o;8084:510::-;8254:12;8312:5;8287:21;:30;;8279:81;;;;-1:-1:-1;;;8279:81:0;;9400:2:1;8279:81:0;;;9382:21:1;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:36;9575:19;;8279:81:0;9198:402:1;8279:81:0;-1:-1:-1;;;;;4514:19:0;;;8371:60;;;;-1:-1:-1;;;8371:60:0;;9807:2:1;8371:60:0;;;9789:21:1;9846:2;9826:18;;;9819:30;9885:31;9865:18;;;9858:59;9934:18;;8371:60:0;9605:353:1;8371:60:0;8445:12;8459:23;8486:6;-1:-1:-1;;;;;8486:11:0;8505:5;8512:4;8486:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8444:73;;;;8535:51;8552:7;8561:10;8573:12;10920;10949:7;10945:530;;;-1:-1:-1;10980:10:0;10973:17;;10945:530;11094:17;;:21;11090:374;;11292:10;11286:17;11353:15;11340:10;11336:2;11332:19;11325:44;11090:374;11435:12;11428:20;;-1:-1:-1;;;11428:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:286::-;724:6;777:2;765:9;756:7;752:23;748:32;745:52;;;793:1;790;783:12;745:52;819:23;;-1:-1:-1;;;;;871:31:1;;861:42;;851:70;;917:1;914;907:12;1330:118;1416:5;1409:13;1402:21;1395:5;1392:32;1382:60;;1438:1;1435;1428:12;1453:377;1527:6;1535;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1648:9;1635:23;1625:33;;1705:2;1694:9;1690:18;1677:32;1667:42;;1759:2;1748:9;1744:18;1731:32;1772:28;1794:5;1772:28;:::i;:::-;1819:5;1809:15;;;1453:377;;;;;:::o;2484:658::-;2655:2;2707:21;;;2777:13;;2680:18;;;2799:22;;;2626:4;;2655:2;2878:15;;;;2852:2;2837:18;;;2626:4;2921:195;2935:6;2932:1;2929:13;2921:195;;;3000:13;;-1:-1:-1;;;;;2996:39:1;2984:52;;3091:15;;;;3056:12;;;;3032:1;2950:9;2921:195;;;-1:-1:-1;3133:3:1;;2484:658;-1:-1:-1;;;;;;2484:658:1:o;3147:380::-;3226:1;3222:12;;;;3269;;;3290:61;;3344:4;3336:6;3332:17;3322:27;;3290:61;3397:2;3389:6;3386:14;3366:18;3363:38;3360:161;;;3443:10;3438:3;3434:20;3431:1;3424:31;3478:4;3475:1;3468:15;3506:4;3503:1;3496:15;3360:161;;3147:380;;;:::o;3532:355::-;3734:2;3716:21;;;3773:2;3753:18;;;3746:30;3812:33;3807:2;3792:18;;3785:61;3878:2;3863:18;;3532:355::o;3892:356::-;4094:2;4076:21;;;4113:18;;;4106:30;4172:34;4167:2;4152:18;;4145:62;4239:2;4224:18;;3892:356::o;4589:184::-;4659:6;4712:2;4700:9;4691:7;4687:23;4683:32;4680:52;;;4728:1;4725;4718:12;4680:52;-1:-1:-1;4751:16:1;;4589:184;-1:-1:-1;4589:184:1:o;5114:127::-;5175:10;5170:3;5166:20;5163:1;5156:31;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5246:128;5286:3;5317:1;5313:6;5310:1;5307:13;5304:39;;;5323:18;;:::i;:::-;-1:-1:-1;5359:9:1;;5246:128::o;5379:125::-;5419:4;5447:1;5444;5441:8;5438:34;;;5452:18;;:::i;:::-;-1:-1:-1;5489:9:1;;5379:125::o;7076:168::-;7116:7;7182:1;7178;7174:6;7170:14;7167:1;7164:21;7159:1;7152:9;7145:17;7141:45;7138:71;;;7189:18;;:::i;:::-;-1:-1:-1;7229:9:1;;7076:168::o;7249:217::-;7289:1;7315;7305:132;;7359:10;7354:3;7350:20;7347:1;7340:31;7394:4;7391:1;7384:15;7422:4;7419:1;7412:15;7305:132;-1:-1:-1;7451:9:1;;7249:217::o;8537:245::-;8604:6;8657:2;8645:9;8636:7;8632:23;8628:32;8625:52;;;8673:1;8670;8663:12;8625:52;8705:9;8699:16;8724:28;8746:5;8724:28;:::i;9963:274::-;10092:3;10130:6;10124:13;10146:53;10192:6;10187:3;10180:4;10172:6;10168:17;10146:53;:::i;:::-;10215:16;;;;;9963:274;-1:-1:-1;;9963:274:1:o

Swarm Source

ipfs://e8820236781dacaeea96cda8d11063a07cdff20f84ec367e71df5fd1c9112b8a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.