Contract 0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb 5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x44cfe7954fd24e0ac9fa47cb3befaeb8697ff696099c28b702256479afaccb09Withdraw Tokens275571302022-04-25 11:53:3761 days 2 hrs ago0x4e5b3043feb9f939448e2f791a66c4ea65a315a8 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.006669581775 136.191737644
0xa4a04c6e16b4df95fce031c97e36ef0f4e8fe90729124e5f069afb6e3a630c86Claim Tokens232302482022-01-01 17:43:33174 days 20 hrs ago0x517beba5434d7bbcf0660c3bae5acbd9e6b6d5af IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0025961155100.43
0xbdf625bcb50a8d4b138789127b2c309ddc2a30f4fa5af3ad7d6970facf3b4380Claim Tokens182202152021-08-21 5:14:05308 days 8 hrs ago0xdf73dbe9020fd06e52644f4bbc8ed449db29abd2 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0004292255
0x7f9869c0d40254fa50cc8d32d77b272b2d9fb6e2ef0e9090789c37c20198e07fClaim Tokens180244562021-08-15 23:29:51313 days 14 hrs ago0x1b4600b4d2986ae9852a59180516668dc6f9f0f2 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000858450011.000000013
0x244200ea165c084bdf603da7e16cd130ec52cbcea86f00b0bd11702868b8b74cClaim Tokens179963492021-08-15 3:29:09314 days 10 hrs ago0x397888602699b3482f38950e902ef3f5ab0f7ce2 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000858450011.000000013
0x92e7dfaee8d4079dc56296bc80fb112bf3dfaf686bbb13fa68e40d5760779e51Claim Tokens177662792021-08-08 19:20:56320 days 18 hrs ago0xcc8a8db32ca9fb50c6602b4d1bca1118c57b5acc IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000210661061.0001
0xbbdd0c067ae23796fd54508abba4ac27a349f6e6900713d5ee7ed223c52b09b8Claim Tokens177633942021-08-08 17:32:50320 days 20 hrs ago0x44da33bbe2735c84774358e57ee5c58e390e634c IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0008837412
0xbf5a92184f5ad1387ad63eed84b0ea332e671e7576214d48e98c037b15b58526Claim Tokens176979022021-08-06 23:34:52322 days 14 hrs ago0x2eeec192b331c442997f9e19bc763da5478bf07a IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.000445035.00000001
0xe94dc7f3db8ed9ac2af814286d7de89da8da29562118a5a190ac197b248b7419Claim Tokens176794192021-08-06 11:33:00323 days 2 hrs ago0x1cb89be22732b2404cd885542c794e5c611f10e4 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0089006100
0x4a75c8a330881e939d6c2acf235090c6e985b26f061bdd1c459f5c93dc9a1c79Claim Tokens176346542021-08-05 3:41:27324 days 10 hrs ago0x7e4fa08ba9b7cc7d518a09f17d539087decd060f IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0002857982663.211000001
0x211f30333cf03f905ed87b70395325e80b7580538c47c01e59ee308072bda9e6Claim Tokens176114232021-08-04 12:09:41325 days 1 hr ago0x92d495ad4e02c3429cf2c115bac9179e0a0a8f85 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000890061
0x7c5b105f9a4d309736a8e49577329f71550efd206e5d494fc073c1cd5d3902feClaim Tokens175573742021-08-03 3:11:39326 days 10 hrs ago0xda9d483a50dac944f03b76c657f863861cb342d7 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.000089896061.01
0x6430ff9266bfe5bf66795cb10e9faf4d5ccb91b0b82d85eb1cb82a3eb8757b5bClaim Tokens175398432021-08-02 16:17:49326 days 21 hrs ago0x397038985bae9ae4a8d2ab38682963e4a351a4b1 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.00151310217
0xd5e03822bf56042098bbfe41c9736b2277a2ab5317729ad63bf962b545642a8dClaim Tokens175301392021-08-02 9:49:03327 days 4 hrs ago0x8dbdb59c99f4b4caf7fffc288a2e8653902dae2f IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000890060081.0000001
0x92e40bee3fa11cff110b30cb0ff2f81c3449d12919e5c49ed2a535a17166850cClaim Tokens175235492021-08-02 5:08:33327 days 8 hrs ago0x0b9dfd38542cc9f69a69c65cada77ac24dbcfab0 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000890060081.0000001
0xdbdee7a8ec946b7fd7a625a47c597f66ba237a7dc1075b42d47cac87d6e9f299Claim Tokens175181702021-08-02 1:48:21327 days 12 hrs ago0x5aa8f224b3028a5782ede52cbca82d2be7cd66ac IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0000890060881.000000999
0x6f817efbbaf8f35cf7dcfcf6c950791fdfdf9438d92653da5292708c4a901089Claim Tokens175164302021-08-02 0:43:53327 days 13 hrs ago0x1ebb73f5f47bcc3d7dc1dabf7284875e3ae40e07 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0003136160643.523538461
0x59f8a1a7bc42ae0a2208f440c56652ab1b4e587a13c32a66de3888bd8f205d6bClaim Tokens175016332021-08-01 15:46:43327 days 22 hrs ago0xf194e89f9890ae474e0b9d11f2bf605afb83d998 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0001028030061.155012098
0xe8c47beeb0c1350cb2dc080909d22e8bbdba0a0ad01b2e6ddccbcef7cd98de54Claim Tokens175011802021-08-01 15:30:55327 days 22 hrs ago0x0a9d9b833390e49809668b97a6bf29e571e00265 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0001824632782.050010999
0xbfb69bddd04f50ebec8d327d4c5125e6ff8cdf886ad8a045a358eb5bdfac78eeClaim Tokens175003552021-08-01 15:00:29327 days 22 hrs ago0x96dafc16a42db1206d550159387f73886d7d6600 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.00009790661.1
0x3eff8643cd41e12d27a3297b09e2713f0dca4c693b24edaba5666bf8fae97c91Claim Tokens174993582021-08-01 14:24:03327 days 23 hrs ago0x86104418ab7cfbc3871bfa2d4f8e0947c855b42b IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0267018300
0xbbaad3796f308aa17811a1aae817051a252d8ff939c9535e2b6b9d64a10eb33cClaim Tokens174991592021-08-01 14:17:13327 days 23 hrs ago0x7edcd277f0918e0b56fa9174b98708d7177c253d IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.00009790661.1
0x434f3b0b80f1392f30b00e77d4c4d234355b174396189202bb4d615160c43a75Claim Tokens174799502021-08-01 1:56:55328 days 12 hrs ago0xe751970824f3bcbf97e611e351c1136776be1ce9 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.0001421603831.597200001
0x7a8750f44828ebe35ee2c191823f369d8f26f0cb7d192b972fc2e709f5c8f758Claim Tokens174773372021-08-01 0:16:25328 days 13 hrs ago0x6d27e60056c97cf70dcac767e35719004c59f756 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.000098796661.110000002
0x1725a89301fe31934364d4d27cc7a29dae3e8f8565194c61eb480b5f1e690f49Claim Tokens174770842021-08-01 0:07:43328 days 13 hrs ago0x0cab19b2e52dc6c175b7c4d6280e98a892b30764 IN  0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0 MATIC0.000098796661.110000002
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x15b9b64d96016b5ecc0232200c12d09bff29a1f3da00b6c6e2f8e7cfe41377c1173653762021-07-28 17:15:49331 days 20 hrs ago 0x86dac92def5314e5ce14fd3ec6f7748c6875e5fb0x4e5b3043feb9f939448e2f791a66c4ea65a315a8346,347.7942 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenSale

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at polygonscan.com on 2021-07-25
*/

/**
 *Submitted for verification at Etherscan.io on 2021-07-23
*/

// SPDX-License-Identifier: MIT

/*
 *       $$$$$$_$$__$$__$$$$__$$$$$$
 *       ____$$_$$__$$_$$_______$$
 *       ____$$_$$__$$__$$$$____$$
 *       $$__$$_$$__$$_____$$___$$
 *       _$$$$___$$$$___$$$$____$$
 *
 *       $$__$$_$$$$$$_$$$$$__$$_____$$$$$
 *       _$$$$____$$___$$_____$$_____$$__$$
 *       __$$_____$$___$$$$___$$_____$$__$$
 *       __$$_____$$___$$_____$$_____$$__$$
 *       __$$___$$$$$$_$$$$$__$$$$$$_$$$$$
 *
 *       $$___$_$$$$$$_$$$$$$_$$__$$
 *       $$___$___$$_____$$___$$__$$
 *       $$_$_$___$$_____$$___$$$$$$
 *       $$$$$$___$$_____$$___$$__$$
 *       _$$_$$_$$$$$$___$$___$$__$$
 *
 *       $$__$$_$$$$$__$$
 *       _$$$$__$$_____$$
 *       __$$___$$$$___$$
 *       __$$___$$_____$$
 *       __$$___$$$$$__$$$$$$
 */

pragma solidity ^0.8.0;


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        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 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 Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


interface AggregatorV3Interface {

    function decimals() external view returns (uint8);
    function description() external view returns (string memory);
    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
    external
    view
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );
    function latestRoundData()
    external
    view
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );

}


contract TokenSale is Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    address public token;
    address public oracle;
    uint256 public threshold; // with 1e18

    uint256 public initialPrice; // with 1e18
    uint256 public tokenPriceUSD; // with 1e18

    uint256 public weiRaised; // with 1e18
    uint256 public notClaimedTokens; // with 1e18

    uint256 public presaleStartsAt;
    uint256 public presaleEndsAt;
    uint256 public claimStartsAt;

    uint256 public maxTokenPriceUSD;

    mapping(address => uint256) public contributionInWei;
    mapping(address => uint256) public contributionInUSD;

    event Withdraw(address indexed owner, uint256 indexed amount);
    event BuyTokens(address indexed buyer, uint256 indexed tokens, uint256 indexed pricePerToken, uint256 buyingPower);
    event PreBuyTokens(address indexed buyer, uint256 indexed tokens, uint256 indexed pricePerToken, uint256 buyingPower);
    event ClaimedTokens(address indexed buyer, uint256 indexed tokens);

    constructor(
        address _token,
        address _oracle,
        uint256 _initialPrice,
        uint256 _threshold,
        uint256 _presaleStartsAt,
        uint256 _presaleEndsAt,
        uint256 _claimStartsAt
        ) {

        require(_token != address(0));
        require(_oracle != address(0));

        require(_initialPrice > 0, "Price should be bigger than 0");
        require(_threshold > 0, "Threshold should be bigger than 0");
        require(_presaleStartsAt > block.timestamp, "Presale should start now or in the future");
        require(_presaleStartsAt < _presaleEndsAt, "Presale cannot start after end date");
        require(_presaleEndsAt < _claimStartsAt, "Presale end date cannot be after claim date");

        token = _token;
        oracle = _oracle;

        threshold = _threshold * 1e18;

        initialPrice = _initialPrice;
        maxTokenPriceUSD = initialPrice.mul(2**4);
        tokenPriceUSD = _initialPrice;

        presaleStartsAt = _presaleStartsAt;
        presaleEndsAt = _presaleEndsAt;
        claimStartsAt = _claimStartsAt;
    }


    modifier isPresale {
        require(block.timestamp >= presaleStartsAt && block.timestamp <= presaleEndsAt, "It's not presale period");

        _;
    }

    modifier hasTokensToClaim {
        require(contributionInWei[msg.sender] > 0, "User has NO tokens");

        _;
    }

    modifier claimStart {
        require(block.timestamp >= claimStartsAt, "Claim period has not started yet");

        _;
    }

    receive() external payable {
        buyTokens();
    }

    function claimTokens() public claimStart hasTokensToClaim nonReentrant{
        uint256 userWeis = contributionInWei[msg.sender];
        contributionInWei[msg.sender] = 0;
        uint256 _priceInWeiPerToken = getPriceInWeiPerToken(tokenPriceUSD);
        uint256 usersTokens = (userWeis.mul(1e18)).div(_priceInWeiPerToken);

        if (notClaimedTokens >= usersTokens) {
            notClaimedTokens = notClaimedTokens.sub(usersTokens);
        } else {
            notClaimedTokens = 0;
        }

        IERC20(token).transfer(msg.sender, usersTokens);
        emit ClaimedTokens(msg.sender, usersTokens);
    }

    function withdraw() external onlyOwner nonReentrant {
        uint256 amount = address(this).balance;
        address payable ownerPayable = payable(msg.sender);
        ownerPayable.transfer(amount);

        emit Withdraw(msg.sender, amount);
    }

    function withdrawTokens() external onlyOwner claimStart nonReentrant {
        uint256 unsoldTokens = IERC20(token).balanceOf(address(this));

        IERC20(token).transfer(msg.sender, unsoldTokens.sub(notClaimedTokens));
    }

    function buyTokens() public payable isPresale nonReentrant {
        uint256 _priceInWeiPerToken = getPriceInWeiPerToken(tokenPriceUSD);
        uint256 totalValue = msg.value;
        uint256 tokens = totalValue.mul(1e18).div(_priceInWeiPerToken);
        uint256 tokensByMaxPrice = tokens.div(maxTokenPriceUSD.div(tokenPriceUSD));
        require(tokens > 0, "Insufficient funds");

        uint256 buyLimitTokens = remainingTokensByMaxPrice();
        require(buyLimitTokens > tokensByMaxPrice, "There is no more tokens to sell");

        uint256 tradeAmountInUSD = tokens.mul(tokenPriceUSD).div(1e36); // in USD

        contributionInWei[msg.sender] = contributionInWei[msg.sender].add(totalValue);
        contributionInUSD[msg.sender] =  contributionInUSD[msg.sender].add(tradeAmountInUSD);
        weiRaised = weiRaised.add(totalValue);
        notClaimedTokens = notClaimedTokens.add(tokens);

        updateTokenPrice(_priceInWeiPerToken);

        emit PreBuyTokens(msg.sender, tokens, _priceInWeiPerToken, totalValue);
    }

    function remainingTokensByMaxPrice() internal view returns(uint256) {
        uint256 _priceInWeiPerToken = getPriceInWeiPerToken(maxTokenPriceUSD);
        uint256 purchesedTokensByMaxPrice = weiRaised.mul(1e18).div(_priceInWeiPerToken);

        return threshold.sub(purchesedTokensByMaxPrice);
    }

    function remainingTokensByCurrentPrice() public view returns(uint256) {
        uint256 _priceInWeiPerToken = getPriceInWeiPerToken(tokenPriceUSD);
        uint256 purchesedTokens = weiRaised.mul(1e18).div(_priceInWeiPerToken);

        return threshold.sub(purchesedTokens);
    }

    function updateTokenPrice(uint256 _priceInWeiPerToken) internal {
        uint256 purchesedTokens = weiRaised.mul(1e18).div(_priceInWeiPerToken);
        while (purchesedTokens > threshold && tokenPriceUSD.div(initialPrice) < 16) {
            tokenPriceUSD = tokenPriceUSD.mul(2);
            notClaimedTokens = notClaimedTokens.div(2);
            purchesedTokens = weiRaised.mul(1e18).div(getPriceInWeiPerToken(tokenPriceUSD));
        }
    }

    function balanceOf(address adr) public view returns(uint256) {
        uint256 userWeis = contributionInWei[adr];
        uint256 _priceInWeiPerToken = getPriceInWeiPerToken(tokenPriceUSD);
        uint256 tokens = userWeis.mul(1e18).div(_priceInWeiPerToken);
        return tokens;
    }

    function getPriceInWeiPerToken(uint256 _tokenPriceUSD) public view returns(uint256) {
        int oraclePriceTemp = getLatestPriceETHUSD(); // with 10**getDecimalsOracle()
        require(oraclePriceTemp > 0, "Invalid price");

        return _tokenPriceUSD.mul(10**getDecimalsOracle()).div(uint256(oraclePriceTemp)); // result with 1e18
    }

    function getPriceInWeiPerToken() public view returns(uint256) {
        return getPriceInWeiPerToken(tokenPriceUSD);
    }

    function getLatestPriceETHUSD() public view returns (int) {
        (
            uint80 roundID,
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = AggregatorV3Interface(oracle).latestRoundData();

        return price;
    }

    function getDecimalsOracle() public view returns (uint8) {
        (
            uint8 decimals
        ) = AggregatorV3Interface(oracle).decimals();

        return decimals;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint256","name":"_initialPrice","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_presaleStartsAt","type":"uint256"},{"internalType":"uint256","name":"_presaleEndsAt","type":"uint256"},{"internalType":"uint256","name":"_claimStartsAt","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pricePerToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyingPower","type":"uint256"}],"name":"BuyTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ClaimedTokens","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":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pricePerToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyingPower","type":"uint256"}],"name":"PreBuyTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimStartsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributionInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributionInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimalsOracle","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceETHUSD","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceInWeiPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPriceUSD","type":"uint256"}],"name":"getPriceInWeiPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notClaimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEndsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTokensByCurrentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceUSD","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":"weiRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162002b8b38038062002b8b8339818101604052810190620000379190620003fe565b600062000049620003b060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060018081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156200016457600080fd5b60008511620001aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a19062000715565b60405180910390fd5b60008411620001f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e790620006af565b60405180910390fd5b42831162000235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022c906200068d565b60405180910390fd5b8183106200027a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027190620006d1565b60405180910390fd5b808210620002bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b690620006f3565b60405180910390fd5b86600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a76400008462000357919062000748565b60048190555084600581905550620003816010600554620003b860201b620017311790919060201c565b600c81905550846006819055508260098190555081600a8190555080600b81905550505050505050506200084a565b600033905090565b60008183620003c8919062000748565b905092915050565b600081519050620003e18162000816565b92915050565b600081519050620003f88162000830565b92915050565b600080600080600080600060e0888a0312156200041a57600080fd5b60006200042a8a828b01620003d0565b97505060206200043d8a828b01620003d0565b9650506040620004508a828b01620003e7565b9550506060620004638a828b01620003e7565b9450506080620004768a828b01620003e7565b93505060a0620004898a828b01620003e7565b92505060c06200049c8a828b01620003e7565b91505092959891949750929550565b6000620004ba60298362000737565b91507f50726573616c652073686f756c64207374617274206e6f77206f7220696e207460008301527f68652066757475726500000000000000000000000000000000000000000000006020830152604082019050919050565b60006200052260218362000737565b91507f5468726573686f6c642073686f756c6420626520626967676572207468616e2060008301527f30000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200058a60238362000737565b91507f50726573616c652063616e6e6f7420737461727420616674657220656e64206460008301527f61746500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000620005f2602b8362000737565b91507f50726573616c6520656e6420646174652063616e6e6f7420626520616674657260008301527f20636c61696d20646174650000000000000000000000000000000000000000006020830152604082019050919050565b60006200065a601d8362000737565b91507f50726963652073686f756c6420626520626967676572207468616e20300000006000830152602082019050919050565b60006020820190508181036000830152620006a881620004ab565b9050919050565b60006020820190508181036000830152620006ca8162000513565b9050919050565b60006020820190508181036000830152620006ec816200057b565b9050919050565b600060208201905081810360008301526200070e81620005e3565b9050919050565b6000602082019050818103600083015262000730816200064b565b9050919050565b600082825260208201905092915050565b60006200075582620007dd565b91506200076283620007dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200079e576200079d620007e7565b5b828202905092915050565b6000620007b682620007bd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6200082181620007a9565b81146200082d57600080fd5b50565b6200083b81620007dd565b81146200084757600080fd5b50565b612331806200085a6000396000f3fe6080604052600436106101855760003560e01c806370a08231116100d15780638da5cb5b1161008a5780639cdf3007116100645780639cdf300714610531578063d0febe4c1461056e578063f2fde38b14610578578063fc0c546a146105a157610194565b80638da5cb5b146104b05780638e2a9511146104db57806395fe863c1461050657610194565b806370a08231146103b2578063715018a6146103ef5780637d4833ad146104065780637dc0d1d014610443578063845b3fcd1461046e5780638d8f2adb1461049957610194565b8063407fcc311161013e57806348c54b9d1161011857806348c54b9d1461030857806354c21fb81461031f5780636a4a39e91461034a5780636f71c5ea1461037557610194565b8063407fcc31146102875780634101a840146102b257806342cde4e8146102dd57610194565b80630419b652146101995780631d0806ae146101c45780632e609c10146101ef57806332c1410f1461021a5780633ccfd60b146102455780634042b66f1461025c57610194565b36610194576101926105cc565b005b600080fd5b3480156101a557600080fd5b506101ae610972565b6040516101bb9190611ec4565b60405180910390f35b3480156101d057600080fd5b506101d9610984565b6040516101e69190611ec4565b60405180910390f35b3480156101fb57600080fd5b5061020461098a565b6040516102119190611ec4565b60405180910390f35b34801561022657600080fd5b5061022f610990565b60405161023c9190611edf565b60405180910390f35b34801561025157600080fd5b5061025a610a3c565b005b34801561026857600080fd5b50610271610ba6565b60405161027e9190611ec4565b60405180910390f35b34801561029357600080fd5b5061029c610bac565b6040516102a99190611ec4565b60405180910390f35b3480156102be57600080fd5b506102c7610bb2565b6040516102d49190611ec4565b60405180910390f35b3480156102e957600080fd5b506102f2610bb8565b6040516102ff9190611ec4565b60405180910390f35b34801561031457600080fd5b5061031d610bbe565b005b34801561032b57600080fd5b50610334610ece565b6040516103419190611ec4565b60405180910390f35b34801561035657600080fd5b5061035f610ed4565b60405161036c9190611ec4565b60405180910390f35b34801561038157600080fd5b5061039c6004803603810190610397919061195f565b610eda565b6040516103a99190611ec4565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d4919061195f565b610ef2565b6040516103e69190611ec4565b60405180910390f35b3480156103fb57600080fd5b50610404610f82565b005b34801561041257600080fd5b5061042d6004803603810190610428919061195f565b6110bc565b60405161043a9190611ec4565b60405180910390f35b34801561044f57600080fd5b506104586110d4565b6040516104659190611d45565b60405180910390f35b34801561047a57600080fd5b506104836110fa565b6040516104909190611ec4565b60405180910390f35b3480156104a557600080fd5b506104ae611100565b005b3480156104bc57600080fd5b506104c561138c565b6040516104d29190611d45565b60405180910390f35b3480156104e757600080fd5b506104f06113b5565b6040516104fd9190611ec4565b60405180910390f35b34801561051257600080fd5b5061051b611414565b6040516105289190611d89565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906119b1565b6114d2565b6040516105659190611ec4565b60405180910390f35b6105766105cc565b005b34801561058457600080fd5b5061059f600480360381019061059a919061195f565b611562565b005b3480156105ad57600080fd5b506105b661170b565b6040516105c39190611d45565b60405180910390f35b60095442101580156105e05750600a544211155b61061f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061690611e04565b60405180910390fd5b60026001541415610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90611e84565b60405180910390fd5b6002600181905550600061067a6006546114d2565b9050600034905060006106b0836106a2670de0b6b3a76400008561173190919063ffffffff16565b61174790919063ffffffff16565b905060006106dd6106ce600654600c5461174790919063ffffffff16565b8361174790919063ffffffff16565b905060008211610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990611dc4565b60405180910390fd5b600061072c61175d565b9050818111610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790611e44565b60405180910390fd5b60006107a86ec097ce7bc90715b34b9f100000000061079a6006548761173190919063ffffffff16565b61174790919063ffffffff16565b90506107fc85600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117bc90919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061089181600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117bc90919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108e9856007546117bc90919063ffffffff16565b600781905550610904846008546117bc90919063ffffffff16565b600881905550610913866117d2565b85843373ffffffffffffffffffffffffffffffffffffffff167f7be8b0a14e85fd3f5ddebaa163632ba44986ffffcc767a4842045a48390b320f8860405161095b9190611ec4565b60405180910390a450505050505060018081905550565b600061097f6006546114d2565b905090565b60055481565b60095481565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611a7a565b90508091505090565b610a446118ae565b73ffffffffffffffffffffffffffffffffffffffff16610a6261138c565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90611e24565b60405180910390fd5b60026001541415610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590611e84565b60405180910390fd5b6002600181905550600047905060003390508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610b56573d6000803e3d6000fd5b50813373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436460405160405180910390a3505060018081905550565b60075481565b60065481565b60085481565b60045481565b600b54421015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90611de4565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90611ea4565b60405180910390fd5b60026001541415610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290611e84565b60405180910390fd5b60026001819055506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610d696006546114d2565b90506000610d9a82610d8c670de0b6b3a76400008661173190919063ffffffff16565b61174790919063ffffffff16565b90508060085410610dc557610dba816008546118b690919063ffffffff16565b600881905550610dce565b60006008819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610e2b929190611d60565b602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190611988565b50803373ffffffffffffffffffffffffffffffffffffffff167fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d790760405160405180910390a350505060018081905550565b600b5481565b600a5481565b600e6020528060005260406000206000915090505481565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000610f446006546114d2565b90506000610f7582610f67670de0b6b3a76400008661173190919063ffffffff16565b61174790919063ffffffff16565b9050809350505050919050565b610f8a6118ae565b73ffffffffffffffffffffffffffffffffffffffff16610fa861138c565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590611e24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6111086118ae565b73ffffffffffffffffffffffffffffffffffffffff1661112661138c565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390611e24565b60405180910390fd5b600b544210156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890611de4565b60405180910390fd5b60026001541415611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90611e84565b60405180910390fd5b60026001819055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161126c9190611d45565b60206040518083038186803b15801561128457600080fd5b505afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bc91906119da565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611312600854856118b690919063ffffffff16565b6040518363ffffffff1660e01b815260040161132f929190611d60565b602060405180830381600087803b15801561134957600080fd5b505af115801561135d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113819190611988565b505060018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806113c36006546114d2565b905060006113f6826113e8670de0b6b3a764000060075461173190919063ffffffff16565b61174790919063ffffffff16565b905061140d816004546118b690919063ffffffff16565b9250505090565b600080600080600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190611a03565b94509450945094509450839550505050505090565b6000806114dd611414565b905060008113611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990611e64565b60405180910390fd5b61155a8161154c611531610990565b600a61153d9190611fe5565b8661173190919063ffffffff16565b61174790919063ffffffff16565b915050919050565b61156a6118ae565b73ffffffffffffffffffffffffffffffffffffffff1661158861138c565b73ffffffffffffffffffffffffffffffffffffffff16146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590611e24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590611da4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818361173f9190612103565b905092915050565b600081836117559190611f61565b905092915050565b60008061176b600c546114d2565b9050600061179e82611790670de0b6b3a764000060075461173190919063ffffffff16565b61174790919063ffffffff16565b90506117b5816004546118b690919063ffffffff16565b9250505090565b600081836117ca9190611f0b565b905092915050565b6000611803826117f5670de0b6b3a764000060075461173190919063ffffffff16565b61174790919063ffffffff16565b90505b6004548111801561182d5750601061182b60055460065461174790919063ffffffff16565b105b156118aa57611848600260065461173190919063ffffffff16565b600681905550611864600260085461174790919063ffffffff16565b6008819055506118a36118786006546114d2565b611895670de0b6b3a764000060075461173190919063ffffffff16565b61174790919063ffffffff16565b9050611806565b5050565b600033905090565b600081836118c4919061215d565b905092915050565b6000813590506118db81612271565b92915050565b6000815190506118f081612288565b92915050565b6000815190506119058161229f565b92915050565b60008135905061191a816122b6565b92915050565b60008151905061192f816122b6565b92915050565b600081519050611944816122e4565b92915050565b600081519050611959816122cd565b92915050565b60006020828403121561197157600080fd5b600061197f848285016118cc565b91505092915050565b60006020828403121561199a57600080fd5b60006119a8848285016118e1565b91505092915050565b6000602082840312156119c357600080fd5b60006119d18482850161190b565b91505092915050565b6000602082840312156119ec57600080fd5b60006119fa84828501611920565b91505092915050565b600080600080600060a08688031215611a1b57600080fd5b6000611a2988828901611935565b9550506020611a3a888289016118f6565b9450506040611a4b88828901611920565b9350506060611a5c88828901611920565b9250506080611a6d88828901611935565b9150509295509295909350565b600060208284031215611a8c57600080fd5b6000611a9a8482850161194a565b91505092915050565b611aac81612191565b82525050565b611abb816121af565b82525050565b6000611ace602683611efa565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611b34601283611efa565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000611b74602083611efa565b91507f436c61696d20706572696f6420686173206e6f742073746172746564207965746000830152602082019050919050565b6000611bb4601783611efa565b91507f49742773206e6f742070726573616c6520706572696f640000000000000000006000830152602082019050919050565b6000611bf4602083611efa565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611c34601f83611efa565b91507f5468657265206973206e6f206d6f726520746f6b656e7320746f2073656c6c006000830152602082019050919050565b6000611c74600d83611efa565b91507f496e76616c6964207072696365000000000000000000000000000000000000006000830152602082019050919050565b6000611cb4601f83611efa565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000611cf4601283611efa565b91507f5573657220686173204e4f20746f6b656e7300000000000000000000000000006000830152602082019050919050565b611d30816121d9565b82525050565b611d3f816121e3565b82525050565b6000602082019050611d5a6000830184611aa3565b92915050565b6000604082019050611d756000830185611aa3565b611d826020830184611d27565b9392505050565b6000602082019050611d9e6000830184611ab2565b92915050565b60006020820190508181036000830152611dbd81611ac1565b9050919050565b60006020820190508181036000830152611ddd81611b27565b9050919050565b60006020820190508181036000830152611dfd81611b67565b9050919050565b60006020820190508181036000830152611e1d81611ba7565b9050919050565b60006020820190508181036000830152611e3d81611be7565b9050919050565b60006020820190508181036000830152611e5d81611c27565b9050919050565b60006020820190508181036000830152611e7d81611c67565b9050919050565b60006020820190508181036000830152611e9d81611ca7565b9050919050565b60006020820190508181036000830152611ebd81611ce7565b9050919050565b6000602082019050611ed96000830184611d27565b92915050565b6000602082019050611ef46000830184611d36565b92915050565b600082825260208201905092915050565b6000611f16826121d9565b9150611f21836121d9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f5657611f55612206565b5b828201905092915050565b6000611f6c826121d9565b9150611f77836121d9565b925082611f8757611f86612235565b5b828204905092915050565b6000808291508390505b6001851115611fdc57808604811115611fb857611fb7612206565b5b6001851615611fc75780820291505b8081029050611fd585612264565b9450611f9c565b94509492505050565b6000611ff0826121d9565b9150611ffb836121e3565b92506120287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612030565b905092915050565b60008261204057600190506120fc565b8161204e57600090506120fc565b8160018114612064576002811461206e5761209d565b60019150506120fc565b60ff8411156120805761207f612206565b5b8360020a91508482111561209757612096612206565b5b506120fc565b5060208310610133831016604e8410600b84101617156120d25782820a9050838111156120cd576120cc612206565b5b6120fc565b6120df8484846001611f92565b925090508184048111156120f6576120f5612206565b5b81810290505b9392505050565b600061210e826121d9565b9150612119836121d9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561215257612151612206565b5b828202905092915050565b6000612168826121d9565b9150612173836121d9565b92508282101561218657612185612206565b5b828203905092915050565b600061219c826121b9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b61227a81612191565b811461228557600080fd5b50565b612291816121a3565b811461229c57600080fd5b50565b6122a8816121af565b81146122b357600080fd5b50565b6122bf816121d9565b81146122ca57600080fd5b50565b6122d6816121e3565b81146122e157600080fd5b50565b6122ed816121f0565b81146122f857600080fd5b5056fea264697066735822122065808a2214a617213b63d567d2051f2f4e828a15d80f4db49e2f4ebe3c08c35e64736f6c63430008000033000000000000000000000000d3b71117e6c1558c1553305b44988cd944e97300000000000000000000000000ab594600376ec9fd91f8e885dadf0ce036862de000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000017d78400000000000000000000000000000000000000000000000000000000060fd52400000000000000000000000000000000000000000000000000000000061018d100000000000000000000000000000000000000000000000000000000061018d4c

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

000000000000000000000000d3b71117e6c1558c1553305b44988cd944e97300000000000000000000000000ab594600376ec9fd91f8e885dadf0ce036862de000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000017d78400000000000000000000000000000000000000000000000000000000060fd52400000000000000000000000000000000000000000000000000000000061018d100000000000000000000000000000000000000000000000000000000061018d4c

-----Decoded View---------------
Arg [0] : _token (address): 0xd3b71117e6c1558c1553305b44988cd944e97300
Arg [1] : _oracle (address): 0xab594600376ec9fd91f8e885dadf0ce036862de0
Arg [2] : _initialPrice (uint256): 20000000000000000
Arg [3] : _threshold (uint256): 25000000
Arg [4] : _presaleStartsAt (uint256): 1627214400
Arg [5] : _presaleEndsAt (uint256): 1627491600
Arg [6] : _claimStartsAt (uint256): 1627491660

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000d3b71117e6c1558c1553305b44988cd944e97300
Arg [1] : 000000000000000000000000ab594600376ec9fd91f8e885dadf0ce036862de0
Arg [2] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [3] : 00000000000000000000000000000000000000000000000000000000017d7840
Arg [4] : 0000000000000000000000000000000000000000000000000000000060fd5240
Arg [5] : 0000000000000000000000000000000000000000000000000000000061018d10
Arg [6] : 0000000000000000000000000000000000000000000000000000000061018d4c


Deployed ByteCode Sourcemap

11702:7246:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14343:11;:9;:11::i;:::-;11702:7246;;;;;18305:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11892:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12086:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18756:187;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15009:256;;;;;;;;;;;;;:::i;:::-;;11989:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11939:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12033:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11846:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14370:631;;;;;;;;;;;;;:::i;:::-;;12158:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12294:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17648:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4945:148;;;;;;;;;;;;;:::i;:::-;;12235:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11818:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12195:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15273:232;;;;;;;;;;;;;:::i;:::-;;4294:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16893:286;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18437:311;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17949:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15513:1057;;;:::i;:::-;;5248:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11791:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15513:1057;13927:15;;13908;:34;;:70;;;;;13965:13;;13946:15;:32;;13908:70;13900:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1:::1;7746:7;;:19;;7738:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1;7879:7;:18;;;;15583:27:::2;15613:36;15635:13;;15613:21;:36::i;:::-;15583:66;;15660:18;15681:9;15660:30;;15701:14;15718:45;15743:19;15718:20;15733:4;15718:10;:14;;:20;;;;:::i;:::-;:24;;:45;;;;:::i;:::-;15701:62;;15774:24;15801:47;15812:35;15833:13;;15812:16;;:20;;:35;;;;:::i;:::-;15801:6;:10;;:47;;;;:::i;:::-;15774:74;;15876:1;15867:6;:10;15859:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;15913:22;15938:27;:25;:27::i;:::-;15913:52;;16001:16;15984:14;:33;15976:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;16066:24;16093:35;16123:4;16093:25;16104:13;;16093:6;:10;;:25;;;;:::i;:::-;:29;;:35;;;;:::i;:::-;16066:62;;16183:45;16217:10;16183:17;:29;16201:10;16183:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;16151:17;:29;16169:10;16151:29;;;;;;;;;;;;;;;:77;;;;16272:51;16306:16;16272:17;:29;16290:10;16272:29;;;;;;;;;;;;;;;;:33;;:51;;;;:::i;:::-;16239:17;:29;16257:10;16239:29;;;;;;;;;;;;;;;:84;;;;16346:25;16360:10;16346:9;;:13;;:25;;;;:::i;:::-;16334:9;:37;;;;16401:28;16422:6;16401:16;;:20;;:28;;;;:::i;:::-;16382:16;:47;;;;16442:37;16459:19;16442:16;:37::i;:::-;16530:19;16522:6;16510:10;16497:65;;;16551:10;16497:65;;;;;;:::i;:::-;;;;;;;;7910:1;;;;;;7106::::1;8058:7:::0;:22:::1;;;;15513:1057::o:0;18305:124::-;18358:7;18385:36;18407:13;;18385:21;:36::i;:::-;18378:43;;18305:124;:::o;11892:27::-;;;;:::o;12086:30::-;;;;:::o;18756:187::-;18806:5;18839:14;18889:6;;;;;;;;;;;18867:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18824:83;;18927:8;18920:15;;;18756:187;:::o;15009:256::-;4525:12;:10;:12::i;:::-;4514:23;;:7;:5;:7::i;:::-;:23;;;4506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1:::1;7746:7;;:19;;7738:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1;7879:7;:18;;;;15072:14:::2;15089:21;15072:38;;15121:28;15160:10;15121:50;;15182:12;:21;;:29;15204:6;15182:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;15250:6;15238:10;15229:28;;;;;;;;;;;;7910:1;;7106::::1;8058:7:::0;:22:::1;;;;15009:256::o:0;11989:24::-;;;;:::o;11939:28::-;;;;:::o;12033:31::-;;;;:::o;11846:24::-;;;;:::o;14370:631::-;14225:13;;14206:15;:32;;14198:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;14113:1:::1;14081:17;:29;14099:10;14081:29;;;;;;;;;;;;;;;;:33;14073:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1:::2;7746:7;;:19;;7738:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1;7879:7;:18;;;;14451:16:::3;14470:17;:29;14488:10;14470:29;;;;;;;;;;;;;;;;14451:48;;14542:1;14510:17;:29;14528:10;14510:29;;;;;;;;;;;;;;;:33;;;;14554:27;14584:36;14606:13;;14584:21;:36::i;:::-;14554:66;;14631:19;14653:45;14678:19;14654:18;14667:4;14654:8;:12;;:18;;;;:::i;:::-;14653:24;;:45;;;;:::i;:::-;14631:67;;14735:11;14715:16;;:31;14711:169;;14782:33;14803:11;14782:16;;:20;;:33;;;;:::i;:::-;14763:16;:52;;;;14711:169;;;14867:1;14848:16;:20;;;;14711:169;14899:5;;;;;;;;;;;14892:22;;;14915:10;14927:11;14892:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14981:11;14969:10;14955:38;;;;;;;;;;;;7910:1;;;7106::::2;8058:7:::0;:22:::2;;;;14370:631::o:0;12158:28::-;;;;:::o;12123:::-;;;;:::o;12294:52::-;;;;;;;;;;;;;;;;;:::o;17648:293::-;17700:7;17720:16;17739:17;:22;17757:3;17739:22;;;;;;;;;;;;;;;;17720:41;;17772:27;17802:36;17824:13;;17802:21;:36::i;:::-;17772:66;;17849:14;17866:43;17889:19;17866:18;17879:4;17866:8;:12;;:18;;;;:::i;:::-;:22;;:43;;;;:::i;:::-;17849:60;;17927:6;17920:13;;;;;17648:293;;;:::o;4945:148::-;4525:12;:10;:12::i;:::-;4514:23;;:7;:5;:7::i;:::-;:23;;;4506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5052:1:::1;5015:40;;5036:6;::::0;::::1;;;;;;;;5015:40;;;;;;;;;;;;5083:1;5066:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4945:148::o:0;12235:52::-;;;;;;;;;;;;;;;;;:::o;11818:21::-;;;;;;;;;;;;;:::o;12195:31::-;;;;:::o;15273:232::-;4525:12;:10;:12::i;:::-;4514:23;;:7;:5;:7::i;:::-;:23;;;4506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14225:13:::1;;14206:15;:32;;14198:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1:::2;7746:7;;:19;;7738:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:1;7879:7;:18;;;;15353:20:::3;15383:5;;;;;;;;;;;15376:23;;;15408:4;15376:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15353:61;;15434:5;;;;;;;;;;;15427:22;;;15450:10;15462:34;15479:16;;15462:12;:16;;:34;;;;:::i;:::-;15427:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7910:1;7106::::2;8058:7:::0;:22:::2;;;;15273:232::o:0;4294:87::-;4340:7;4367:6;;;;;;;;;;;4360:13;;4294:87;:::o;16893:286::-;16954:7;16974:27;17004:36;17026:13;;17004:21;:36::i;:::-;16974:66;;17051:23;17077:44;17101:19;17077;17091:4;17077:9;;:13;;:19;;;;:::i;:::-;:23;;:44;;;;:::i;:::-;17051:70;;17141:30;17155:15;17141:9;;:13;;:30;;;;:::i;:::-;17134:37;;;;16893:286;:::o;18437:311::-;18490:3;18521:14;18550:9;18574:14;18603;18632:22;18690:6;;;;;;;;;;;18668:45;;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18506:209;;;;;;;;;;18735:5;18728:12;;;;;;;18437:311;:::o;17949:348::-;18024:7;18044:19;18066:22;:20;:22::i;:::-;18044:44;;18157:1;18139:15;:19;18131:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;18196:73;18252:15;18196:43;18219:19;:17;:19::i;:::-;18215:2;:23;;;;:::i;:::-;18196:14;:18;;:43;;;;:::i;:::-;:47;;:73;;;;:::i;:::-;18189:80;;;17949:348;;;:::o;5248:244::-;4525:12;:10;:12::i;:::-;4514:23;;:7;:5;:7::i;:::-;:23;;;4506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5357:1:::1;5337:22;;:8;:22;;;;5329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5447:8;5418:38;;5439:6;::::0;::::1;;;;;;;;5418:38;;;;;;;;;;;;5476:8;5467:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5248:244:::0;:::o;11791:20::-;;;;;;;;;;;;;:::o;1512:98::-;1570:7;1601:1;1597;:5;;;;:::i;:::-;1590:12;;1512:98;;;;:::o;1911:::-;1969:7;2000:1;1996;:5;;;;:::i;:::-;1989:12;;1911:98;;;;:::o;16578:307::-;16637:7;16657:27;16687:39;16709:16;;16687:21;:39::i;:::-;16657:69;;16737:33;16773:44;16797:19;16773;16787:4;16773:9;;:13;;:19;;;;:::i;:::-;:23;;:44;;;;:::i;:::-;16737:80;;16837:40;16851:25;16837:9;;:13;;:40;;;;:::i;:::-;16830:47;;;;16578:307;:::o;1155:98::-;1213:7;1244:1;1240;:5;;;;:::i;:::-;1233:12;;1155:98;;;;:::o;17187:453::-;17262:23;17288:44;17312:19;17288;17302:4;17288:9;;:13;;:19;;;;:::i;:::-;:23;;:44;;;;:::i;:::-;17262:70;;17343:290;17368:9;;17350:15;:27;:67;;;;;17415:2;17381:31;17399:12;;17381:13;;:17;;:31;;;;:::i;:::-;:36;17350:67;17343:290;;;17450:20;17468:1;17450:13;;:17;;:20;;;;:::i;:::-;17434:13;:36;;;;17504:23;17525:1;17504:16;;:20;;:23;;;;:::i;:::-;17485:16;:42;;;;17560:61;17584:36;17606:13;;17584:21;:36::i;:::-;17560:19;17574:4;17560:9;;:13;;:19;;;;:::i;:::-;:23;;:61;;;;:::i;:::-;17542:79;;17343:290;;;17187:453;;:::o;2938:98::-;2991:7;3018:10;3011:17;;2938:98;:::o;2292:::-;2350:7;2381:1;2377;:5;;;;:::i;:::-;2370:12;;2292:98;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:141::-;;382:6;376:13;367:22;;398:32;424:5;398:32;:::i;:::-;357:79;;;;:::o;442:139::-;;526:6;513:20;504:29;;542:33;569:5;542:33;:::i;:::-;494:87;;;;:::o;587:143::-;;675:6;669:13;660:22;;691:33;718:5;691:33;:::i;:::-;650:80;;;;:::o;736:141::-;;823:6;817:13;808:22;;839:32;865:5;839:32;:::i;:::-;798:79;;;;:::o;883:139::-;;969:6;963:13;954:22;;985:31;1010:5;985:31;:::i;:::-;944:78;;;;:::o;1028:262::-;;1136:2;1124:9;1115:7;1111:23;1107:32;1104:2;;;1152:1;1149;1142:12;1104:2;1195:1;1220:53;1265:7;1256:6;1245:9;1241:22;1220:53;:::i;:::-;1210:63;;1166:117;1094:196;;;;:::o;1296:278::-;;1412:2;1400:9;1391:7;1387:23;1383:32;1380:2;;;1428:1;1425;1418:12;1380:2;1471:1;1496:61;1549:7;1540:6;1529:9;1525:22;1496:61;:::i;:::-;1486:71;;1442:125;1370:204;;;;:::o;1580:262::-;;1688:2;1676:9;1667:7;1663:23;1659:32;1656:2;;;1704:1;1701;1694:12;1656:2;1747:1;1772:53;1817:7;1808:6;1797:9;1793:22;1772:53;:::i;:::-;1762:63;;1718:117;1646:196;;;;:::o;1848:284::-;;1967:2;1955:9;1946:7;1942:23;1938:32;1935:2;;;1983:1;1980;1973:12;1935:2;2026:1;2051:64;2107:7;2098:6;2087:9;2083:22;2051:64;:::i;:::-;2041:74;;1997:128;1925:207;;;;:::o;2138:904::-;;;;;;2322:3;2310:9;2301:7;2297:23;2293:33;2290:2;;;2339:1;2336;2329:12;2290:2;2382:1;2407:63;2462:7;2453:6;2442:9;2438:22;2407:63;:::i;:::-;2397:73;;2353:127;2519:2;2545:63;2600:7;2591:6;2580:9;2576:22;2545:63;:::i;:::-;2535:73;;2490:128;2657:2;2683:64;2739:7;2730:6;2719:9;2715:22;2683:64;:::i;:::-;2673:74;;2628:129;2796:2;2822:64;2878:7;2869:6;2858:9;2854:22;2822:64;:::i;:::-;2812:74;;2767:129;2935:3;2962:63;3017:7;3008:6;2997:9;2993:22;2962:63;:::i;:::-;2952:73;;2906:129;2280:762;;;;;;;;:::o;3048:280::-;;3165:2;3153:9;3144:7;3140:23;3136:32;3133:2;;;3181:1;3178;3171:12;3133:2;3224:1;3249:62;3303:7;3294:6;3283:9;3279:22;3249:62;:::i;:::-;3239:72;;3195:126;3123:205;;;;:::o;3334:118::-;3421:24;3439:5;3421:24;:::i;:::-;3416:3;3409:37;3399:53;;:::o;3458:115::-;3543:23;3560:5;3543:23;:::i;:::-;3538:3;3531:36;3521:52;;:::o;3579:370::-;;3742:67;3806:2;3801:3;3742:67;:::i;:::-;3735:74;;3839:34;3835:1;3830:3;3826:11;3819:55;3905:8;3900:2;3895:3;3891:12;3884:30;3940:2;3935:3;3931:12;3924:19;;3725:224;;;:::o;3955:316::-;;4118:67;4182:2;4177:3;4118:67;:::i;:::-;4111:74;;4215:20;4211:1;4206:3;4202:11;4195:41;4262:2;4257:3;4253:12;4246:19;;4101:170;;;:::o;4277:330::-;;4440:67;4504:2;4499:3;4440:67;:::i;:::-;4433:74;;4537:34;4533:1;4528:3;4524:11;4517:55;4598:2;4593:3;4589:12;4582:19;;4423:184;;;:::o;4613:321::-;;4776:67;4840:2;4835:3;4776:67;:::i;:::-;4769:74;;4873:25;4869:1;4864:3;4860:11;4853:46;4925:2;4920:3;4916:12;4909:19;;4759:175;;;:::o;4940:330::-;;5103:67;5167:2;5162:3;5103:67;:::i;:::-;5096:74;;5200:34;5196:1;5191:3;5187:11;5180:55;5261:2;5256:3;5252:12;5245:19;;5086:184;;;:::o;5276:329::-;;5439:67;5503:2;5498:3;5439:67;:::i;:::-;5432:74;;5536:33;5532:1;5527:3;5523:11;5516:54;5596:2;5591:3;5587:12;5580:19;;5422:183;;;:::o;5611:311::-;;5774:67;5838:2;5833:3;5774:67;:::i;:::-;5767:74;;5871:15;5867:1;5862:3;5858:11;5851:36;5913:2;5908:3;5904:12;5897:19;;5757:165;;;:::o;5928:329::-;;6091:67;6155:2;6150:3;6091:67;:::i;:::-;6084:74;;6188:33;6184:1;6179:3;6175:11;6168:54;6248:2;6243:3;6239:12;6232:19;;6074:183;;;:::o;6263:316::-;;6426:67;6490:2;6485:3;6426:67;:::i;:::-;6419:74;;6523:20;6519:1;6514:3;6510:11;6503:41;6570:2;6565:3;6561:12;6554:19;;6409:170;;;:::o;6585:118::-;6672:24;6690:5;6672:24;:::i;:::-;6667:3;6660:37;6650:53;;:::o;6709:112::-;6792:22;6808:5;6792:22;:::i;:::-;6787:3;6780:35;6770:51;;:::o;6827:222::-;;6958:2;6947:9;6943:18;6935:26;;6971:71;7039:1;7028:9;7024:17;7015:6;6971:71;:::i;:::-;6925:124;;;;:::o;7055:332::-;;7214:2;7203:9;7199:18;7191:26;;7227:71;7295:1;7284:9;7280:17;7271:6;7227:71;:::i;:::-;7308:72;7376:2;7365:9;7361:18;7352:6;7308:72;:::i;:::-;7181:206;;;;;:::o;7393:218::-;;7522:2;7511:9;7507:18;7499:26;;7535:69;7601:1;7590:9;7586:17;7577:6;7535:69;:::i;:::-;7489:122;;;;:::o;7617:419::-;;7821:2;7810:9;7806:18;7798:26;;7870:9;7864:4;7860:20;7856:1;7845:9;7841:17;7834:47;7898:131;8024:4;7898:131;:::i;:::-;7890:139;;7788:248;;;:::o;8042:419::-;;8246:2;8235:9;8231:18;8223:26;;8295:9;8289:4;8285:20;8281:1;8270:9;8266:17;8259:47;8323:131;8449:4;8323:131;:::i;:::-;8315:139;;8213:248;;;:::o;8467:419::-;;8671:2;8660:9;8656:18;8648:26;;8720:9;8714:4;8710:20;8706:1;8695:9;8691:17;8684:47;8748:131;8874:4;8748:131;:::i;:::-;8740:139;;8638:248;;;:::o;8892:419::-;;9096:2;9085:9;9081:18;9073:26;;9145:9;9139:4;9135:20;9131:1;9120:9;9116:17;9109:47;9173:131;9299:4;9173:131;:::i;:::-;9165:139;;9063:248;;;:::o;9317:419::-;;9521:2;9510:9;9506:18;9498:26;;9570:9;9564:4;9560:20;9556:1;9545:9;9541:17;9534:47;9598:131;9724:4;9598:131;:::i;:::-;9590:139;;9488:248;;;:::o;9742:419::-;;9946:2;9935:9;9931:18;9923:26;;9995:9;9989:4;9985:20;9981:1;9970:9;9966:17;9959:47;10023:131;10149:4;10023:131;:::i;:::-;10015:139;;9913:248;;;:::o;10167:419::-;;10371:2;10360:9;10356:18;10348:26;;10420:9;10414:4;10410:20;10406:1;10395:9;10391:17;10384:47;10448:131;10574:4;10448:131;:::i;:::-;10440:139;;10338:248;;;:::o;10592:419::-;;10796:2;10785:9;10781:18;10773:26;;10845:9;10839:4;10835:20;10831:1;10820:9;10816:17;10809:47;10873:131;10999:4;10873:131;:::i;:::-;10865:139;;10763:248;;;:::o;11017:419::-;;11221:2;11210:9;11206:18;11198:26;;11270:9;11264:4;11260:20;11256:1;11245:9;11241:17;11234:47;11298:131;11424:4;11298:131;:::i;:::-;11290:139;;11188:248;;;:::o;11442:222::-;;11573:2;11562:9;11558:18;11550:26;;11586:71;11654:1;11643:9;11639:17;11630:6;11586:71;:::i;:::-;11540:124;;;;:::o;11670:214::-;;11797:2;11786:9;11782:18;11774:26;;11810:67;11874:1;11863:9;11859:17;11850:6;11810:67;:::i;:::-;11764:120;;;;:::o;11890:169::-;;12008:6;12003:3;11996:19;12048:4;12043:3;12039:14;12024:29;;11986:73;;;;:::o;12065:305::-;;12124:20;12142:1;12124:20;:::i;:::-;12119:25;;12158:20;12176:1;12158:20;:::i;:::-;12153:25;;12312:1;12244:66;12240:74;12237:1;12234:81;12231:2;;;12318:18;;:::i;:::-;12231:2;12362:1;12359;12355:9;12348:16;;12109:261;;;;:::o;12376:185::-;;12433:20;12451:1;12433:20;:::i;:::-;12428:25;;12467:20;12485:1;12467:20;:::i;:::-;12462:25;;12506:1;12496:2;;12511:18;;:::i;:::-;12496:2;12553:1;12550;12546:9;12541:14;;12418:143;;;;:::o;12567:848::-;;;12659:6;12650:15;;12683:5;12674:14;;12697:712;12718:1;12708:8;12705:15;12697:712;;;12813:4;12808:3;12804:14;12798:4;12795:24;12792:2;;;12822:18;;:::i;:::-;12792:2;12872:1;12862:8;12858:16;12855:2;;;13287:4;13280:5;13276:16;13267:25;;12855:2;13337:4;13331;13327:15;13319:23;;13367:32;13390:8;13367:32;:::i;:::-;13355:44;;12697:712;;;12640:775;;;;;;;:::o;13421:281::-;;13503:23;13521:4;13503:23;:::i;:::-;13495:31;;13547:25;13563:8;13547:25;:::i;:::-;13535:37;;13591:104;13628:66;13618:8;13612:4;13591:104;:::i;:::-;13582:113;;13485:217;;;;:::o;13708:1073::-;;13953:8;13943:2;;13974:1;13965:10;;13976:5;;13943:2;14002:4;13992:2;;14019:1;14010:10;;14021:5;;13992:2;14088:4;14136:1;14131:27;;;;14172:1;14167:191;;;;14081:277;;14131:27;14149:1;14140:10;;14151:5;;;14167:191;14212:3;14202:8;14199:17;14196:2;;;14219:18;;:::i;:::-;14196:2;14268:8;14265:1;14261:16;14252:25;;14303:3;14296:5;14293:14;14290:2;;;14310:18;;:::i;:::-;14290:2;14343:5;;;14081:277;;14467:2;14457:8;14454:16;14448:3;14442:4;14439:13;14435:36;14417:2;14407:8;14404:16;14399:2;14393:4;14390:12;14386:35;14370:111;14367:2;;;14523:8;14517:4;14513:19;14504:28;;14558:3;14551:5;14548:14;14545:2;;;14565:18;;:::i;:::-;14545:2;14598:5;;14367:2;14638:42;14676:3;14666:8;14660:4;14657:1;14638:42;:::i;:::-;14623:57;;;;14712:4;14707:3;14703:14;14696:5;14693:25;14690:2;;;14721:18;;:::i;:::-;14690:2;14770:4;14763:5;14759:16;14750:25;;13768:1013;;;;;;:::o;14787:348::-;;14850:20;14868:1;14850:20;:::i;:::-;14845:25;;14884:20;14902:1;14884:20;:::i;:::-;14879:25;;15072:1;15004:66;15000:74;14997:1;14994:81;14989:1;14982:9;14975:17;14971:105;14968:2;;;15079:18;;:::i;:::-;14968:2;15127:1;15124;15120:9;15109:20;;14835:300;;;;:::o;15141:191::-;;15201:20;15219:1;15201:20;:::i;:::-;15196:25;;15235:20;15253:1;15235:20;:::i;:::-;15230:25;;15274:1;15271;15268:8;15265:2;;;15279:18;;:::i;:::-;15265:2;15324:1;15321;15317:9;15309:17;;15186:146;;;;:::o;15338:96::-;;15404:24;15422:5;15404:24;:::i;:::-;15393:35;;15383:51;;;:::o;15440:90::-;;15517:5;15510:13;15503:21;15492:32;;15482:48;;;:::o;15536:76::-;;15601:5;15590:16;;15580:32;;;:::o;15618:126::-;;15695:42;15688:5;15684:54;15673:65;;15663:81;;;:::o;15750:77::-;;15816:5;15805:16;;15795:32;;;:::o;15833:86::-;;15908:4;15901:5;15897:16;15886:27;;15876:43;;;:::o;15925:105::-;;16001:22;15994:5;15990:34;15979:45;;15969:61;;;:::o;16036:180::-;16084:77;16081:1;16074:88;16181:4;16178:1;16171:15;16205:4;16202:1;16195:15;16222:180;16270:77;16267:1;16260:88;16367:4;16364:1;16357:15;16391:4;16388:1;16381:15;16408:102;;16497:5;16494:1;16490:13;16469:34;;16459:51;;;:::o;16516:122::-;16589:24;16607:5;16589:24;:::i;:::-;16582:5;16579:35;16569:2;;16628:1;16625;16618:12;16569:2;16559:79;:::o;16644:116::-;16714:21;16729:5;16714:21;:::i;:::-;16707:5;16704:32;16694:2;;16750:1;16747;16740:12;16694:2;16684:76;:::o;16766:120::-;16838:23;16855:5;16838:23;:::i;:::-;16831:5;16828:34;16818:2;;16876:1;16873;16866:12;16818:2;16808:78;:::o;16892:122::-;16965:24;16983:5;16965:24;:::i;:::-;16958:5;16955:35;16945:2;;17004:1;17001;16994:12;16945:2;16935:79;:::o;17020:118::-;17091:22;17107:5;17091:22;:::i;:::-;17084:5;17081:33;17071:2;;17128:1;17125;17118:12;17071:2;17061:77;:::o;17144:120::-;17216:23;17233:5;17216:23;:::i;:::-;17209:5;17206:34;17196:2;;17254:1;17251;17244:12;17196:2;17186:78;:::o

Swarm Source

ipfs://65808a2214a617213b63d567d2051f2f4e828a15d80f4db49e2f4ebe3c08c35e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.