AVAX Price: $22.30 (+3.11%)
Gas: 1 nAVAX
 

Overview

AVAX Balance

Avalanche C-Chain LogoAvalanche C-Chain LogoAvalanche C-Chain Logo0 AVAX

AVAX Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Investmen...299305462023-05-12 16:32:33711 days ago1683909153IN
0xbf65c42a...7eC42f035
0 AVAX0.0007804727.94
Claim Redeemable299168362023-05-12 8:49:56712 days ago1683881396IN
0xbf65c42a...7eC42f035
0 AVAX0.0007511927
Withdraw Investa...299167462023-05-12 8:46:55712 days ago1683881215IN
0xbf65c42a...7eC42f035
0 AVAX0.0006371427
Withdraw Investa...299166862023-05-12 8:44:56712 days ago1683881096IN
0xbf65c42a...7eC42f035
0 AVAX0.0006359726.95028897
Withdraw Investa...299162212023-05-12 8:29:03712 days ago1683880143IN
0xbf65c42a...7eC42f035
0 AVAX0.0006232226.41
Claim Redeemable299162142023-05-12 8:28:50712 days ago1683880130IN
0xbf65c42a...7eC42f035
0 AVAX0.0007347726.41
Remove Investmen...299161952023-05-12 8:28:11712 days ago1683880091IN
0xbf65c42a...7eC42f035
0 AVAX0.000760627.21700446
Withdraw Investa...299161722023-05-12 8:27:23712 days ago1683880043IN
0xbf65c42a...7eC42f035
0 AVAX0.0006135426
Claim Redeemable116445012022-03-03 19:49:441146 days ago1646336984IN
0xbf65c42a...7eC42f035
0 AVAX0.009145174.67035198
Claim Redeemable115118752022-02-28 16:53:331149 days ago1646067213IN
0xbf65c42a...7eC42f035
0 AVAX0.01619265132.21405987
Claim Redeemable105397532022-02-05 23:51:521172 days ago1644105112IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable100422262022-01-25 15:36:591183 days ago1643125019IN
0xbf65c42a...7eC42f035
0 AVAX0.0043156935.23794585
Claim Redeemable97766252022-01-19 12:34:251190 days ago1642595665IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable96601392022-01-16 19:59:111192 days ago1642363151IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable95350492022-01-13 23:59:321195 days ago1642118372IN
0xbf65c42a...7eC42f035
0 AVAX0.0030618225
Claim Redeemable95117042022-01-13 11:11:191196 days ago1642072279IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable94927832022-01-13 0:43:181196 days ago1642034598IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable94178432022-01-11 7:20:211198 days ago1641885621IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable94054982022-01-11 0:28:321198 days ago1641860912IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable93760952022-01-10 8:16:471199 days ago1641802607IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable93395712022-01-09 12:06:171200 days ago1641729977IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable93041092022-01-08 16:27:301200 days ago1641659250IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Claim Redeemable92951492022-01-08 11:28:131201 days ago1641641293IN
0xbf65c42a...7eC42f035
0 AVAX0.0042865535
Invest92677642022-01-07 20:08:171201 days ago1641586097IN
0xbf65c42a...7eC42f035
0 AVAX0.0018150159.93300644
Invest92644632022-01-07 18:24:341201 days ago1641579874IN
0xbf65c42a...7eC42f035
0 AVAX0.0018627261.50854467
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FairPriceLaunch

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: FairPriceLaunch.sol
// https://eips.ethereum.org/EIPS/eip-20
// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;
import "./NRT.sol";
import "./ERC20.sol";
import "./OwnableBase.sol";
import "./SafeMath.sol";

////////////////////////////////////
//
//  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 OwnableBase {
    using SafeMath for uint256;

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

    // The Non-transferable token used for sale, redeemable for Mag
    NRT public redeemableToken;

    //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 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 redeemEnabled;
    bool public finalized;

    //EVENTS
    event SaleEnabled(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 IssueNRT(address investor, uint256 amount);

    //Structs

    struct Withdrawal {
        uint256 timestamp;
        uint256 amount;
    }

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

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

    constructor(
        address _fundsRedeemer,
        address _investToken,
        uint256 _launchStartTime,
        uint256 _saleDuration,
        uint256 _investRemovalDelay,
        uint256 _maxInvestAllowed,
        uint256 _minInvestAllowed,
        uint256 _maxInvestRemovablePerPeriod,
        uint256 _maxGlobalInvestAllowed,
        uint256 _maxRedeemableToIssue,
        uint256 _startingPrice,
        address _redeemableToken
    ) {
        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
        redeemableToken = NRT(_redeemableToken);
        saleEnabled = false;
        redeemEnabled = false;
    }

    //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");
        uint256 buffer = maxGlobalInvestAllowed.div(10000);
        require(
            totalGlobalInvested.add(amountToInvest) <= maxGlobalInvestAllowed + buffer,
            "Maximum Investments reached"
        );

        InvestorInfo storage investor = investorInfoMap[msg.sender];
        require(
            investor.totalInvested.add(amountToInvest) <= maxInvestAllowed,
            "Max individual investment reached"
        );
        //transact
        require(
            ERC20(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(
            ERC20(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(redeemEnabled, "redeem 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.totalRedeemed = issueAmount;
        totalGlobalIssued = totalGlobalIssued.add(issueAmount);
        redeemableToken.issue(msg.sender, issueAmount);
        emit IssueNRT(msg.sender, issueAmount);
    }

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

    function enableSale() public onlyOwner {
        saleEnabled = true;
        emit SaleEnabled(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 = ERC20(investToken).balanceOf(address(this));
        ERC20(investToken).transfer(fundsRedeemer, amount);
        //ERC20(investToken).approve(fundsRedeemer, amount);
        //MagTreasury(fundsRedeemer).deposit(amount, investToken, amount.div(1e9));
    }

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

File 2 of 6: ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import "./SafeMath.sol";

interface IERC20 {
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

abstract contract ERC20 is IERC20 {
    using SafeMath for uint256;

    // TODO comment actual hash value.
    bytes32 private constant ERC20TOKEN_ERC1820_INTERFACE_ID =
        keccak256("ERC20Token");

    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 internal _totalSupply;

    string internal _name;

    string internal _symbol;

    uint8 internal _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account_, uint256 ammount_) internal virtual {
        require(account_ != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(this), account_, ammount_);
        _totalSupply = _totalSupply.add(ammount_);
        _balances[account_] = _balances[account_].add(ammount_);
        emit Transfer(address(this), account_, ammount_);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from_,
        address to_,
        uint256 amount_
    ) internal virtual {}
}

File 3 of 6: NRT.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

import "./OwnableMulti.sol";
import "./SafeMath.sol";

//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 NRT is OwnableMulti {
    uint256 private _issuedSupply;
    uint256 private _outstandingSupply;
    uint256 private _decimals;
    string private _symbol;

    using SafeMath for uint256;

    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 = _issuedSupply.add(amount);
        _outstandingSupply = _outstandingSupply.add(amount);
        _balances[account] = _balances[account].add(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] = _balances[account].sub(amount);
        _outstandingSupply = _outstandingSupply.sub(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;
    }
}

File 4 of 6: OwnableBase.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.7.5;

/**
 * @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 OwnableBase {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(msg.sender);
    }

    /**
     * @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() == msg.sender, "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 5 of 6: OwnableMulti.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.7.5;

/**
 * @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 OwnableMulti {
    mapping(address => bool) private _owners;

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _owners[msg.sender] = true;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function isOwner(address _address) public view virtual returns (bool) {
        return _owners[_address];
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owners[msg.sender], "Ownable: caller is not an owner");
        _;
    }

    function addOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0));
        _owners[_newOwner] = true;
    }
}

File 6 of 6: SafeMath.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

//u32
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function add32(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function sub32(uint32 a, uint32 b) internal pure returns (uint32) {
        return sub32(a, b, "SafeMath: subtraction overflow");
    }

    function sub32(
        uint32 a,
        uint32 b,
        string memory errorMessage
    ) internal pure returns (uint32) {
        require(b <= a, errorMessage);
        uint32 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function mul32(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint256 c) {
        if (a > 3) {
            c = a;
            uint256 b = add(div(a, 2), 1);
            while (b < c) {
                c = b;
                b = div(add(div(a, b), b), 2);
            }
        } else if (a != 0) {
            c = 1;
        }
    }

    /*
     * Expects percentage to be trailed by 00,
     */
    function percentageAmount(uint256 total_, uint8 percentage_)
        internal
        pure
        returns (uint256 percentAmount_)
    {
        return div(mul(total_, percentage_), 1000);
    }

    /*
     * Expects percentage to be trailed by 00,
     */
    function substractPercentage(uint256 total_, uint8 percentageToSub_)
        internal
        pure
        returns (uint256 result_)
    {
        return sub(total_, div(mul(total_, percentageToSub_), 1000));
    }

    function percentageOfTotal(uint256 part_, uint256 total_)
        internal
        pure
        returns (uint256 percent_)
    {
        return div(mul(part_, 100), total_);
    }

    /**
     * Taken from Hypersonic https://github.com/M2629/HyperSonic/blob/main/Math.sol
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
    }

    function quadraticPricing(uint256 payment_, uint256 multiplier_)
        internal
        pure
        returns (uint256)
    {
        return sqrrt(mul(multiplier_, payment_));
    }

    function bondingCurve(uint256 supply_, uint256 multiplier_)
        internal
        pure
        returns (uint256)
    {
        return mul(multiplier_, supply_);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_fundsRedeemer","type":"address"},{"internalType":"address","name":"_investToken","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"},{"internalType":"address","name":"_redeemableToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"IssueNRT","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":"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":"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":"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":"totalRedeemed","type":"uint256"},{"internalType":"uint256","name":"totalInvestableExchanged","type":"uint256"},{"internalType":"bool","name":"hasClaimed","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":"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemableToken","outputs":[{"internalType":"contract NRT","name":"","type":"address"}],"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":[],"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":"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"}]

60806040523480156200001157600080fd5b5060405162001c4038038062001c4083398181016040526101808110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516101408b0151610160909b0151999a989997989697959694959394929391929091620000963362000215565b428a11620000d65760405162461bcd60e51b815260040180806020018281038252602181526020018062001bfe6021913960400191505060405180910390fd5b6001600160a01b038c166200011d5760405162461bcd60e51b815260040180806020018281038252602181526020018062001c1f6021913960400191505060405180910390fd5b600180546001600160a01b03808f166001600160a01b03199283161790925560028054928e1692909116919091179055600c8a90556205460089106200019e576040805162461bcd60e51b81526020600482015260116024820152706475726174696f6e20746f6f206c6f6e6760781b604482015290519081900360640190fd5b620001b8898b6200026560201b620015161790919060201c565b600e55600d98909855600f96909655600494909455600592909255600791909155600655600855601055600380546001600160a01b0319166001600160a01b0390921691909117905550506012805461ffff1916905550620002c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082820183811015620002c0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61192780620002d76000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638b65be0811610125578063bc4c3bb3116100ad578063d6fbf2021161007c578063d6fbf202146103cf578063e230fbe7146103d7578063f2fde38b146103df578063f703f36f14610405578063ff6807cb146104535761021c565b8063bc4c3bb31461039a578063c0212d03146103a2578063c683d8e4146103bf578063d2f82536146103c75761021c565b8063a4cea3b2116100f4578063a4cea3b214610372578063a6b513ee1461037a578063b17253e614610382578063b3f05b971461038a578063badf822b146103925761021c565b80638b65be08146103525780638da5cb5b1461035a57806393c7c04e146103625780639d1b464a1461036a5761021c565b806349a433a2116101a857806371b9b6461161017757806371b9b646146102f7578063727dba53146102ff5780637bb501ec14610325578063884aa2001461032d5780638aa5b2c3146103355761021c565b806349a433a2146102c357806369e1da2d146102cb5780636bacc0fa146102d3578063715018a6146102ef5761021c565b806329b8caff116101ef57806329b8caff146102865780632afcf4801461028e578063336a2901146102ab5780633711d9fb146102b357806338771754146102bb5761021c565b8063061873e81461022157806311dc99b31461022b57806312f9b48e1461024f5780631920508d1461026c575b600080fd5b61022961045b565b005b6102336104f9565b604080516001600160a01b039092168252519081900360200190f35b6102336004803603602081101561026557600080fd5b5035610508565b610274610532565b60408051918252519081900360200190f35b610274610538565b610229600480360360208110156102a457600080fd5b503561053e565b6102336108f6565b610274610905565b61027461090b565b610274610911565b610229610917565b6102db610ab5565b604080519115158252519081900360200190f35b610229610ad6565b6102db610b34565b6102746004803603602081101561031557600080fd5b50356001600160a01b0316610b3d565b610274610c07565b610274610c0d565b6102296004803603602081101561034b57600080fd5b5035610c39565b610274610d38565b610233610d3e565b610274610d4d565b610274610d53565b610229610d7a565b610274610fba565b610274610fc0565b6102db610fc6565b610233610fd5565b610274610fe4565b610229600480360360208110156103b857600080fd5b5035610fea565b61022961138c565b6102db611429565b610274611437565b61027461143d565b610229600480360360208110156103f557600080fd5b50356001600160a01b0316611443565b61042b6004803603602081101561041b57600080fd5b50356001600160a01b03166114e6565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b610274611510565b33610464610d3e565b6001600160a01b0316146104ad576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6012805461ff001916610100179055604080516001815242602082015281517fef5fd91dc9b012f3e4b41e00dc71466a39c83d97c3cc3879de5b9193f456c630929181900390910190a1565b6003546001600160a01b031681565b6014818154811061051857600080fd5b6000918252602090912001546001600160a01b0316905081565b60065481565b600b5481565b60125460ff1661058f576040805162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b604482015290519081900360640190fd5b600c544210156105e1576040805162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b604482015290519081900360640190fd5b600554811015610638576040805162461bcd60e51b815260206004820152601760248201527f496e7665737420616d6f756e7420746f6f20736d616c6c000000000000000000604482015290519081900360640190fd5b610640610ab5565b1561068a576040805162461bcd60e51b815260206004820152601560248201527414d85b19481c195c9a5bd9081a185cc8195b991959605a1b604482015290519081900360640190fd5b60075460009061069c90612710611579565b905080600754016106b88360095461151690919063ffffffff16565b111561070b576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d20496e766573746d656e747320726561636865640000000000604482015290519081900360640190fd5b33600090815260136020526040902060045481546107299085611516565b11156107665760405162461bcd60e51b81526004018080602001828103825260218152602001806118416021913960400191505060405180910390fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156107c057600080fd5b505af11580156107d4573d6000803e3d6000fd5b505050506040513d60208110156107ea57600080fd5b505161082f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b805461088057600b805460019081019091556014805491820181556000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b031916331790555b6002810180548401905580548301815560098054840190556108a0610d53565b6011819055600954604080513381526020810187905280820192909252606082019290925290517f4df9cbfa66cbbabb528375b3af00207b446225af5a96b8a4b5c413b18226fb959181900360800190a1505050565b6001546001600160a01b031681565b600d5481565b60045481565b600e5481565b33610920610d3e565b6001600160a01b031614610969576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b600e5442116109b4576040805162461bcd60e51b815260206004820152601260248201527114d85b19481a185cc81b9bdd08195b99195960721b604482015290519081900360640190fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d6020811015610a2957600080fd5b50516002546001546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b158015610a8657600080fd5b505af1158015610a9a573d6000803e3d6000fd5b505050506040513d6020811015610ab057600080fd5b505050565b6000610ace600d54600c5461151690919063ffffffff16565b421190505b90565b33610adf610d3e565b6001600160a01b031614610b28576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b610b3260006115bb565b565b60125460ff1681565b6001600160a01b038116600090815260136020526040812060038101825b8154811015610bff57610b6c6117a2565b828281548110610b7857fe5b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050610bbc600f544261160b90919063ffffffff16565b815110610bf657610bf3838381548110610bd257fe5b9060005260206000209060020201600101548661151690919063ffffffff16565b94505b50600101610b5b565b505050919050565b600c5481565b6000610c34600854610c2e633b9aca0060095461164d90919063ffffffff16565b90611579565b905090565b33610c42610d3e565b6001600160a01b031614610c8b576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b428111610cc95760405162461bcd60e51b81526004018080602001828103825260218152602001806117fa6021913960400191505060405180910390fd5b600c544210610d1f576040805162461bcd60e51b815260206004820152601860248201527f53616c652068617320616c726561647920737461727465640000000000000000604482015290519081900360640190fd5b600c819055600d54610d32908290611516565b600e5550565b600a5481565b6000546001600160a01b031690565b600f5481565b600080610d5e610c0d565b90506010548111610d73575050601054610ad3565b9050610ad3565b601254610100900460ff16610dcb576040805162461bcd60e51b81526020600482015260126024820152711c995919595b481b9bdd08195b98589b195960721b604482015290519081900360640190fd5b600e54421015610e22576040805162461bcd60e51b815260206004820152601d60248201527f54696d6520746f20636c61696d20686173206e6f742061727269766564000000604482015290519081900360640190fd5b336000908152601360205260409020600481015460ff1615610e84576040805162461bcd60e51b8152602060048201526016602482015275151bdad95b9cc8185b1c9958591e4818db185a5b595960521b604482015290519081900360640190fd5b8054610ecc576040805162461bcd60e51b81526020600482015260126024820152714e6f20696e766573746d656e74206d61646560701b604482015290519081900360640190fd5b6011548154600091610ee691610c2e90633b9aca0061164d565b60048301805460ff191660019081179091558301819055600a54909150610f0d9082611516565b600a556003546040805163219e412d60e21b81523360048201526024810184905290516001600160a01b039092169163867904b49160448082019260009290919082900301818387803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b5050604080513381526020810185905281517f3a4841c31c51a7c2deb56faab3917d3951589be071efadac552de6113babc65f9450908190039091019150a15050565b60115481565b60055481565b60125462010000900460ff1681565b6002546001600160a01b031681565b60095481565b60125460ff1661103b576040805162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b604482015290519081900360640190fd5b600c5442101561108d576040805162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b604482015290519081900360640190fd5b600e5442106110d4576040805162461bcd60e51b815260206004820152600e60248201526d14d85b19481a185cc8195b99195960921b604482015290519081900360640190fd5b600754600954106111165760405162461bcd60e51b815260040180806020018281038252603d8152602001806117bd603d913960400191505060405180910390fd5b6006548111156111575760405162461bcd60e51b815260040180806020018281038252602d815260200180611884602d913960400191505060405180910390fd5b33600090815260136020526040902080548211156111bc576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f742052656d6f7665206d6f7265207468616e20696e766573746564604482015290519081900360640190fd5b6003810160006111d76111ce33610b3d565b6006549061160b565b9050808411156112185760405162461bcd60e51b81526004018080602001828103825260228152602001806118626022913960400191505060405180910390fd5b6040805180820182524281526020808201878152855460018181018855600088815284812095516002938402909601958655925194019390935586830180548901905586548890038755600980548990039055915483516323b872dd60e01b81523060048201523360248201526044810189905293516001600160a01b03909116936323b872dd9360648083019493928390030190829087803b1580156112be57600080fd5b505af11580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505161132d576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b611335610d53565b6011819055600954604080513381526020810188905280820192909252606082019290925290517f5b938ffadc562aeed2a41670639ca329cc324ab076745a80f2849467dec6e45a9181900360800190a150505050565b33611395610d3e565b6001600160a01b0316146113de576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6012805460ff191660019081179091556040805191825242602083015280517f020b56eb5031e351b28c7914a3185d679342016d533b3fe0d056b43fe5ecb8689281900390910190a1565b601254610100900460ff1681565b60105481565b60075481565b3361144c610d3e565b6001600160a01b031614611495576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6001600160a01b0381166114da5760405162461bcd60e51b815260040180806020018281038252602681526020018061181b6026913960400191505060405180910390fd5b6114e3816115bb565b50565b60136020526000908152604090208054600182015460028301546004909301549192909160ff1684565b60085481565b600082820183811015611570576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061157083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061157083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611748565b60008261165c57506000611573565b8282028284828161166957fe5b04146115705760405162461bcd60e51b81526004018080602001828103825260218152602001806118b16021913960400191505060405180910390fd5b600081836117325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116f75781810151838201526020016116df565b50505050905090810190601f1680156117245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161173e57fe5b0495945050505050565b6000818484111561179a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156116f75781810151838201526020016116df565b505050900390565b60405180604001604052806000815260200160008152509056fe4d6178696d756d20496e766573746d656e747320726561636865642c206465706f736974732f7769746864726177616c206172652064697361626c656453746172742074696d65206d75737420626520696e20746865206675747572652e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617820696e646976696475616c20696e766573746d656e7420726561636865644d6178207769746864726177207265616368656420666f72207468697320686f757243616e6e6f742072656d6f7665206d6f7265207468616e20746865206d6178696d756d20627920706572696f64536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220347c14a65b3a8c1209b90aab695eef330788f8f55bcd50b0d2bfbfa87e497b6564736f6c6343000705003353746172742074696d65206d75737420626520696e20746865206675747572652e66756e647352656465656d65722061646472657373206973206e6f74207365742e0000000000000000000000000e93e7ef52dcc294d4f7e3d3c90e34126d59d57a000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d0000000000000000000000000000000000000000000000000000000061cb4290000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000000000000000000000000054b40b1f852bda00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000081dae2083e4c4e7f7ef117e3e3ef4969c567e732

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80638b65be0811610125578063bc4c3bb3116100ad578063d6fbf2021161007c578063d6fbf202146103cf578063e230fbe7146103d7578063f2fde38b146103df578063f703f36f14610405578063ff6807cb146104535761021c565b8063bc4c3bb31461039a578063c0212d03146103a2578063c683d8e4146103bf578063d2f82536146103c75761021c565b8063a4cea3b2116100f4578063a4cea3b214610372578063a6b513ee1461037a578063b17253e614610382578063b3f05b971461038a578063badf822b146103925761021c565b80638b65be08146103525780638da5cb5b1461035a57806393c7c04e146103625780639d1b464a1461036a5761021c565b806349a433a2116101a857806371b9b6461161017757806371b9b646146102f7578063727dba53146102ff5780637bb501ec14610325578063884aa2001461032d5780638aa5b2c3146103355761021c565b806349a433a2146102c357806369e1da2d146102cb5780636bacc0fa146102d3578063715018a6146102ef5761021c565b806329b8caff116101ef57806329b8caff146102865780632afcf4801461028e578063336a2901146102ab5780633711d9fb146102b357806338771754146102bb5761021c565b8063061873e81461022157806311dc99b31461022b57806312f9b48e1461024f5780631920508d1461026c575b600080fd5b61022961045b565b005b6102336104f9565b604080516001600160a01b039092168252519081900360200190f35b6102336004803603602081101561026557600080fd5b5035610508565b610274610532565b60408051918252519081900360200190f35b610274610538565b610229600480360360208110156102a457600080fd5b503561053e565b6102336108f6565b610274610905565b61027461090b565b610274610911565b610229610917565b6102db610ab5565b604080519115158252519081900360200190f35b610229610ad6565b6102db610b34565b6102746004803603602081101561031557600080fd5b50356001600160a01b0316610b3d565b610274610c07565b610274610c0d565b6102296004803603602081101561034b57600080fd5b5035610c39565b610274610d38565b610233610d3e565b610274610d4d565b610274610d53565b610229610d7a565b610274610fba565b610274610fc0565b6102db610fc6565b610233610fd5565b610274610fe4565b610229600480360360208110156103b857600080fd5b5035610fea565b61022961138c565b6102db611429565b610274611437565b61027461143d565b610229600480360360208110156103f557600080fd5b50356001600160a01b0316611443565b61042b6004803603602081101561041b57600080fd5b50356001600160a01b03166114e6565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b610274611510565b33610464610d3e565b6001600160a01b0316146104ad576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6012805461ff001916610100179055604080516001815242602082015281517fef5fd91dc9b012f3e4b41e00dc71466a39c83d97c3cc3879de5b9193f456c630929181900390910190a1565b6003546001600160a01b031681565b6014818154811061051857600080fd5b6000918252602090912001546001600160a01b0316905081565b60065481565b600b5481565b60125460ff1661058f576040805162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b604482015290519081900360640190fd5b600c544210156105e1576040805162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b604482015290519081900360640190fd5b600554811015610638576040805162461bcd60e51b815260206004820152601760248201527f496e7665737420616d6f756e7420746f6f20736d616c6c000000000000000000604482015290519081900360640190fd5b610640610ab5565b1561068a576040805162461bcd60e51b815260206004820152601560248201527414d85b19481c195c9a5bd9081a185cc8195b991959605a1b604482015290519081900360640190fd5b60075460009061069c90612710611579565b905080600754016106b88360095461151690919063ffffffff16565b111561070b576040805162461bcd60e51b815260206004820152601b60248201527f4d6178696d756d20496e766573746d656e747320726561636865640000000000604482015290519081900360640190fd5b33600090815260136020526040902060045481546107299085611516565b11156107665760405162461bcd60e51b81526004018080602001828103825260218152602001806118416021913960400191505060405180910390fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156107c057600080fd5b505af11580156107d4573d6000803e3d6000fd5b505050506040513d60208110156107ea57600080fd5b505161082f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b805461088057600b805460019081019091556014805491820181556000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b031916331790555b6002810180548401905580548301815560098054840190556108a0610d53565b6011819055600954604080513381526020810187905280820192909252606082019290925290517f4df9cbfa66cbbabb528375b3af00207b446225af5a96b8a4b5c413b18226fb959181900360800190a1505050565b6001546001600160a01b031681565b600d5481565b60045481565b600e5481565b33610920610d3e565b6001600160a01b031614610969576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b600e5442116109b4576040805162461bcd60e51b815260206004820152601260248201527114d85b19481a185cc81b9bdd08195b99195960721b604482015290519081900360640190fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d6020811015610a2957600080fd5b50516002546001546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b158015610a8657600080fd5b505af1158015610a9a573d6000803e3d6000fd5b505050506040513d6020811015610ab057600080fd5b505050565b6000610ace600d54600c5461151690919063ffffffff16565b421190505b90565b33610adf610d3e565b6001600160a01b031614610b28576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b610b3260006115bb565b565b60125460ff1681565b6001600160a01b038116600090815260136020526040812060038101825b8154811015610bff57610b6c6117a2565b828281548110610b7857fe5b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050610bbc600f544261160b90919063ffffffff16565b815110610bf657610bf3838381548110610bd257fe5b9060005260206000209060020201600101548661151690919063ffffffff16565b94505b50600101610b5b565b505050919050565b600c5481565b6000610c34600854610c2e633b9aca0060095461164d90919063ffffffff16565b90611579565b905090565b33610c42610d3e565b6001600160a01b031614610c8b576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b428111610cc95760405162461bcd60e51b81526004018080602001828103825260218152602001806117fa6021913960400191505060405180910390fd5b600c544210610d1f576040805162461bcd60e51b815260206004820152601860248201527f53616c652068617320616c726561647920737461727465640000000000000000604482015290519081900360640190fd5b600c819055600d54610d32908290611516565b600e5550565b600a5481565b6000546001600160a01b031690565b600f5481565b600080610d5e610c0d565b90506010548111610d73575050601054610ad3565b9050610ad3565b601254610100900460ff16610dcb576040805162461bcd60e51b81526020600482015260126024820152711c995919595b481b9bdd08195b98589b195960721b604482015290519081900360640190fd5b600e54421015610e22576040805162461bcd60e51b815260206004820152601d60248201527f54696d6520746f20636c61696d20686173206e6f742061727269766564000000604482015290519081900360640190fd5b336000908152601360205260409020600481015460ff1615610e84576040805162461bcd60e51b8152602060048201526016602482015275151bdad95b9cc8185b1c9958591e4818db185a5b595960521b604482015290519081900360640190fd5b8054610ecc576040805162461bcd60e51b81526020600482015260126024820152714e6f20696e766573746d656e74206d61646560701b604482015290519081900360640190fd5b6011548154600091610ee691610c2e90633b9aca0061164d565b60048301805460ff191660019081179091558301819055600a54909150610f0d9082611516565b600a556003546040805163219e412d60e21b81523360048201526024810184905290516001600160a01b039092169163867904b49160448082019260009290919082900301818387803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b5050604080513381526020810185905281517f3a4841c31c51a7c2deb56faab3917d3951589be071efadac552de6113babc65f9450908190039091019150a15050565b60115481565b60055481565b60125462010000900460ff1681565b6002546001600160a01b031681565b60095481565b60125460ff1661103b576040805162461bcd60e51b815260206004820152601760248201527614d85b19481a5cc81b9bdd08195b98589b1959081e595d604a1b604482015290519081900360640190fd5b600c5442101561108d576040805162461bcd60e51b815260206004820152601860248201527714d85b19481a185cc81b9bdd081cdd185c9d1959081e595d60421b604482015290519081900360640190fd5b600e5442106110d4576040805162461bcd60e51b815260206004820152600e60248201526d14d85b19481a185cc8195b99195960921b604482015290519081900360640190fd5b600754600954106111165760405162461bcd60e51b815260040180806020018281038252603d8152602001806117bd603d913960400191505060405180910390fd5b6006548111156111575760405162461bcd60e51b815260040180806020018281038252602d815260200180611884602d913960400191505060405180910390fd5b33600090815260136020526040902080548211156111bc576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f742052656d6f7665206d6f7265207468616e20696e766573746564604482015290519081900360640190fd5b6003810160006111d76111ce33610b3d565b6006549061160b565b9050808411156112185760405162461bcd60e51b81526004018080602001828103825260228152602001806118626022913960400191505060405180910390fd5b6040805180820182524281526020808201878152855460018181018855600088815284812095516002938402909601958655925194019390935586830180548901905586548890038755600980548990039055915483516323b872dd60e01b81523060048201523360248201526044810189905293516001600160a01b03909116936323b872dd9360648083019493928390030190829087803b1580156112be57600080fd5b505af11580156112d2573d6000803e3d6000fd5b505050506040513d60208110156112e857600080fd5b505161132d576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b611335610d53565b6011819055600954604080513381526020810188905280820192909252606082019290925290517f5b938ffadc562aeed2a41670639ca329cc324ab076745a80f2849467dec6e45a9181900360800190a150505050565b33611395610d3e565b6001600160a01b0316146113de576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6012805460ff191660019081179091556040805191825242602083015280517f020b56eb5031e351b28c7914a3185d679342016d533b3fe0d056b43fe5ecb8689281900390910190a1565b601254610100900460ff1681565b60105481565b60075481565b3361144c610d3e565b6001600160a01b031614611495576040805162461bcd60e51b815260206004820181905260248201526000805160206118d2833981519152604482015290519081900360640190fd5b6001600160a01b0381166114da5760405162461bcd60e51b815260040180806020018281038252602681526020018061181b6026913960400191505060405180910390fd5b6114e3816115bb565b50565b60136020526000908152604090208054600182015460028301546004909301549192909160ff1684565b60085481565b600082820183811015611570576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061157083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061157083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611748565b60008261165c57506000611573565b8282028284828161166957fe5b04146115705760405162461bcd60e51b81526004018080602001828103825260218152602001806118b16021913960400191505060405180910390fd5b600081836117325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116f75781810151838201526020016116df565b50505050905090810190601f1680156117245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161173e57fe5b0495945050505050565b6000818484111561179a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156116f75781810151838201526020016116df565b505050900390565b60405180604001604052806000815260200160008152509056fe4d6178696d756d20496e766573746d656e747320726561636865642c206465706f736974732f7769746864726177616c206172652064697361626c656453746172742074696d65206d75737420626520696e20746865206675747572652e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617820696e646976696475616c20696e766573746d656e7420726561636865644d6178207769746864726177207265616368656420666f72207468697320686f757243616e6e6f742072656d6f7665206d6f7265207468616e20746865206d6178696d756d20627920706572696f64536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220347c14a65b3a8c1209b90aab695eef330788f8f55bcd50b0d2bfbfa87e497b6564736f6c63430007050033

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

0000000000000000000000000e93e7ef52dcc294d4f7e3d3c90e34126d59d57a000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d0000000000000000000000000000000000000000000000000000000061cb4290000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000000000000000000000000054b40b1f852bda00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000081dae2083e4c4e7f7ef117e3e3ef4969c567e732

-----Decoded View---------------
Arg [0] : _fundsRedeemer (address): 0x0e93e7Ef52dCC294d4F7E3d3C90e34126D59d57a
Arg [1] : _investToken (address): 0x130966628846BFd36ff31a822705796e8cb8C18D
Arg [2] : _launchStartTime (uint256): 1640710800
Arg [3] : _saleDuration (uint256): 172800
Arg [4] : _investRemovalDelay (uint256): 3600
Arg [5] : _maxInvestAllowed (uint256): 25000000000000000000000
Arg [6] : _minInvestAllowed (uint256): 0
Arg [7] : _maxInvestRemovablePerPeriod (uint256): 10000000000000000000000
Arg [8] : _maxGlobalInvestAllowed (uint256): 10000000000000000000000000
Arg [9] : _maxRedeemableToIssue (uint256): 4000000000000000
Arg [10] : _startingPrice (uint256): 800000000000000000
Arg [11] : _redeemableToken (address): 0x81DAE2083e4C4e7F7eF117e3E3ef4969c567E732

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000e93e7ef52dcc294d4f7e3d3c90e34126d59d57a
Arg [1] : 000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d
Arg [2] : 0000000000000000000000000000000000000000000000000000000061cb4290
Arg [3] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [5] : 00000000000000000000000000000000000000000000054b40b1f852bda00000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [8] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [9] : 000000000000000000000000000000000000000000000000000e35fa931a0000
Arg [10] : 0000000000000000000000000000000000000000000000000b1a2bc2ec500000
Arg [11] : 00000000000000000000000081dae2083e4c4e7f7ef117e3e3ef4969c567e732


Deployed Bytecode Sourcemap

422:10529:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10065:129;;;:::i;:::-;;676:26;;;:::i;:::-;;;;-1:-1:-1;;;;;676:26:1;;;;;;;;;;;;;;2373:29;;;;;;;;;;;;;;;;-1:-1:-1;2373:29:1;;:::i;796:42::-;;;:::i;:::-;;;;;;;;;;;;;;;;1020:29;;;:::i;4227:1541::-;;;;;;;;;;;;;;;;-1:-1:-1;4227:1541:1;;:::i;501:28::-;;;:::i;1170:27::-;;;:::i;722:31::-;;;:::i;1246:28::-;;;:::i;10200:405::-;;;:::i;9767:126::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;1647:101:3;;;:::i;1488:23:1:-;;;:::i;5872:641::-;;;;;;;;;;;;;;;;-1:-1:-1;5872:641:1;-1:-1:-1;;;;;5872:641:1;;:::i;1105:30::-;;;:::i;9629:132::-;;;:::i;10611:338::-;;;;;;;;;;;;;;;;-1:-1:-1;10611:338:1;;:::i;982:32::-;;;:::i;1017:85:3:-;;;:::i;1332:33:1:-;;;:::i;9397:226::-;;;:::i;8633:713::-;;;:::i;1418:25::-;;;:::i;759:31::-;;;:::i;1548:21::-;;;:::i;575:26::-;;;:::i;942:34::-;;;:::i;6662:1882::-;;;;;;;;;;;;;;;;-1:-1:-1;6662:1882:1;;:::i;9936:123::-;;;:::i;1517:25::-;;;:::i;1384:28::-;;;:::i;844:37::-;;;:::i;1897:232:3:-;;;;;;;;;;;;;;;;-1:-1:-1;1897:232:3;-1:-1:-1;;;;;1897:232:3;;:::i;2312:55:1:-;;;;;;;;;;;;;;;;-1:-1:-1;2312:55:1;-1:-1:-1;;;;;2312:55:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;887:35;;;:::i;10065:129::-;1240:10:3;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;10116:13:1::1;:20:::0;;-1:-1:-1;;10116:20:1::1;;;::::0;;10151:36:::1;::::0;;10132:4:::1;10151:36:::0;;10171:15:::1;10151:36;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;10065:129::o:0;676:26::-;;;-1:-1:-1;;;;;676:26:1;;:::o;2373:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2373:29:1;;-1:-1:-1;2373:29:1;:::o;796:42::-;;;;:::o;1020:29::-;;;;:::o;4227:1541::-;4292:11;;;;4284:47;;;;;-1:-1:-1;;;4284:47:1;;;;;;;;;;;;-1:-1:-1;;;4284:47:1;;;;;;;;;;;;;;;4368:15;;4349;:34;;4341:71;;;;;-1:-1:-1;;;4341:71:1;;;;;;;;;;;;-1:-1:-1;;;4341:71:1;;;;;;;;;;;;;;;4448:16;;4430:14;:34;;4422:70;;;;;-1:-1:-1;;;4422:70:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4511:14;:12;:14::i;:::-;4510:15;4502:49;;;;;-1:-1:-1;;;4502:49:1;;;;;;;;;;;;-1:-1:-1;;;4502:49:1;;;;;;;;;;;;;;;4578:22;;4561:14;;4578:33;;4605:5;4578:26;:33::i;:::-;4561:50;;4710:6;4685:22;;:31;4642:39;4666:14;4642:19;;:23;;:39;;;;:::i;:::-;:74;;4621:148;;;;;-1:-1:-1;;;4621:148:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4828:10;4780:29;4812:27;;;:15;:27;;;;;4916:16;;4870:22;;:42;;4897:14;4870:26;:42::i;:::-;:62;;4849:142;;;;-1:-1:-1;;;4849:142:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5047:11;;5041:136;;;-1:-1:-1;;;5041:136:1;;5090:10;5041:136;;;;5126:4;5041:136;;;;;;;;;;;;-1:-1:-1;;;;;5047:11:1;;;;5041:31;;:136;;;;;;;;;;;;;;;5047:11;;5041:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5041:136:1;5020:198;;;;;-1:-1:-1;;;5020:198:1;;;;;;;;;;;;-1:-1:-1;;;5020:198:1;;;;;;;;;;;;;;;5232:22;;5228:120;;5275:14;:19;;5293:1;5275:19;;;;;;5308:12;:29;;;;;;;5275:14;5308:29;;;;;-1:-1:-1;;;;;;5308:29:1;5326:10;5308:29;;;5228:120;5357:33;;;:51;;;;;;5418:40;;;;;;5468:19;:37;;;;;;5607:14;:12;:14::i;:::-;5594:10;:27;;;5708:19;;5636:125;;;5656:10;5636:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4227:1541;;;:::o;501:28::-;;;-1:-1:-1;;;;;501:28:1;;:::o;1170:27::-;;;;:::o;722:31::-;;;;:::o;1246:28::-;;;;:::o;10200:405::-;1240:10:3;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;10287:13:1::1;;10269:15;:31;10261:62;;;::::0;;-1:-1:-1;;;10261:62:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10261:62:1;;;;;;;;;;;;;::::1;;10356:11;::::0;10350:43:::1;::::0;;-1:-1:-1;;;10350:43:1;;10387:4:::1;10350:43;::::0;::::1;::::0;;;10333:14:::1;::::0;-1:-1:-1;;;;;10356:11:1::1;::::0;10350:28:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;10356:11;10350:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;10350:43:1;10409:11:::1;::::0;;10431:13;10403:50:::1;::::0;;-1:-1:-1;;;10403:50:1;;-1:-1:-1;;;;;10431:13:1;;::::1;10403:50;::::0;::::1;::::0;;;;;;;;;10350:43;;-1:-1:-1;10409:11:1;::::1;::::0;10403:27:::1;::::0;:50;;;;;10350:43:::1;::::0;10403:50;;;;;;;;10409:11:::1;::::0;10403:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;10200:405:1:o;9767:126::-;9812:4;9853:33;9873:12;;9853:15;;:19;;:33;;;;:::i;:::-;9835:15;:51;9828:58;;9767:126;;:::o;1647:101:3:-;1240:10;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;1711:30:::1;1738:1;1711:18;:30::i;:::-;1647:101::o:0;1488:23:1:-;;;;;;:::o;5872:641::-;-1:-1:-1;;;;;6046:25:1;;5969:29;6046:25;;;:15;:25;;;;;6121:24;;;5969:29;6155:352;6179:22;;6175:26;;6155:352;;;6222:26;;:::i;:::-;6251:15;6267:1;6251:18;;;;;;;;;;;;;;;;;;6222:47;;;;;;;;;;;;;;;;;;;;;;;;;;;6309:39;6329:18;;6309:15;:19;;:39;;;;:::i;:::-;6287:18;;:61;6283:214;;6392:90;6439:15;6455:1;6439:18;;;;;;;;;;;;;;;;;;:25;;;6392:21;:25;;:90;;;;:::i;:::-;6368:114;;6283:214;-1:-1:-1;6203:3:1;;6155:352;;;;5872:641;;;;;:::o;1105:30::-;;;;:::o;9629:132::-;9674:7;9700:54;9733:20;;9700:28;9724:3;9700:19;;:23;;:28;;;;:::i;:::-;:32;;:54::i;:::-;9693:61;;9629:132;:::o;10611:338::-;1240:10:3;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;10698:15:1::1;10688:7;:25;10680:71;;;;-1:-1:-1::0;;;10680:71:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10787:15;;10769;:33;10761:70;;;::::0;;-1:-1:-1;;;10761:70:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10841:15;:25:::0;;;10929:12:::1;::::0;10917:25:::1;::::0;10859:7;;10917:11:::1;:25::i;:::-;10901:13;:41:::0;-1:-1:-1;10611:338:1:o;982:32::-;;;;:::o;1017:85:3:-;1063:7;1089:6;-1:-1:-1;;;;;1089:6:3;1017:85;:::o;1332:33:1:-;;;;:::o;9397:226::-;9442:7;9461:13;9477:14;:12;:14::i;:::-;9461:30;;9514:13;;9505:5;:22;9501:116;;-1:-1:-1;;9550:13:1;;9543:20;;9501:116;9601:5;-1:-1:-1;9594:12:1;;8633:713;8685:13;;;;;;;8677:44;;;;;-1:-1:-1;;;8677:44:1;;;;;;;;;;;;-1:-1:-1;;;8677:44:1;;;;;;;;;;;;;;;8758:13;;8739:15;:32;;8731:74;;;;;-1:-1:-1;;;8731:74:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;8864:10;8816:29;8848:27;;;:15;:27;;;;;8894:19;;;;;;8893:20;8885:55;;;;;-1:-1:-1;;;8885:55:1;;;;;;;;;;;;-1:-1:-1;;;8885:55:1;;;;;;;;;;;;;;;8958:22;;8950:57;;;;;-1:-1:-1;;;8950:57:1;;;;;;;;;;;;-1:-1:-1;;;8950:57:1;;;;;;;;;;;;;;;9078:10;;9040:22;;9018:19;;9040:49;;:33;;9067:5;9040:26;:33::i;:49::-;9099:19;;;:26;;-1:-1:-1;;9099:26:1;9121:4;9099:26;;;;;;9135:22;;:36;;;9201:17;;9018:71;;-1:-1:-1;9201:34:1;;9018:71;9201:21;:34::i;:::-;9181:17;:54;9245:15;;:46;;;-1:-1:-1;;;9245:46:1;;9267:10;9245:46;;;;;;;;;;;;-1:-1:-1;;;;;9245:15:1;;;;:21;;:46;;;;;:15;;:46;;;;;;;;:15;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9306:33:1;;;9315:10;9306:33;;;;;;;;;;;;-1:-1:-1;9306:33:1;;;;;;;;-1:-1:-1;9306:33:1;8633:713;;:::o;1418:25::-;;;;:::o;759:31::-;;;;:::o;1548:21::-;;;;;;;;;:::o;575:26::-;;;-1:-1:-1;;;;;575:26:1;;:::o;942:34::-;;;;:::o;6662:1882::-;6737:11;;;;6729:47;;;;;-1:-1:-1;;;6729:47:1;;;;;;;;;;;;-1:-1:-1;;;6729:47:1;;;;;;;;;;;;;;;6813:15;;6794;:34;;6786:71;;;;;-1:-1:-1;;;6786:71:1;;;;;;;;;;;;-1:-1:-1;;;6786:71:1;;;;;;;;;;;;;;;6893:13;;6875:15;:31;6867:58;;;;;-1:-1:-1;;;6867:58:1;;;;;;;;;;;;-1:-1:-1;;;6867:58:1;;;;;;;;;;;;;;;6978:22;;6956:19;;:44;6935:152;;;;-1:-1:-1;;;6935:152:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7123:27;;7105:14;:45;;7097:103;;;;-1:-1:-1;;;7097:103:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7259:10;7211:29;7243:27;;;:15;:27;;;;;7375:22;;7357:40;;;7336:119;;;;;-1:-1:-1;;;7336:119:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7564:24;;;7525:36;7627:91;7672:36;7697:10;7672:24;:36::i;:::-;7627:27;;;:31;:91::i;:::-;7598:120;;7767:18;7749:14;:36;;7728:117;;;;-1:-1:-1;;;7728:117:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7889:64;;;;;;;;7912:15;7889:64;;;;;;;;;7855:108;;;;;;;;-1:-1:-1;7855:108:1;;;;;;;;;;;;;;;;;;;;;;;;;;7992:33;;;:51;;;;;;8053:40;;;;;;;8103:19;:37;;;;;;;8177:11;;8171:136;;-1:-1:-1;;;8171:136:1;;8228:4;8171:136;;;;8251:10;8171:136;;;;;;;;;;;;-1:-1:-1;;;;;8177:11:1;;;;8171:31;;:136;;;;;7889:64;8171:136;;;;;;;;8177:11;8171:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8171:136:1;8150:198;;;;;-1:-1:-1;;;8150:198:1;;;;;;;;;;;;-1:-1:-1;;;8150:198:1;;;;;;;;;;;;;;;8372:14;:12;:14::i;:::-;8359:10;:27;;;8484:19;;8402:135;;;8432:10;8402:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6662:1882;;;;:::o;9936:123::-;1240:10:3;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;9985:11:1::1;:18:::0;;-1:-1:-1;;9985:18:1::1;9999:4;9985:18:::0;;::::1;::::0;;;10018:34:::1;::::0;;;;;10036:15:::1;10018:34;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;9936:123::o:0;1517:25::-;;;;;;;;;:::o;1384:28::-;;;;:::o;844:37::-;;;;:::o;1897:232:3:-;1240:10;1229:7;:5;:7::i;:::-;-1:-1:-1;;;;;1229:21:3;;1221:66;;;;;-1:-1:-1;;;1221:66:3;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:66:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;1998:22:3;::::1;1977:107;;;;-1:-1:-1::0;;;1977:107:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2094:28;2113:8;2094:18;:28::i;:::-;1897:232:::0;:::o;2312:55:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;887:35::-;;;;:::o;99:176:5:-;157:7;188:5;;;211:6;;;;203:46;;;;;-1:-1:-1;;;203:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;267:1;-1:-1:-1;99:176:5;;;;;:::o;1678:130::-;1736:7;1762:39;1766:1;1769;1762:39;;;;;;;;;;;;;;;;;:3;:39::i;2283:187:3:-;2356:16;2375:6;;-1:-1:-1;;;;;2391:17:3;;;-1:-1:-1;;;;;;2391:17:3;;;;;;2423:40;;2375:6;;;;;;;2423:40;;2356:16;2423:40;2283:187;;:::o;461:134:5:-;519:7;545:43;549:1;552;545:43;;;;;;;;;;;;;;;;;:3;:43::i;1186:241::-;1244:7;1267:6;1263:45;;-1:-1:-1;1296:1:5;1289:8;;1263:45;1330:5;;;1334:1;1330;:5;:1;1353:5;;;;;:10;1345:56;;;;-1:-1:-1;;;1345:56:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1814:215;1930:7;1964:12;1957:5;1949:28;;;;-1:-1:-1;;;1949:28:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1987:9;2003:1;1999;:5;;;;;;;1814:215;-1:-1:-1;;;;;1814:215:5:o;601:217::-;717:7;752:12;744:6;;;;736:29;;;;-1:-1:-1;;;736:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;787:5:5;;;601:217::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://347c14a65b3a8c1209b90aab695eef330788f8f55bcd50b0d2bfbfa87e497b65

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.