Contract 0x11bd1841A10845970AD5432a38e1735e5c9E2fE4 4

 

Contract Overview

Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe6516657e1a4cf4a970d06ff8df08380dc3e886bf6e2ed86900d57db41947989Claim Redeemable320978982022-02-27 11:59:46395 days 6 hrs ago0xd7bb437768b657ee8ecf49b85460b8844e57527f IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.046067593404
0x891e5ef134beffe16aedaabe7239cd9c6b6477d92668fe41e448a4e0e020e3aeRedeem319137852022-02-25 4:41:16397 days 14 hrs ago0x87957d406db912ec10476c94ab4914377f405081 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.268076808662
0x48d02557896d7485687f013f81d900cd3c2413dd5df8aa03b82062b0d24f3a80Redeem318969072022-02-24 23:39:01397 days 19 hrs ago0x72dbce0db5df698178f1736b01a8a3ab0f452ec2 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.251510556912
0x2f457e339d85589509cb3869bf3ced36aa341935f901794c537a628583a2f6f4Redeem318857352022-02-24 19:42:32397 days 23 hrs ago0xc9d9d8971fd8cea4a93b2d187f6c7e1f830c54d1 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.354571164403
0x6848fc61d1333c8987f42d62b8356c210595071813f4461283e42436daf9fa16Claim Redeemable318856092022-02-24 19:39:52397 days 23 hrs ago0xc9d9d8971fd8cea4a93b2d187f6c7e1f830c54d1 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.190464402233
0xe10be15afbcd7c63f6541a28da03370d964289d0aae619cb7e4444cf0069489aRedeem318642722022-02-24 12:21:02398 days 6 hrs ago0x6dbb32cab2c358074ac2dadcb16833cf1afd42d3 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.344764102419
0x2fb6ba8b61bfcb8caafc273572dfe39ce9edf654416f3b3401f4d3eda13b5ab3Claim Redeemable318640932022-02-24 12:18:18398 days 6 hrs ago0x6dbb32cab2c358074ac2dadcb16833cf1afd42d3 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.169940974204
0xe2983af7b2c238b88c79841ce5015d19424a6d57532092368548906669e43805Redeem318579032022-02-24 10:17:27398 days 8 hrs ago0x039e89b074d79772b3984d2fbf20fa8fa2f3ad6c IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.14369757196
0x7754e124d77e9f7a6c96565fb68f89d37d6fe4f29167ef4f6ea56bac3439906fClaim Redeemable318577182022-02-24 10:13:42398 days 8 hrs ago0x039e89b074d79772b3984d2fbf20fa8fa2f3ad6c IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.182848256867
0xa9cc35ee7e25a8fe8932b022e29dcb201b0e63114586c9cc20145c4ddb36c2a8Redeem318570362022-02-24 9:59:18398 days 8 hrs ago0x2ed09f2a09ac990fa4bc7555ee7ab2af7faaf080 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM1.431057916936
0xcbb456b4c9348569ddfbc0ecc464b08fd8ca8f752811f1d87bfdb11f5493964fClaim Redeemable318560692022-02-24 9:38:45398 days 9 hrs ago0x2ed09f2a09ac990fa4bc7555ee7ab2af7faaf080 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.190086309752
0xa0366760fcc1a13e29aa525cc05ac3d4748c68b503f9db5b9d39fd8c7c1eb841Redeem318524302022-02-24 8:20:23398 days 10 hrs ago0x1c04325192887276c57868789b1608f42bc11262 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.1574442
0xab12e332e8800e538c4d1ad9af649f65685528804b531520b07de9a77692b6a7Redeem318305632022-02-24 0:40:11398 days 18 hrs ago0x8e5c78c9bafd4cf57da288f63bdc94cc0af26df5 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.119993892811
0x49ecf2261c11667e06838a201925733f500bba0e7fd30663f14884620ffb9918Redeem318230652022-02-23 22:25:30398 days 20 hrs ago0x00426ec496d6aeac556fbd3e1e00a307ab7f5211 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.091210294043
0x34b47b26546accee979198293587d8be7bf8a6ce216d079734f0c9bafb036dd1Redeem318210242022-02-23 21:53:00398 days 21 hrs ago0x0ea0e6b6768ba1b223bc81a49ad68b33c81bc61a IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.100848957992
0x25e683121bd66a26d3656225878d99c5e4a88cb06e45aaa718256a7c0df88058Redeem318198662022-02-23 21:34:14398 days 21 hrs ago0xd09e8a00ac566eb73f14c3f13e24757590ee035a IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.075023738764
0x16164818005b3e23a3bb3a3fbab25298f35ca520e445937e40ac613c1f5c150fRedeem318189682022-02-23 21:21:29398 days 21 hrs ago0x150c2c92599325019fd0d5233ad6237cae080bff IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.101151810657
0x71abb6cd4aa2a3a56dbb882bcd0ad0906bb72f11d46b01b9e893fea374744173Redeem318170602022-02-23 20:51:17398 days 22 hrs ago0xabe2eebfcff55b871ddd10c9e6f49c0bcba5677e IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.091668659593
0x49914def642dbd7c06e4e46e9af161e576dc021e89506d72640a74497091a884Claim Redeemable318156922022-02-23 20:31:23398 days 22 hrs ago0xabe2eebfcff55b871ddd10c9e6f49c0bcba5677e IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.137783911995
0x0afa8829c0a3043386a0b38d219e90357383cee36aa78053fdf0ef1378881105Redeem318106062022-02-23 19:04:55398 days 23 hrs ago0x332aab30e04743a1ac12c25041c9ea96402396fd IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.111951783025
0xf68eeeec072f136fd96914fbba8de14d3dd87ea8dbc08656ae4f34177470348aRedeem318035722022-02-23 16:53:36399 days 2 hrs ago0x0954280a5e5ec1250aea21bcb5fffb95b02b9afd IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.120359723156
0xa424c083101c6c5df51a7cbcda8600b4b7c0a6ee02ee3e8258e5df80903304e2Redeem318017262022-02-23 16:17:00399 days 2 hrs ago0x52cc78aebc2e4c39904770445c02acb8e827b039 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.114268521947
0xba886d23c9fc51f4d210143d35d70f212d93fb7049db93a61aeb64b11da3640fClaim Redeemable318016432022-02-23 16:14:49399 days 2 hrs ago0x52cc78aebc2e4c39904770445c02acb8e827b039 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.14046000851
0x1a12c04a21b14008c283098b8c06609282769c4cb356be38d824dda954855e85Redeem318014932022-02-23 16:11:39399 days 2 hrs ago0x3ae353984534586711997aa90021750cc6169752 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.097476939952
0xeb0da2765d405345bf29f72c8cc7f0efa14c6da732e3fa84d1e43b627fca2102Redeem318009892022-02-23 16:00:37399 days 2 hrs ago0x538e2110c4a1194100b139d8c7ecbd7eaa808312 IN  0x11bd1841a10845970ad5432a38e1735e5c9e2fe40 FTM0.103446157515
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x5c893a8f8e083b454cdeafcf268fdc34cd6d4660de1a3eaf22c506750ac582e8313814892022-02-19 2:30:09403 days 16 hrs ago 0x8b43eb774bae835b20ac8a222c5a91dcd339f376  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FairPriceLaunch

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-02-19
*/

pragma solidity 0.8.5;

// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

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


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



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

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)





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

// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)



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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// SPDX-License-Identifier: AGPL-3.0-or-later




//NRT is like a private stock
//can only be traded with the issuer who remains in control of the market
//until he opens the redemption window
contract FairLaunchNRT is Ownable {
    uint256 private _issuedSupply;
    uint256 private _outstandingSupply;
    uint256 private _decimals;
    string private _symbol;

    mapping(address => uint256) private _balances;

    event Issued(address account, uint256 amount);
    event Redeemed(address account, uint256 amount);

    constructor(string memory __symbol, uint256 __decimals) {
        _symbol = __symbol;
        _decimals = __decimals;
        _issuedSupply = 0;
        _outstandingSupply = 0;
    }

    // Creates amount NRT and assigns them to account
    function issue(address account, uint256 amount) public onlyOwner {
        require(account != address(0), "zero address");

        _issuedSupply += amount;
        _outstandingSupply += amount;
        _balances[account] += amount;

        emit Issued(account, amount);
    }

    //redeem, caller handles transfer of created value
    function redeem(address account, uint256 amount) public onlyOwner {
        require(account != address(0), "zero address");
        require(_balances[account] >= amount, "Insufficent balance");

        _balances[account] -= amount;
        _outstandingSupply -= amount;

        emit Redeemed(account, amount);
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

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

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

    function issuedSupply() public view returns (uint256) {
        return _issuedSupply;
    }

    function outstandingSupply() public view returns (uint256) {
        return _outstandingSupply;
    }
}

// https://eips.ethereum.org/EIPS/eip-20






////////////////////////////////////
//
//  Fair Price Launch Contract
//  Every gets the same price in the end
//  Users get issued a non-transferable token  and redeem for the final token
//
////////////////////////////////////
contract FairPriceLaunch is Ownable {   
    using SafeMath for uint256; 

    FairLaunchNRT public nrt;

    address public fundsRedeemer;
    // The token used for contributions
    address public investToken;

    // the token to be launched
    address public launchToken;
    

    //Limits
    uint256 public maxInvestAllowed;
    uint256 public minInvestAllowed;
    uint256 public maxInvestRemovablePerPeriod;
    uint256 public maxGlobalInvestAllowed;
    uint256 public maxRedeemableToIssue;

    //totals
    uint256 public totalGlobalInvested;
    uint256 public totalGlobalIssued;
    uint256 public totalGlobalRedeemed;
    uint256 public totalInvestors;

    //TIMES
    // The time that sale will begin
    uint256 public launchStartTime;
    // length of sale period
    uint256 public saleDuration;
    // launchStartTime.add(sale) durations
    uint256 public launchEndTime;
    //The delay required between investment removal
    uint256 public investRemovalDelay;
    //Prices
    uint256 public startingPrice;
    uint256 public finalPrice;

    //toggles
    // sale has started
    bool public saleEnabled;
    bool public claimEnabled;
    bool public redeemEnabled;
    bool public finalized;

    //EVENTS
    event SaleEnabled(bool enabled, uint256 time);
    event ClaimEnabled(bool enabled, uint256 time);
    event RedeemEnabled(bool enabled, uint256 time);

    event Invest(
        address investor,
        uint256 amount,
        uint256 totalInvested,
        uint256 price
    );
    event RemoveInvestment(
        address investor,
        uint256 amount,
        uint256 totalInvested,
        uint256 price
    );
    event Claimed(address account, uint256 amount);
    event Redeemed(address account, uint256 amount);

    //Structs

    struct Withdrawal {
        uint256 timestamp;
        uint256 amount;
    }

    struct InvestorInfo {
        uint256 totalInvested;
        uint256 totalClaimed;
        uint256 totalRedeemed;
        uint256 totalInvestableExchanged;
        Withdrawal[] withdrawHistory;
        bool hasClaimed;
        bool hasRedeemed;
    }

    mapping(address => InvestorInfo) public investorInfoMap;
    address[] public investorList;

    constructor(
        address _fundsRedeemer,
        address _investToken,
        address _nrtAddress,
        uint256 _launchStartTime,
        uint256 _saleDuration,
        uint256 _investRemovalDelay,
        uint256 _maxInvestAllowed,
        uint256 _minInvestAllowed,
        uint256 _maxInvestRemovablePerPeriod,
        uint256 _maxGlobalInvestAllowed,
        uint256 _maxRedeemableToIssue,
        uint256 _startingPrice        
    ) {
        require(
            _launchStartTime > block.timestamp,
            "Start time must be in the future."
        );
        require(
            _minInvestAllowed >= 0,
            "Min invest amount must not be negative"
        );
        require(_startingPrice >= 0, "Starting price must not be negative");
        require(_fundsRedeemer != address(0), "fundsRedeemer address is not set.");

        fundsRedeemer = _fundsRedeemer;
        investToken = _investToken;
        //times
        launchStartTime = _launchStartTime;
        require(_saleDuration < 4 days, "duration too long");
        launchEndTime = _launchStartTime.add(_saleDuration);
        saleDuration = _saleDuration;
        investRemovalDelay = _investRemovalDelay;
        //limits
        maxInvestAllowed = _maxInvestAllowed;
        minInvestAllowed = _minInvestAllowed;
        maxGlobalInvestAllowed = _maxGlobalInvestAllowed;
        maxInvestRemovablePerPeriod = _maxInvestRemovablePerPeriod;
        maxRedeemableToIssue = _maxRedeemableToIssue;
        startingPrice = _startingPrice;
        //NRT is passed in as argument and this contract needs to be set as owner        
        saleEnabled = false;
        claimEnabled = false;
        redeemEnabled = false;

        // NRT
        nrt = FairLaunchNRT(_nrtAddress);
    }

    //User functions
    /**
    @dev Invests the specified amoount of investToken
     */
    function invest(uint256 amountToInvest) public {
        require(saleEnabled, "Sale is not enabled yet");
        require(block.timestamp >= launchStartTime, "Sale has not started yet");
        require(amountToInvest >= minInvestAllowed, "Invest amount too small");
        require(!hasSaleEnded(), "Sale period has ended");        
        require(
            totalGlobalInvested.add(amountToInvest) <= maxGlobalInvestAllowed,
            "Maximum Investments reached"
        );

        InvestorInfo storage investor = investorInfoMap[msg.sender];
        require(
            investor.totalInvested.add(amountToInvest) <= maxInvestAllowed,
            "Max individual investment reached"
        );
        //transact
        require(
            IERC20(investToken).transferFrom(
                msg.sender,
                address(this),
                amountToInvest
            ),
            "transfer failed"
        );
        if (investor.totalInvested == 0) {
            totalInvestors += 1;
            investorList.push(msg.sender);
        }
        investor.totalInvestableExchanged += amountToInvest;
        investor.totalInvested += amountToInvest;
        totalGlobalInvested += amountToInvest;
        //continuously updates finalPrice until the last contribution is made.
        finalPrice = currentPrice();
        emit Invest(
            msg.sender,
            amountToInvest,
            totalGlobalInvested,
            finalPrice
        );
    }

    /**
    @dev Returns the total amount withdrawn by the _address during the last hour
    **/

    function getLastPeriodWithdrawals(address _address)
        public
        view
        returns (uint256 totalWithdrawLastHour)
    {
        InvestorInfo storage investor = investorInfoMap[_address];

        Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
        for (uint256 i = 0; i < withdrawHistory.length; i++) {
            Withdrawal memory withdraw = withdrawHistory[i];
            if (withdraw.timestamp >= block.timestamp.sub(investRemovalDelay)) {
                totalWithdrawLastHour = totalWithdrawLastHour.add(
                    withdrawHistory[i].amount
                );
            }
        }
    }

    /**
    @dev Removes the specified amount from the users totalInvested balance and returns the amount of investTokens back to them
     */
    function removeInvestment(uint256 amountToRemove) public {
        require(saleEnabled, "Sale is not enabled yet");
        require(block.timestamp >= launchStartTime, "Sale has not started yet");
        require(block.timestamp < launchEndTime, "Sale has ended");
        require(
            totalGlobalInvested < maxGlobalInvestAllowed,
            "Maximum Investments reached, deposits/withdrawal are disabled"
        );
        require(amountToRemove <= maxInvestRemovablePerPeriod, "Cannot remove more than the maximum by period");

        InvestorInfo storage investor = investorInfoMap[msg.sender];

        //Two checks of funds to prevent over widrawal
        require(
            amountToRemove <= investor.totalInvested,
            "Cannot Remove more than invested"
        );
        
        //Make sure they can't withdraw too often.
        Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
        uint256 authorizedWithdraw = maxInvestRemovablePerPeriod.sub(
            getLastPeriodWithdrawals(msg.sender)
        );
        require(
            amountToRemove <= authorizedWithdraw,
            "Max withdraw reached for this hour"
        );
        withdrawHistory.push(
            Withdrawal({timestamp: block.timestamp, amount: amountToRemove})
        );
        //transact
        investor.totalInvestableExchanged += amountToRemove;
        investor.totalInvested -= amountToRemove;
        totalGlobalInvested -= amountToRemove;
        require(
            IERC20(investToken).transferFrom(
                address(this),
                msg.sender,
                amountToRemove
            ),
            "transfer failed"
        );

        finalPrice = currentPrice();

        emit RemoveInvestment(
            msg.sender,
            amountToRemove,
            totalGlobalInvested,
            finalPrice
        );
    }

    /**
    * @dev Claims the NRT tokens equivalent to their contribution
    */
    function claimRedeemable() public {
        require(claimEnabled, "claim not enabled");
        require(block.timestamp >= launchEndTime, "Time to claim has not arrived");        

        InvestorInfo storage investor = investorInfoMap[msg.sender];
        require(!investor.hasClaimed, "Tokens already claimed");
        require(investor.totalInvested > 0, "No investment made");        

        uint256 issueAmount = investor.totalInvested.mul(10**9).div(finalPrice);
        investor.hasClaimed = true;
        investor.totalClaimed = issueAmount;
        totalGlobalIssued = totalGlobalIssued.add(issueAmount);
        
        // Claim bFrock
        require(issueAmount > 0, "no amount issued");
        nrt.issue(msg.sender, issueAmount);
      
        emit Claimed(msg.sender, issueAmount);
    }   


    /**
    * @dev redeem all tokens
    */
    function redeem() public {        
        require(redeemEnabled, "redeem not enabled");
        require(block.timestamp > launchEndTime, "not redeemable yet");
        uint256 redeemAmount = nrt.balanceOf(msg.sender);
        require(redeemAmount > 0, "no amount issued");
        InvestorInfo storage investor = investorInfoMap[msg.sender];
        require(!investor.hasRedeemed, "already redeemed");
        require(launchToken != address(0), "Launth token not setted");

        // Set ad Redeemed
        investor.hasRedeemed = true;

        // Send Frock Token to Investor
        require(
            IERC20(launchToken).transfer(
                msg.sender,
                redeemAmount
            ),
            "transfer failed"
        );

        // Redeem NRT and burn the NRT
        nrt.redeem(msg.sender, redeemAmount);
        
        // Add Flobal Redeemed amount
        totalGlobalRedeemed += redeemAmount;        
        
        emit Redeemed(msg.sender, redeemAmount);        
    } 

    //getters
    //calculates current price
    function currentPrice() public view returns (uint256) {
        uint256 price = computePrice();
        if (price <= startingPrice) {
            return startingPrice;
        } else {
            return price;
        }
    }

    function computePrice() public view returns (uint256) {
        return totalGlobalInvested.mul(1e9).div(maxRedeemableToIssue);
    }

    function hasSaleEnded() public view returns (bool) {
        return block.timestamp > launchStartTime.add(saleDuration);
    }

    //------ Owner Functions ------

     // define the launch token to be redeemed
    function setLaunchToken(address _launchToken) public onlyOwner {
        launchToken = _launchToken;
    }

    function enableSale() public onlyOwner {
        saleEnabled = true;
        emit SaleEnabled(true, block.timestamp);
    }

    function enableClaim() public onlyOwner {
        claimEnabled = true;
        emit ClaimEnabled(true, block.timestamp);
    }

    function enableRedeem() public onlyOwner {
        redeemEnabled = true;
        emit RedeemEnabled(true, block.timestamp);
    }

    function withdrawInvestablePool() public onlyOwner {
        require(block.timestamp > launchEndTime, "Sale has not ended");
        uint256 amount = IERC20(investToken).balanceOf(address(this));
        IERC20(investToken).transfer(fundsRedeemer, amount);        
    }

     // withdraw in case some tokens were not redeemed
    function withdrawLaunchtoken(uint256 amount) public onlyOwner {
        require(
            IERC20(launchToken).transfer(msg.sender, amount),
            "transfer failed"
        );
    }

    function changeStartTime(uint256 newTime) public onlyOwner {
        require(newTime > block.timestamp, "Start time must be in the future.");
        require(block.timestamp < launchStartTime, "Sale has already started");
        launchStartTime = newTime;
        //update endTime
        launchEndTime = newTime.add(saleDuration);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_fundsRedeemer","type":"address"},{"internalType":"address","name":"_investToken","type":"address"},{"internalType":"address","name":"_nrtAddress","type":"address"},{"internalType":"uint256","name":"_launchStartTime","type":"uint256"},{"internalType":"uint256","name":"_saleDuration","type":"uint256"},{"internalType":"uint256","name":"_investRemovalDelay","type":"uint256"},{"internalType":"uint256","name":"_maxInvestAllowed","type":"uint256"},{"internalType":"uint256","name":"_minInvestAllowed","type":"uint256"},{"internalType":"uint256","name":"_maxInvestRemovablePerPeriod","type":"uint256"},{"internalType":"uint256","name":"_maxGlobalInvestAllowed","type":"uint256"},{"internalType":"uint256","name":"_maxRedeemableToIssue","type":"uint256"},{"internalType":"uint256","name":"_startingPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClaimEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalInvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Invest","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":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RedeemEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalInvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"RemoveInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SaleEnabled","type":"event"},{"inputs":[{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"changeStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRedeemable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"computePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundsRedeemer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLastPeriodWithdrawals","outputs":[{"internalType":"uint256","name":"totalWithdrawLastHour","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToInvest","type":"uint256"}],"name":"invest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investRemovalDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investorInfoMap","outputs":[{"internalType":"uint256","name":"totalInvested","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"totalRedeemed","type":"uint256"},{"internalType":"uint256","name":"totalInvestableExchanged","type":"uint256"},{"internalType":"bool","name":"hasClaimed","type":"bool"},{"internalType":"bool","name":"hasRedeemed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"investorList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGlobalInvestAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInvestAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInvestRemovablePerPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRedeemableToIssue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minInvestAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nrt","outputs":[{"internalType":"contract FairLaunchNRT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRemove","type":"uint256"}],"name":"removeInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_launchToken","type":"address"}],"name":"setLaunchToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGlobalInvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGlobalIssued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGlobalRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInvestors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawInvestablePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLaunchtoken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001f9f38038062001f9f833981016040819052620000349162000279565b6200003f33620001f7565b4289116200009e5760405162461bcd60e51b815260206004820152602160248201527f53746172742074696d65206d75737420626520696e20746865206675747572656044820152601760f91b60648201526084015b60405180910390fd5b6001600160a01b038c16620001005760405162461bcd60e51b815260206004820152602160248201527f66756e647352656465656d65722061646472657373206973206e6f74207365746044820152601760f91b606482015260840162000095565b600280546001600160a01b03808f166001600160a01b03199283161790925560038054928e1692909116919091179055600e8990556205460088106200017d5760405162461bcd60e51b81526020600482015260116024820152706475726174696f6e20746f6f206c6f6e6760781b604482015260640162000095565b62000197888a6200024760201b620019fc1790919060201c565b601055600f97909755601195909555600593909355600691909155600891909155600755600955601255506014805462ffffff19169055600180546001600160a01b0319166001600160a01b039290921691909117905550620003449050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200025582846200031d565b9392505050565b80516001600160a01b03811681146200027457600080fd5b919050565b6000806000806000806000806000806000806101808d8f0312156200029d57600080fd5b620002a88d6200025c565b9b50620002b860208e016200025c565b9a50620002c860408e016200025c565b995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d015191506101608d015190509295989b509295989b509295989b565b600082198211156200033f57634e487b7160e01b600052601160045260246000fd5b500190565b611c4b80620003546000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638b65be0811610151578063be040fb0116100c3578063e230fbe711610087578063e230fbe714610472578063e545338c1461047b578063f2fde38b1461048e578063f703f36f146104a1578063ff16e7501461051b578063ff6807cb1461052e57600080fd5b8063be040fb014610433578063c0212d031461043b578063c683d8e41461044e578063d2f8253614610456578063d6fbf2021461046957600080fd5b8063a4cea3b211610115578063a4cea3b2146103e9578063a6b513ee146103f1578063b17253e6146103fa578063b3f05b9714610403578063badf822b14610417578063bc4c3bb31461042a57600080fd5b80638b65be08146103ab5780638da5cb5b146103b457806393c7c04e146103c55780639d1b464a146103ce578063a28a4d86146103d657600080fd5b806338771754116101ea578063715018a6116101ae578063715018a61461035f57806371b9b64614610367578063727dba53146103745780637bb501ec14610387578063884aa200146103905780638aa5b2c31461039857600080fd5b8063387717541461032a57806349a433a214610333578063604a85da1461033c57806369e1da2d1461034f5780636bacc0fa1461035757600080fd5b806328dae6e31161023157806328dae6e3146102ea57806329b8caff146102f25780632afcf480146102fb578063336a29011461030e5780633711d9fb1461032157600080fd5b8063061873e81461026e5780631217a69c1461027857806312f9b48e146102945780631920508d146102bf5780632866ed21146102c8575b600080fd5b610276610537565b005b610281600c5481565b6040519081526020015b60405180910390f35b6102a76102a2366004611ace565b6105b7565b6040516001600160a01b03909116815260200161028b565b61028160075481565b6014546102da90610100900460ff1681565b604051901515815260200161028b565b6102766105e1565b610281600d5481565b610276610309366004611ace565b610650565b6002546102a7906001600160a01b031681565b610281600f5481565b61028160055481565b61028160105481565b61027661034a366004611a83565b610a0e565b610276610a5a565b6102da610bd4565b610276610bf4565b6014546102da9060ff1681565b610281610382366004611a83565b610c2a565b610281600e5481565b610281610d04565b6102766103a6366004611ace565b610d30565b610281600b5481565b6000546001600160a01b03166102a7565b61028160115481565b610281610e1d565b6004546102a7906001600160a01b031681565b610276610e40565b61028160135481565b61028160065481565b6014546102da906301000000900460ff1681565b6003546102a7906001600160a01b031681565b610281600a5481565b61027661109c565b610276610449366004611ace565b611407565b610276611827565b6014546102da9062010000900460ff1681565b61028160125481565b61028160085481565b6001546102a7906001600160a01b031681565b61027661049c366004611a83565b611896565b6104ea6104af366004611a83565b601560205260009081526040902080546001820154600283015460038401546005909401549293919290919060ff8082169161010090041686565b60408051968752602087019590955293850192909252606084015215156080830152151560a082015260c00161028b565b610276610529366004611ace565b611931565b61028160095481565b6000546001600160a01b0316331461056a5760405162461bcd60e51b815260040161056190611b00565b60405180910390fd5b6014805462ff000019166201000017905560408051600181524260208201527fef5fd91dc9b012f3e4b41e00dc71466a39c83d97c3cc3879de5b9193f456c63091015b60405180910390a1565b601681815481106105c757600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461060b5760405162461bcd60e51b815260040161056190611b00565b6014805461ff00191661010017905560408051600181524260208201527f4c19a247afa6e76f0ce951834d6e092126cc3ac979b6bf5bc521e84b36ad568d91016105ad565b60145460ff1661069c5760405162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b6044820152606401610561565b600e544210156106e95760405162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b6044820152606401610561565b60065481101561073b5760405162461bcd60e51b815260206004820152601760248201527f496e7665737420616d6f756e7420746f6f20736d616c6c0000000000000000006044820152606401610561565b610743610bd4565b156107885760405162461bcd60e51b815260206004820152601560248201527414d85b19481c195c9a5bd9081a185cc8195b991959605a1b6044820152606401610561565b600854600a5461079890836119fc565b11156107e65760405162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d20496e766573746d656e7473207265616368656400000000006044820152606401610561565b336000908152601560205260409020600554815461080490846119fc565b111561085c5760405162461bcd60e51b815260206004820152602160248201527f4d617820696e646976696475616c20696e766573746d656e74207265616368656044820152601960fa1b6064820152608401610561565b6003546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e69190611aac565b6109025760405162461bcd60e51b815260040161056190611b35565b8054610963576001600d600082825461091b9190611b5e565b9091555050601680546001810182556000919091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b031916331790555b818160030160008282546109779190611b5e565b9091555050805482908290600090610990908490611b5e565b9250508190555081600a60008282546109a99190611b5e565b909155506109b79050610e1d565b6013819055600a5460408051338152602081018690529081019190915260608101919091527f4df9cbfa66cbbabb528375b3af00207b446225af5a96b8a4b5c413b18226fb95906080015b60405180910390a15050565b6000546001600160a01b03163314610a385760405162461bcd60e51b815260040161056190611b00565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610a845760405162461bcd60e51b815260040161056190611b00565b6010544211610aca5760405162461bcd60e51b815260206004820152601260248201527114d85b19481a185cc81b9bdd08195b99195960721b6044820152606401610561565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b0e57600080fd5b505afa158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611ae7565b60035460025460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb90604401602060405180830381600087803b158015610b9857600080fd5b505af1158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190611aac565b5050565b6000610bed600f54600e546119fc90919063ffffffff16565b4211905090565b6000546001600160a01b03163314610c1e5760405162461bcd60e51b815260040161056190611b00565b610c286000611a0f565b565b6001600160a01b038116600090815260156020526040812060048101825b8154811015610cfc576000828281548110610c6557610c65611bff565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050610ca960115442611a5f90919063ffffffff16565b815110610ce957610ce6838381548110610cc557610cc5611bff565b906000526020600020906002020160010154866119fc90919063ffffffff16565b94505b5080610cf481611bce565b915050610c48565b505050919050565b6000610d2b600954610d25633b9aca00600a54611a6b90919063ffffffff16565b90611a77565b905090565b6000546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161056190611b00565b428111610db35760405162461bcd60e51b815260206004820152602160248201527f53746172742074696d65206d75737420626520696e20746865206675747572656044820152601760f91b6064820152608401610561565b600e544210610e045760405162461bcd60e51b815260206004820152601860248201527f53616c652068617320616c7265616479207374617274656400000000000000006044820152606401610561565b600e819055600f54610e179082906119fc565b60105550565b600080610e28610d04565b90506012548111610e3b57505060125490565b919050565b601454610100900460ff16610e8b5760405162461bcd60e51b815260206004820152601160248201527018db185a5b481b9bdd08195b98589b1959607a1b6044820152606401610561565b601054421015610edd5760405162461bcd60e51b815260206004820152601d60248201527f54696d6520746f20636c61696d20686173206e6f7420617272697665640000006044820152606401610561565b336000908152601560205260409020600581015460ff1615610f3a5760405162461bcd60e51b8152602060048201526016602482015275151bdad95b9cc8185b1c9958591e4818db185a5b595960521b6044820152606401610561565b8054610f7d5760405162461bcd60e51b81526020600482015260126024820152714e6f20696e766573746d656e74206d61646560701b6044820152606401610561565b6013548154600091610f9791610d2590633b9aca00611a6b565b60058301805460ff191660019081179091558301819055600b54909150610fbe90826119fc565b600b55806110015760405162461bcd60e51b815260206004820152601060248201526f1b9bc8185b5bdd5b9d081a5cdcdd595960821b6044820152606401610561565b60015460405163219e412d60e21b8152336004820152602481018390526001600160a01b039091169063867904b490604401600060405180830381600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b505060408051338152602081018590527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9350019050610a02565b60145462010000900460ff166110e95760405162461bcd60e51b81526020600482015260126024820152711c995919595b481b9bdd08195b98589b195960721b6044820152606401610561565b601054421161112f5760405162461bcd60e51b81526020600482015260126024820152711b9bdd081c995919595b58589b19481e595d60721b6044820152606401610561565b6001546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190611ae7565b9050600081116111f05760405162461bcd60e51b815260206004820152601060248201526f1b9bc8185b5bdd5b9d081a5cdcdd595960821b6044820152606401610561565b3360009081526015602052604090206005810154610100900460ff161561124c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481c995919595b595960821b6044820152606401610561565b6004546001600160a01b03166112a45760405162461bcd60e51b815260206004820152601760248201527f4c61756e746820746f6b656e206e6f74207365747465640000000000000000006044820152606401610561565b60058101805461ff0019166101001790556004805460405163a9059cbb60e01b81523392810192909252602482018490526001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133a9190611aac565b6113565760405162461bcd60e51b815260040161056190611b35565b6001546040516301e9a69560e41b8152336004820152602481018490526001600160a01b0390911690631e9a695090604401600060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b5050505081600c60008282546113cc9190611b5e565b909155505060408051338152602081018490527f4896181ff8f4543cc00db9fe9b6fb7e6f032b7eb772c72ab1ec1b4d2e03b93699101610a02565b60145460ff166114535760405162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b6044820152606401610561565b600e544210156114a05760405162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b6044820152606401610561565b60105442106114e25760405162461bcd60e51b815260206004820152600e60248201526d14d85b19481a185cc8195b99195960921b6044820152606401610561565b600854600a541061155b5760405162461bcd60e51b815260206004820152603d60248201527f4d6178696d756d20496e766573746d656e747320726561636865642c2064657060448201527f6f736974732f7769746864726177616c206172652064697361626c65640000006064820152608401610561565b6007548111156115c35760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742072656d6f7665206d6f7265207468616e20746865206d61786960448201526c1b5d5b48189e481c195c9a5bd9609a1b6064820152608401610561565b33600090815260156020526040902080548211156116235760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742052656d6f7665206d6f7265207468616e20696e7665737465646044820152606401610561565b60048101600061163e61163533610c2a565b60075490611a5f565b90508084111561169b5760405162461bcd60e51b815260206004820152602260248201527f4d6178207769746864726177207265616368656420666f72207468697320686f6044820152613ab960f11b6064820152608401610561565b60408051808201909152428152602080820186815284546001818101875560008781529384209451600290920290940190815590519201919091556003840180548692906116ea908490611b5e565b9091555050825484908490600090611703908490611bb7565b9250508190555083600a600082825461171c9190611bb7565b90915550506003546040516323b872dd60e01b8152306004820152336024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561177357600080fd5b505af1158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190611aac565b6117c75760405162461bcd60e51b815260040161056190611b35565b6117cf610e1d565b6013819055600a5460408051338152602081018890529081019190915260608101919091527f5b938ffadc562aeed2a41670639ca329cc324ab076745a80f2849467dec6e45a9060800160405180910390a150505050565b6000546001600160a01b031633146118515760405162461bcd60e51b815260040161056190611b00565b6014805460ff19166001908117909155604080519182524260208301527f020b56eb5031e351b28c7914a3185d679342016d533b3fe0d056b43fe5ecb86891016105ad565b6000546001600160a01b031633146118c05760405162461bcd60e51b815260040161056190611b00565b6001600160a01b0381166119255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610561565b61192e81611a0f565b50565b6000546001600160a01b0316331461195b5760405162461bcd60e51b815260040161056190611b00565b6004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb90604401602060405180830381600087803b1580156119a857600080fd5b505af11580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190611aac565b61192e5760405162461bcd60e51b815260040161056190611b35565b6000611a088284611b5e565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611a088284611bb7565b6000611a088284611b98565b6000611a088284611b76565b600060208284031215611a9557600080fd5b81356001600160a01b0381168114611a0857600080fd5b600060208284031215611abe57600080fd5b81518015158114611a0857600080fd5b600060208284031215611ae057600080fd5b5035919050565b600060208284031215611af957600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600f908201526e1d1c985b9cd9995c8819985a5b1959608a1b604082015260600190565b60008219821115611b7157611b71611be9565b500190565b600082611b9357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611bb257611bb2611be9565b500290565b600082821015611bc957611bc9611be9565b500390565b6000600019821415611be257611be2611be9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212206241c6ce3fa5d6773abc9436144d069b4c7fad4f4a5def5091a64e9476a01c6a64736f6c634300080500330000000000000000000000000b7b7ae45bc137ea0a36422eac5bc52e7657a22500000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75000000000000000000000000c31b15d2113784a9c4c23416db5249f279631d2e0000000000000000000000000000000000000000000000000000000062111400000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000009502f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000145f680b0000000000000000000000000000000000000000000000000000013e52b9abe0000000000000000000000000000000000000000000000000000000000000013880

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

0000000000000000000000000b7b7ae45bc137ea0a36422eac5bc52e7657a22500000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75000000000000000000000000c31b15d2113784a9c4c23416db5249f279631d2e0000000000000000000000000000000000000000000000000000000062111400000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000009502f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000145f680b0000000000000000000000000000000000000000000000000000013e52b9abe0000000000000000000000000000000000000000000000000000000000000013880

-----Decoded View---------------
Arg [0] : _fundsRedeemer (address): 0x0b7b7ae45bc137ea0a36422eac5bc52e7657a225
Arg [1] : _investToken (address): 0x04068da6c83afcfa0e13ba15a6696662335d5b75
Arg [2] : _nrtAddress (address): 0xc31b15d2113784a9c4c23416db5249f279631d2e
Arg [3] : _launchStartTime (uint256): 1645286400
Arg [4] : _saleDuration (uint256): 172800
Arg [5] : _investRemovalDelay (uint256): 3600
Arg [6] : _maxInvestAllowed (uint256): 2500000000
Arg [7] : _minInvestAllowed (uint256): 0
Arg [8] : _maxInvestRemovablePerPeriod (uint256): 1000000000
Arg [9] : _maxGlobalInvestAllowed (uint256): 87500000000
Arg [10] : _maxRedeemableToIssue (uint256): 350000000000000
Arg [11] : _startingPrice (uint256): 80000

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b7b7ae45bc137ea0a36422eac5bc52e7657a225
Arg [1] : 00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75
Arg [2] : 000000000000000000000000c31b15d2113784a9c4c23416db5249f279631d2e
Arg [3] : 0000000000000000000000000000000000000000000000000000000062111400
Arg [4] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [6] : 000000000000000000000000000000000000000000000000000000009502f900
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [9] : 000000000000000000000000000000000000000000000000000000145f680b00
Arg [10] : 00000000000000000000000000000000000000000000000000013e52b9abe000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000013880


Deployed ByteCode Sourcemap

15328:12688:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26989:132;;;:::i;:::-;;15949:34;;;;;;;;;12548:25:1;;;12536:2;12521:18;15949:34:0;;;;;;;;17592:29;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1125:32:1;;;1107:51;;1095:2;1080:18;17592:29:0;1062:102:1;15718:42:0;;;;;;16505:24;;;;;;;;;;;;;;;2415:14:1;;2408:22;2390:41;;2378:2;2363:18;16505:24:0;2345:92:1;26852:129:0;;;:::i;15990:29::-;;;;;;19551:1520;;;;;;:::i;:::-;;:::i;15443:28::-;;;;;-1:-1:-1;;;;;15443:28:0;;;16146:27;;;;;;15642:31;;;;;;16224:28;;;;;;26602:108;;;;;;:::i;:::-;;:::i;27129:274::-;;;:::i;26379:128::-;;;:::i;5285:103::-;;;:::i;16475:23::-;;;;;;;;;21181:657;;;;;;:::i;:::-;;:::i;16079:30::-;;;;;;26237:134;;;:::i;27669:344::-;;;;;;:::i;:::-;;:::i;15910:32::-;;;;;;4634:87;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;4634:87;;16312:33;;;;;;25996:233;;;:::i;15587:26::-;;;;;-1:-1:-1;;;;;15587:26:0;;;24018:825;;;:::i;16401:25::-;;;;;;15680:31;;;;;;16568:21;;;;;;;;;;;;15519:26;;;;;-1:-1:-1;;;;;15519:26:0;;;15869:34;;;;;;24903:1037;;;:::i;21992:1934::-;;;;;;:::i;:::-;;:::i;26718:126::-;;;:::i;16536:25::-;;;;;;;;;;;;16366:28;;;;;;15767:37;;;;;;15410:24;;;;;-1:-1:-1;;;;;15410:24:0;;;5543:201;;;;;;:::i;:::-;;:::i;17530:55::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12859:25:1;;;12915:2;12900:18;;12893:34;;;;12943:18;;;12936:34;;;;13001:2;12986:18;;12979:34;13057:14;13050:22;13044:3;13029:19;;13022:51;13117:14;13110:22;13104:3;13089:19;;13082:51;12846:3;12831:19;17530:55:0;12813:326:1;27467:194:0;;;;;;:::i;:::-;;:::i;15811:35::-;;;;;;26989:132;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;;;;;;;;;27041:13:::1;:20:::0;;-1:-1:-1;;27041:20:0::1;::::0;::::1;::::0;;27077:36:::1;::::0;;-1:-1:-1;2610:41:1;;27097:15:0::1;2682:2:1::0;2667:18;;2660:34;27077:36:0::1;::::0;2583:18:1;27077:36:0::1;;;;;;;;26989:132::o:0;17592:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17592:29:0;;-1:-1:-1;17592:29:0;:::o;26852:129::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;26903:12:::1;:19:::0;;-1:-1:-1;;26903:19:0::1;;;::::0;;26938:35:::1;::::0;;-1:-1:-1;2610:41:1;;26957:15:0::1;2682:2:1::0;2667:18;;2660:34;26938:35:0::1;::::0;2583:18:1;26938:35:0::1;2565:135:1::0;19551:1520:0;19617:11;;;;19609:47;;;;-1:-1:-1;;;19609:47:0;;12252:2:1;19609:47:0;;;12234:21:1;12291:2;12271:18;;;12264:30;-1:-1:-1;;;12310:18:1;;;12303:53;12373:18;;19609:47:0;12224:173:1;19609:47:0;19694:15;;19675;:34;;19667:71;;;;-1:-1:-1;;;19667:71:0;;3566:2:1;19667:71:0;;;3548:21:1;3605:2;3585:18;;;3578:30;-1:-1:-1;;;3624:18:1;;;3617:54;3688:18;;19667:71:0;3538:174:1;19667:71:0;19775:16;;19757:14;:34;;19749:70;;;;-1:-1:-1;;;19749:70:0;;5130:2:1;19749:70:0;;;5112:21:1;5169:2;5149:18;;;5142:30;5208:25;5188:18;;;5181:53;5251:18;;19749:70:0;5102:173:1;19749:70:0;19839:14;:12;:14::i;:::-;19838:15;19830:49;;;;-1:-1:-1;;;19830:49:0;;6228:2:1;19830:49:0;;;6210:21:1;6267:2;6247:18;;;6240:30;-1:-1:-1;;;6286:18:1;;;6279:51;6347:18;;19830:49:0;6200:171:1;19830:49:0;19963:22;;19920:19;;:39;;19944:14;19920:23;:39::i;:::-;:65;;19898:142;;;;-1:-1:-1;;;19898:142:0;;9806:2:1;19898:142:0;;;9788:21:1;9845:2;9825:18;;;9818:30;9884:29;9864:18;;;9857:57;9931:18;;19898:142:0;9778:177:1;19898:142:0;20101:10;20053:29;20085:27;;;:15;:27;;;;;20191:16;;20145:22;;:42;;20172:14;20145:26;:42::i;:::-;:62;;20123:145;;;;-1:-1:-1;;;20123:145:0;;4728:2:1;20123:145:0;;;4710:21:1;4767:2;4747:18;;;4740:30;4806:34;4786:18;;;4779:62;-1:-1:-1;;;4857:18:1;;;4850:31;4898:19;;20123:145:0;4700:223:1;20123:145:0;20328:11;;20321:141;;-1:-1:-1;;;20321:141:0;;20372:10;20321:141;;;1409:34:1;20409:4:0;1459:18:1;;;1452:43;1511:18;;;1504:34;;;-1:-1:-1;;;;;20328:11:0;;;;20321:32;;1344:18:1;;20321:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20299:206;;;;-1:-1:-1;;;20299:206:0;;;;;;;:::i;:::-;20520:22;;20516:123;;20582:1;20564:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;20598:12:0;:29;;;;;;;-1:-1:-1;20598:29:0;;;;;;;;-1:-1:-1;;;;;;20598:29:0;20616:10;20598:29;;;20516:123;20686:14;20649:8;:33;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;20711:40:0;;20737:14;;20711:8;;:22;;:40;;20737:14;;20711:40;:::i;:::-;;;;;;;;20785:14;20762:19;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;20903:14:0;;-1:-1:-1;20903:12:0;:14::i;:::-;20890:10;:27;;;21008:19;;20933:130;;;20954:10;2059:51:1;;2141:2;2126:18;;2119:34;;;2169:18;;;2162:34;;;;2227:2;2212:18;;2205:34;;;;20933:130:0;;2046:3:1;2031:19;20933:130:0;;;;;;;;19598:1473;19551:1520;:::o;26602:108::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;26676:11:::1;:26:::0;;-1:-1:-1;;;;;;26676:26:0::1;-1:-1:-1::0;;;;;26676:26:0;;;::::1;::::0;;;::::1;::::0;;26602:108::o;27129:274::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;27217:13:::1;;27199:15;:31;27191:62;;;::::0;-1:-1:-1;;;27191:62:0;;7339:2:1;27191:62:0::1;::::0;::::1;7321:21:1::0;7378:2;7358:18;;;7351:30;-1:-1:-1;;;7397:18:1;;;7390:48;7455:18;;27191:62:0::1;7311:168:1::0;27191:62:0::1;27288:11;::::0;27281:44:::1;::::0;-1:-1:-1;;;27281:44:0;;27319:4:::1;27281:44;::::0;::::1;1107:51:1::0;27264:14:0::1;::::0;-1:-1:-1;;;;;27288:11:0::1;::::0;27281:29:::1;::::0;1080:18:1;;27281:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27343:11;::::0;27365:13:::1;::::0;27336:51:::1;::::0;-1:-1:-1;;;27336:51:0;;-1:-1:-1;;;;;27365:13:0;;::::1;27336:51;::::0;::::1;1723::1::0;1790:18;;;1783:34;;;27264:61:0;;-1:-1:-1;27343:11:0::1;::::0;27336:28:::1;::::0;1696:18:1;;27336:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27180:223;27129:274::o:0;26379:128::-;26424:4;26466:33;26486:12;;26466:15;;:19;;:33;;;;:::i;:::-;26448:15;:51;26441:58;;26379:128;:::o;5285:103::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;5350:30:::1;5377:1;5350:18;:30::i;:::-;5285:103::o:0;21181:657::-;-1:-1:-1;;;;;21360:25:0;;21281:29;21360:25;;;:15;:25;;;;;21437:24;;;21281:29;21472:359;21496:22;;21492:26;;21472:359;;;21540:26;21569:15;21585:1;21569:18;;;;;;;;:::i;:::-;;;;;;;;;;;21540:47;;;;;;;;;;;;;;;;;;;;;;;;;;;21628:39;21648:18;;21628:15;:19;;:39;;;;:::i;:::-;21606:18;;:61;21602:218;;21712:92;21760:15;21776:1;21760:18;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;21712:21;:25;;:92;;;;:::i;:::-;21688:116;;21602:218;-1:-1:-1;21520:3:0;;;;:::i;:::-;;;;21472:359;;;;21317:521;;21181:657;;;:::o;26237:134::-;26282:7;26309:54;26342:20;;26309:28;26333:3;26309:19;;:23;;:28;;;;:::i;:::-;:32;;:54::i;:::-;26302:61;;26237:134;:::o;27669:344::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;27757:15:::1;27747:7;:25;27739:71;;;::::0;-1:-1:-1;;;27739:71:0;;3919:2:1;27739:71:0::1;::::0;::::1;3901:21:1::0;3958:2;3938:18;;;3931:30;3997:34;3977:18;;;3970:62;-1:-1:-1;;;4048:18:1;;;4041:31;4089:19;;27739:71:0::1;3891:223:1::0;27739:71:0::1;27847:15;;27829;:33;27821:70;;;::::0;-1:-1:-1;;;27821:70:0;;7686:2:1;27821:70:0::1;::::0;::::1;7668:21:1::0;7725:2;7705:18;;;7698:30;7764:26;7744:18;;;7737:54;7808:18;;27821:70:0::1;7658:174:1::0;27821:70:0::1;27902:15;:25:::0;;;27992:12:::1;::::0;27980:25:::1;::::0;27920:7;;27980:11:::1;:25::i;:::-;27964:13;:41:::0;-1:-1:-1;27669:344:0:o;25996:233::-;26041:7;26061:13;26077:14;:12;:14::i;:::-;26061:30;;26115:13;;26106:5;:22;26102:120;;-1:-1:-1;;26152:13:0;;;25996:233::o;26102:120::-;26205:5;25996:233;-1:-1:-1;25996:233:0:o;24018:825::-;24071:12;;;;;;;24063:42;;;;-1:-1:-1;;;24063:42:0;;11214:2:1;24063:42:0;;;11196:21:1;11253:2;11233:18;;;11226:30;-1:-1:-1;;;11272:18:1;;;11265:47;11329:18;;24063:42:0;11186:167:1;24063:42:0;24143:13;;24124:15;:32;;24116:74;;;;-1:-1:-1;;;24116:74:0;;8039:2:1;24116:74:0;;;8021:21:1;8078:2;8058:18;;;8051:30;8117:31;8097:18;;;8090:59;8166:18;;24116:74:0;8011:179:1;24116:74:0;24259:10;24211:29;24243:27;;;:15;:27;;;;;24290:19;;;;;;24289:20;24281:55;;;;-1:-1:-1;;;24281:55:0;;9455:2:1;24281:55:0;;;9437:21:1;9494:2;9474:18;;;9467:30;-1:-1:-1;;;9513:18:1;;;9506:52;9575:18;;24281:55:0;9427:172:1;24281:55:0;24355:22;;24347:57;;;;-1:-1:-1;;;24347:57:0;;6578:2:1;24347:57:0;;;6560:21:1;6617:2;6597:18;;;6590:30;-1:-1:-1;;;6636:18:1;;;6629:48;6694:18;;24347:57:0;6550:168:1;24347:57:0;24485:10;;24447:22;;24425:19;;24447:49;;:33;;24474:5;24447:26;:33::i;:49::-;24507:19;;;:26;;-1:-1:-1;;24507:26:0;24529:4;24507:26;;;;;;24544:21;;:35;;;24610:17;;24425:71;;-1:-1:-1;24610:34:0;;24425:71;24610:21;:34::i;:::-;24590:17;:54;24698:15;24690:44;;;;-1:-1:-1;;;24690:44:0;;11560:2:1;24690:44:0;;;11542:21:1;11599:2;11579:18;;;11572:30;-1:-1:-1;;;11618:18:1;;;11611:46;11674:18;;24690:44:0;11532:166:1;24690:44:0;24745:3;;:34;;-1:-1:-1;;;24745:34:0;;24755:10;24745:34;;;1723:51:1;1790:18;;;1783:34;;;-1:-1:-1;;;;;24745:3:0;;;;:9;;1696:18:1;;24745:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24803:32:0;;;24811:10;1723:51:1;;1805:2;1790:18;;1783:34;;;24803:32:0;;-1:-1:-1;1696:18:1;;-1:-1:-1;24803:32:0;1678:145:1;24903:1037:0;24955:13;;;;;;;24947:44;;;;-1:-1:-1;;;24947:44:0;;11905:2:1;24947:44:0;;;11887:21:1;11944:2;11924:18;;;11917:30;-1:-1:-1;;;11963:18:1;;;11956:48;12021:18;;24947:44:0;11877:168:1;24947:44:0;25028:13;;25010:15;:31;25002:62;;;;-1:-1:-1;;;25002:62:0;;10867:2:1;25002:62:0;;;10849:21:1;10906:2;10886:18;;;10879:30;-1:-1:-1;;;10925:18:1;;;10918:48;10983:18;;25002:62:0;10839:168:1;25002:62:0;25098:3;;:25;;-1:-1:-1;;;25098:25:0;;25112:10;25098:25;;;1107:51:1;25075:20:0;;-1:-1:-1;;;;;25098:3:0;;:13;;1080:18:1;;25098:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25075:48;;25157:1;25142:12;:16;25134:45;;;;-1:-1:-1;;;25134:45:0;;11560:2:1;25134:45:0;;;11542:21:1;11599:2;11579:18;;;11572:30;-1:-1:-1;;;11618:18:1;;;11611:46;11674:18;;25134:45:0;11532:166:1;25134:45:0;25238:10;25190:29;25222:27;;;:15;:27;;;;;25269:20;;;;;;;;;25268:21;25260:50;;;;-1:-1:-1;;;25260:50:0;;9110:2:1;25260:50:0;;;9092:21:1;9149:2;9129:18;;;9122:30;-1:-1:-1;;;9168:18:1;;;9161:46;9224:18;;25260:50:0;9082:166:1;25260:50:0;25329:11;;-1:-1:-1;;;;;25329:11:0;25321:61;;;;-1:-1:-1;;;25321:61:0;;8397:2:1;25321:61:0;;;8379:21:1;8436:2;8416:18;;;8409:30;8475:25;8455:18;;;8448:53;8518:18;;25321:61:0;8369:173:1;25321:61:0;25423:20;;;:27;;-1:-1:-1;;25423:27:0;;;;;25533:11;;;25526:103;;-1:-1:-1;;;25526:103:0;;25573:10;25526:103;;;1723:51:1;;;;1790:18;;;1783:34;;;-1:-1:-1;;;;;25533:11:0;;25526:28;;1696:18:1;;25526:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25504:168;;;;-1:-1:-1;;;25504:168:0;;;;;;;:::i;:::-;25725:3;;:36;;-1:-1:-1;;;25725:36:0;;25736:10;25725:36;;;1723:51:1;1790:18;;;1783:34;;;-1:-1:-1;;;;;25725:3:0;;;;:10;;1696:18:1;;25725:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25844:12;25821:19;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;25890:34:0;;;25899:10;1723:51:1;;1805:2;1790:18;;1783:34;;;25890::0;;1696:18:1;25890:34:0;1678:145:1;21992:1934:0;22068:11;;;;22060:47;;;;-1:-1:-1;;;22060:47:0;;12252:2:1;22060:47:0;;;12234:21:1;12291:2;12271:18;;;12264:30;-1:-1:-1;;;12310:18:1;;;12303:53;12373:18;;22060:47:0;12224:173:1;22060:47:0;22145:15;;22126;:34;;22118:71;;;;-1:-1:-1;;;22118:71:0;;3566:2:1;22118:71:0;;;3548:21:1;3605:2;3585:18;;;3578:30;-1:-1:-1;;;3624:18:1;;;3617:54;3688:18;;22118:71:0;3538:174:1;22118:71:0;22226:13;;22208:15;:31;22200:58;;;;-1:-1:-1;;;22200:58:0;;5885:2:1;22200:58:0;;;5867:21:1;5924:2;5904:18;;;5897:30;-1:-1:-1;;;5943:18:1;;;5936:44;5997:18;;22200:58:0;5857:164:1;22200:58:0;22313:22;;22291:19;;:44;22269:155;;;;-1:-1:-1;;;22269:155:0;;3136:2:1;22269:155:0;;;3118:21:1;3175:2;3155:18;;;3148:30;3214:34;3194:18;;;3187:62;3285:31;3265:18;;;3258:59;3334:19;;22269:155:0;3108:251:1;22269:155:0;22461:27;;22443:14;:45;;22435:103;;;;-1:-1:-1;;;22435:103:0;;6925:2:1;22435:103:0;;;6907:21:1;6964:2;6944:18;;;6937:30;7003:34;6983:18;;;6976:62;-1:-1:-1;;;7054:18:1;;;7047:43;7107:19;;22435:103:0;6897:235:1;22435:103:0;22599:10;22551:29;22583:27;;;:15;:27;;;;;22719:22;;22701:40;;;22679:122;;;;-1:-1:-1;;;22679:122:0;;10162:2:1;22679:122:0;;;10144:21:1;;;10181:18;;;10174:30;10240:34;10220:18;;;10213:62;10292:18;;22679:122:0;10134:182:1;22679:122:0;22913:24;;;22874:36;22977:93;23023:36;23048:10;23023:24;:36::i;:::-;22977:27;;;:31;:93::i;:::-;22948:122;;23121:18;23103:14;:36;;23081:120;;;;-1:-1:-1;;;23081:120:0;;5482:2:1;23081:120:0;;;5464:21:1;5521:2;5501:18;;;5494:30;5560:34;5540:18;;;5533:62;-1:-1:-1;;;5611:18:1;;;5604:32;5653:19;;23081:120:0;5454:224:1;23081:120:0;23247:64;;;;;;;;;23270:15;23247:64;;;;;;;;;23212:110;;;;;;;;-1:-1:-1;23212:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;23353:33;;;:51;;23295:14;;-1:-1:-1;23353:51:0;;23295:14;;23353:51;:::i;:::-;;;;-1:-1:-1;;23415:40:0;;23441:14;;23415:8;;:22;;:40;;23441:14;;23415:40;:::i;:::-;;;;;;;;23489:14;23466:19;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;;23543:11:0;;23536:141;;-1:-1:-1;;;23536:141:0;;23595:4;23536:141;;;1409:34:1;23619:10:0;1459:18:1;;;1452:43;1511:18;;;1504:34;;;-1:-1:-1;;;;;23543:11:0;;;;23536:32;;1344:18:1;;23536:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23514:206;;;;-1:-1:-1;;;23514:206:0;;;;;;;:::i;:::-;23746:14;:12;:14::i;:::-;23733:10;:27;;;23863:19;;23778:140;;;23809:10;2059:51:1;;2141:2;2126:18;;2119:34;;;2169:18;;;2162:34;;;;2227:2;2212:18;;2205:34;;;;23778:140:0;;2046:3:1;2031:19;23778:140:0;;;;;;;22049:1877;;;21992:1934;:::o;26718:126::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;26768:11:::1;:18:::0;;-1:-1:-1;;26768:18:0::1;26782:4;26768:18:::0;;::::1;::::0;;;26802:34:::1;::::0;;2610:41:1;;;26820:15:0::1;2682:2:1::0;2667:18;;2660:34;26802::0::1;::::0;2583:18:1;26802:34:0::1;2565:135:1::0;5543:201:0;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5632:22:0;::::1;5624:73;;;::::0;-1:-1:-1;;;5624:73:0;;4321:2:1;5624:73:0::1;::::0;::::1;4303:21:1::0;4360:2;4340:18;;;4333:30;4399:34;4379:18;;;4372:62;-1:-1:-1;;;4450:18:1;;;4443:36;4496:19;;5624:73:0::1;4293:228:1::0;5624:73:0::1;5708:28;5727:8;5708:18;:28::i;:::-;5543:201:::0;:::o;27467:194::-;4680:7;4707:6;-1:-1:-1;;;;;4707:6:0;3516:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;;;;;;:::i;:::-;27569:11:::1;::::0;;27562:48:::1;::::0;-1:-1:-1;;;27562:48:0;;27591:10:::1;27562:48:::0;;::::1;1723:51:1::0;;;;1790:18;;;1783:34;;;-1:-1:-1;;;;;27569:11:0::1;::::0;27562:28:::1;::::0;1696:18:1;;27562:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27540:113;;;;-1:-1:-1::0;;;27540:113:0::1;;;;;;;:::i;8879:98::-:0;8937:7;8964:5;8968:1;8964;:5;:::i;:::-;8957:12;8879:98;-1:-1:-1;;;8879:98:0:o;5904:191::-;5978:16;5997:6;;-1:-1:-1;;;;;6014:17:0;;;-1:-1:-1;;;;;;6014:17:0;;;;;;6047:40;;5997:6;;;;;;;6047:40;;5978:16;6047:40;5967:128;5904:191;:::o;9260:98::-;9318:7;9345:5;9349:1;9345;:5;:::i;9617:98::-;9675:7;9702:5;9706:1;9702;:5;:::i;10016:98::-;10074:7;10101:5;10105:1;10101;:5;:::i;14:286:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;168:23;;-1:-1:-1;;;;;220:31:1;;210:42;;200:2;;266:1;263;256:12;305:277;372:6;425:2;413:9;404:7;400:23;396:32;393:2;;;441:1;438;431:12;393:2;473:9;467:16;526:5;519:13;512:21;505:5;502:32;492:2;;548:1;545;538:12;587:180;646:6;699:2;687:9;678:7;674:23;670:32;667:2;;;715:1;712;705:12;667:2;-1:-1:-1;738:23:1;;657:110;-1:-1:-1;657:110:1:o;772:184::-;842:6;895:2;883:9;874:7;870:23;866:32;863:2;;;911:1;908;901:12;863:2;-1:-1:-1;934:16:1;;853:103;-1:-1:-1;853:103:1:o;8547:356::-;8749:2;8731:21;;;8768:18;;;8761:30;8827:34;8822:2;8807:18;;8800:62;8894:2;8879:18;;8721:182::o;10321:339::-;10523:2;10505:21;;;10562:2;10542:18;;;10535:30;-1:-1:-1;;;10596:2:1;10581:18;;10574:45;10651:2;10636:18;;10495:165::o;13144:128::-;13184:3;13215:1;13211:6;13208:1;13205:13;13202:2;;;13221:18;;:::i;:::-;-1:-1:-1;13257:9:1;;13192:80::o;13277:217::-;13317:1;13343;13333:2;;13387:10;13382:3;13378:20;13375:1;13368:31;13422:4;13419:1;13412:15;13450:4;13447:1;13440:15;13333:2;-1:-1:-1;13479:9:1;;13323:171::o;13499:168::-;13539:7;13605:1;13601;13597:6;13593:14;13590:1;13587:21;13582:1;13575:9;13568:17;13564:45;13561:2;;;13612:18;;:::i;:::-;-1:-1:-1;13652:9:1;;13551:116::o;13672:125::-;13712:4;13740:1;13737;13734:8;13731:2;;;13745:18;;:::i;:::-;-1:-1:-1;13782:9:1;;13721:76::o;13802:135::-;13841:3;-1:-1:-1;;13862:17:1;;13859:2;;;13882:18;;:::i;:::-;-1:-1:-1;13929:1:1;13918:13;;13849:88::o;13942:127::-;14003:10;13998:3;13994:20;13991:1;13984:31;14034:4;14031:1;14024:15;14058:4;14055:1;14048:15;14074:127;14135:10;14130:3;14126:20;14123:1;14116:31;14166:4;14163:1;14156:15;14190:4;14187:1;14180:15

Swarm Source

ipfs://6241c6ce3fa5d6773abc9436144d069b4c7fad4f4a5def5091a64e9476a01c6a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.