Contract 0x1fb2151f7cb40805905f9b731c373c5cc682aa57 3

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa1122bc8f8d3c9240e96e15609a32ee34cabe177e3e87d1646a49436500f2293Transfer Ownersh...52850752022-10-27 15:13:0737 days 7 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.162223809286 4,889.794106766
0xe0c1f3508a74485aa3b51195e0adf7324ca3e87833ee4b27c0533037707136abWithdraw Remaine...50233592022-10-10 10:14:2954 days 12 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.41120624281 4,901.848212022
0x652aad4fd5d89945c43f52b7b9543d931889e35abd3daa5ba99abd52e67569a0Withdraw Remaine...49792882022-10-07 12:44:2557 days 10 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.351058580994 4,903.874685628
0xfc63a9a5a25484ddbf0be01326520e886ddbafd7d564084710dc026281722feaWithdraw Remaine...49792792022-10-07 12:43:3457 days 10 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.351058611068 4,903.875105717
0x966a4a0d081e34082c6ee7a95ea2dd747ca807b618aea15beae6d8ca744c3be1Withdraw Funds45966852022-09-12 9:11:0882 days 13 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.338294636098 4,921.436682211
0xefae4c6f9dafbb7207a320c09cb57ded992b901d9e7f25aca47936bc7e8061f9Finalize Ico45966212022-09-12 9:05:0682 days 13 hrs ago0xeefd2d76564d3c38920503881796ef3a5fecf268 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa570 CRO0.1210772597 4,921.439708168
0x86f839da77e2f12e85f1010dadfa8f8ee81bc7fd36919c478719ef9d70def81aContribute45964322022-09-12 8:47:1882 days 14 hrs ago0x85f78899c135174f5c22e489586b214e647e7640 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57250 CRO0.34646340
0xb9e44a5031af1be26c556d6104607c8df19017377412c9d694231c5cf8453fd8Contribute45952992022-09-12 7:00:2882 days 15 hrs ago0x6439afd48531a88a481ffca0de1335fd04908c8f IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57450 CRO0.26996340
0x83453976970debb999a130ccf8d1b13158ebdbd6804f153146a8c0354638a7f8Contribute45947512022-09-12 6:08:4182 days 16 hrs ago0xa97c9a4e627d284050f62abfbf1df91754cc74c0 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57590 CRO0.3464634 5,100
0xae109ce3c2f8841d8029c0df94bb8c1b11c0037bfdd1f09df9725e0e95a0426bContribute45945402022-09-12 5:48:4782 days 17 hrs ago0x561bc335f0fa57d8c6e8ae28f61c728fbb408724 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57250 CRO0.34646340
0xb629d3ac16dc4e546833fe63c725507b79d6ccd8b663c7cde866de6de6c082d3Contribute45944352022-09-12 5:38:5382 days 17 hrs ago0x3e9a40e07de62f15e4ab2db205065528d0707c34 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57404.20039271219974 CRO0.26996340
0x80187e74c5c746d3f4d299a8f6e0cc883585d5e38d8aaa5b7dff871abdd82456Contribute45925322022-09-12 2:39:1682 days 20 hrs ago0x58200e7e8dac79950154268a4c5bb1809bea0495 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57205 CRO0.26996340
0x481343f6284161d8dd5a1e3ddbbb9903ee8073cf6d7e4000cbac4b5b929ce1a2Contribute45924652022-09-12 2:32:5782 days 20 hrs ago0x58200e7e8dac79950154268a4c5bb1809bea0495 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57300 CRO0.34646340
0x50cae476325ea3d879391e6a4f4565f250ca8f72d3ebcc94edb7a141e242de6dContribute45916672022-09-12 1:17:3882 days 21 hrs ago0xa2d767629ef6aafb33a2c072ef067098a0e8e639 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57500 CRO0.26996340
0x7e4e94f0d07c709854022257a02f0669f6d45e8dd7a3471aa3d941ec0ffbbe79Contribute45904452022-09-11 23:22:1882 days 23 hrs ago0xab16e76dada8d9e6ce29e72e328e2c528faccc40 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57255 CRO0.3342846519850
0xc5fec16746a17255b526a0932fb3311a2eae276420c9d5381c9bb0b693a3eef5Contribute45900082022-09-11 22:41:0983 days 12 mins ago0x13b8136d36da43ed340ac7260ab8665264dce083 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57500 CRO0.34646340
0xf3d1261741dd3b9637361e83be051399a818b999ee292eb114be8ad1c82c8fcdContribute45896742022-09-11 22:09:3983 days 43 mins ago0x5b3adf3e4422ca48147d996babb5f3ab247b2da6 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57400.1600167247584 CRO0.34646340
0x54090a04a7112d8b2f0bad51e31f1608d191afe29e602fd93470c02dcf0744c9Contribute45890652022-09-11 21:12:1383 days 1 hr ago0x8e9c8975503e3223aede60b4d8f1fbb45ac93a00 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57250 CRO0.34646340
0x2a41123efca48d327cd9ba077e3f1714c0002a2a5b31dc8a65e0f433de701707Contribute45888002022-09-11 20:47:1283 days 2 hrs ago0x0144c8a1c8691c93da212609b7e1041e64210468 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57260 CRO0.3464634 5,100
0xa95a9c8439ff5d30d77331202bcdd003109923d93fd82b2a2f9ef8abbaab41e4Contribute45886302022-09-11 20:31:1083 days 2 hrs ago0x578614c2aa2f1921b493ede7b7c5236a1efd961e IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa573,350 CRO0.2699634 5,100
0x41124b0adfafdbd00dae29818153f990c45966ae770ff48ae9e221313d8cce49Contribute45882772022-09-11 19:57:4683 days 2 hrs ago0xc8fe153a9346e5490b0b4acf4658b090ab09c486 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa571,000 CRO0.3464634 5,100
0x951e4457ce7863458dd42dc68973bac0f2e5d23a2392f8406608f7aee926c4c6Contribute45881202022-09-11 19:42:5483 days 3 hrs ago0x78f12d0d41e72a52c13c1940590387d0c7c52ee8 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57500 CRO0.2699634 5,100
0xfc8cfe4eed1b67d9c9591fb96c47dfd6c9b561bee77bcd7112b9af29e7dfc249Contribute45878582022-09-11 19:18:0883 days 3 hrs ago0x78f12d0d41e72a52c13c1940590387d0c7c52ee8 IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa57500 CRO0.3464634 5,100
0xe24d1a3ecc53a791a7f97db4b8891a6f1c6e90b6199beea645610dbc15417747Contribute45877672022-09-11 19:09:3183 days 3 hrs ago0xedcb92178b995eb0545a03cdba5f6d24cfa2b3ff IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa571,700 CRO0.3464634 5,100
0xe5e63c9d69242d9727549317e7bb72ceee373e07a234ed6e43bc4eb4ae47bde9Contribute45877092022-09-11 19:04:0183 days 3 hrs ago0x6439afd48531a88a481ffca0de1335fd04908c8f IN  0x1fb2151f7cb40805905f9b731c373c5cc682aa5750 CRO0.26996340
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0x966a4a0d081e34082c6ee7a95ea2dd747ca807b618aea15beae6d8ca744c3be145966852022-09-12 9:11:0882 days 13 hrs ago 0x1fb2151f7cb40805905f9b731c373c5cc682aa570xeefd2d76564d3c38920503881796ef3a5fecf268222,673.1066324451868636 CRO
0x966a4a0d081e34082c6ee7a95ea2dd747ca807b618aea15beae6d8ca744c3be145966852022-09-12 9:11:0882 days 13 hrs ago 0x1fb2151f7cb40805905f9b731c373c5cc682aa570x172a25d57da59ab86792fb8ced103ad871cbef344,544.3491149478609564 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CandyIco

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-09-08
*/

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

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



pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


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



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        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;
    }
}


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



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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


// File contracts/libs/UniversalERC20.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

// File: contracts/UniversalERC20.sol
library UniversalERC20 {
    using SafeERC20 for IERC20;

    IERC20 private constant ZERO_ADDRESS =
        IERC20(0x0000000000000000000000000000000000000000);
    IERC20 private constant ETH_ADDRESS =
        IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    function universalTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        if (amount == 0) {
            return 0;
        }

        if (isETH(token)) {
            payable(address(uint160(to))).transfer(amount);
            return amount;
        } else {
            uint256 balanceBefore = token.balanceOf(to);
            token.safeTransfer(to, amount);
            uint256 balanceAfter = token.balanceOf(to);
            return balanceAfter - balanceBefore;
        }
    }

    function universalTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        if (amount == 0) {
            return 0;
        }

        if (isETH(token)) {
            require(
                from == msg.sender && msg.value >= amount,
                "Wrong useage of ETH.universalTransferFrom()"
            );
            if (to != address(this)) {
                payable(address(uint160(to))).transfer(amount);
            }
            if (msg.value > amount) {
                // refund redundant amount
                payable(msg.sender).transfer(msg.value - amount);
            }
            return amount;
        } else {
            uint256 balanceBefore = token.balanceOf(to);
            token.safeTransferFrom(from, to, amount);
            uint256 balanceAfter = token.balanceOf(to);
            return balanceAfter - balanceBefore;
        }
    }

    function universalTransferFromSenderToThis(IERC20 token, uint256 amount)
        internal
        returns (uint256)
    {
        if (amount == 0) {
            return 0;
        }

        if (isETH(token)) {
            if (msg.value > amount) {
                // Return remainder if exist
                payable(msg.sender).transfer(msg.value - amount);
            }
            return amount;
        } else {
            uint256 balanceBefore = token.balanceOf(address(this));
            token.safeTransferFrom(msg.sender, address(this), amount);
            uint256 balanceAfter = token.balanceOf(address(this));
            return balanceAfter - balanceBefore;
        }
    }

    function universalApprove(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        if (!isETH(token)) {
            if (amount > 0 && token.allowance(address(this), to) > 0) {
                token.safeApprove(to, 0);
            }
            token.safeApprove(to, amount);
        }
    }

    function universalBalanceOf(IERC20 token, address who)
        internal
        view
        returns (uint256)
    {
        if (isETH(token)) {
            return who.balance;
        } else {
            return token.balanceOf(who);
        }
    }

    function universalDecimals(IERC20 token) internal view returns (uint256) {
        if (isETH(token)) {
            return 18;
        }

        (bool success, bytes memory data) = address(token).staticcall{
            gas: 10000
        }(abi.encodeWithSignature("decimals()"));
        if (!success || data.length == 0) {
            (success, data) = address(token).staticcall{gas: 10000}(
                abi.encodeWithSignature("DECIMALS()")
            );
        }

        return (success && data.length > 0) ? abi.decode(data, (uint256)) : 18;
    }

    function isETH(IERC20 token) internal pure returns (bool) {
        return (address(token) == address(ZERO_ADDRESS) ||
            address(token) == address(ETH_ADDRESS));
    }
}


// File contracts/candy/CandyIco.sol

pragma solidity ^0.8.0;


contract CandyIco is Ownable {
    using SafeERC20 for IERC20;
    using Address for address payable;
    using UniversalERC20 for IERC20;

    struct ContributeData {
        uint256 amount;
        bool claimed;
    }

    IERC20 private immutable _icoToken;
    address payable private immutable _icoOwner; // ICO owner wallet address
    address payable private immutable _icoTreasury; // ICO treasury wallet address
    uint16 private immutable _treasuryFee; // ICO treasury fee

    uint256 private _startDate = 1662714000; // When to start ICO - Sep 9, 2022 09:00:00 UTC
    uint256 private _endDate = 1662973200; // When to end ICO - Sep 12, 2022 09:00:00 UTC
    uint256 private _claimDate = 1662980400; // When to claim ICO - Sep 12, 2022 11:00:00 UTC

    uint256 private _hardcap = 2000000 ether; // hard cap
    uint256 private _softcap = 1000000 ether; // softcap
    uint256 private _icoPrice = 0.5 ether; // token price
    uint256 private _minPerUser = 250 ether; // min amount per user
    uint256 private _maxPerUser = 250000 ether; // max amount per user

    bool private _fundsWithdrawn;
    uint256 private _totalContributed; // Total contributed amount in buy token
    uint256 private _totalClaimed; // Total claimed amount in buy token
    mapping(address => ContributeData) private _contributedPerUser; // User contributed amount in buy token

    constructor(
        IERC20 icoToken_,
        address payable icoTreasury_,
        address payable icoOwner_,
        uint16 treasuryFee_
    ) {
        icoToken_.balanceOf(address(this)); // To check the IERC20 contract
        _icoToken = icoToken_;

        require(
            icoOwner_ != address(0) && icoTreasury_ != address(0),
            "Invalid owner / treasury"
        );
        _icoOwner = icoOwner_;
        _icoTreasury = icoTreasury_;
        _treasuryFee = treasuryFee_;
    }

    /**
     * @dev Contribute ICO
     *
     * Only available when ICO is opened
     */
    function contribute() external payable {
        require(
            block.timestamp >= _startDate && block.timestamp < _endDate,
            "ICO not opened"
        );

        uint256 contributeAmount = msg.value;
        ContributeData storage userContributeData = _contributedPerUser[
            _msgSender()
        ];

        uint256 contributedSoFar = userContributeData.amount + contributeAmount;
        require(
            contributedSoFar >= _minPerUser && contributedSoFar <= _maxPerUser,
            "Out of limit"
        );

        userContributeData.amount = contributedSoFar;
        _totalContributed += contributeAmount;

        require(_totalContributed <= _hardcap, "Reached hardcap");
    }

    /**
     * @dev Claim tokens from his contributed amount
     *
     * Only available after claim date
     */
    function claimTokens() external {
        require(block.timestamp > _claimDate, "Wait more");
        ContributeData storage userContributedData = _contributedPerUser[
            _msgSender()
        ];
        require(!userContributedData.claimed, "Already claimed");
        uint256 userContributedAmount = userContributedData.amount;
        require(userContributedAmount > 0, "Not contributed");

        uint256 userRequiredAmount = (userContributedAmount *
            10**(_icoToken.universalDecimals())) / _icoPrice;

        if (userRequiredAmount > 0) {
            _icoToken.safeTransfer(_msgSender(), userRequiredAmount);
        }
        userContributedData.claimed = true;
        _totalContributed += userContributedAmount;
    }

    /**
     * @dev Finalize ICO when it was filled or by some reasons
     *
     * It should indicate claim date
     * Only ICO owner is allowed to call this function
     */
    function finalizeIco(uint256 claimDate_) external {
        require(_msgSender() == _icoOwner, "Unpermitted");
        require(block.timestamp < _endDate, "Already finished");
        require(block.timestamp < claimDate_, "Invalid claim date");
        if (_startDate > block.timestamp) {
            _startDate = block.timestamp;
        }
        _endDate = block.timestamp;
        _claimDate = claimDate_;
    }

    /**
     * @dev Withdraw remained tokens
     *
     * Only ICO owner is allowed to call this function
     */
    function withdrawRemainedTokens() external {
        require(_msgSender() == _icoOwner, "Unpermitted");
        require(block.timestamp >= _endDate, "ICO not finished");
        uint256 contractTokens = _icoToken.balanceOf(address(this));
        uint256 unclaimedTokens = ((_totalContributed - _totalClaimed) *
            10**(_icoToken.universalDecimals())) / _icoPrice;

        _icoToken.safeTransfer(_msgSender(), contractTokens - unclaimedTokens);
    }

    /**
     * @dev Withdraw contributed funds
     *
     * Only ICO owner is allowed to call this function
     */
    function withdrawFunds() external {
        require(_msgSender() == _icoOwner, "Unpermitted");
        require(block.timestamp >= _endDate, "ICO not finished");
        require(!_fundsWithdrawn, "Already withdrawn");

        // Transfer treasury funds first
        uint256 treasuryFunds = (_totalContributed * _treasuryFee) / 10000;
        _icoTreasury.sendValue(treasuryFunds);

        // Transfer redundant funds
        _icoOwner.sendValue(_totalContributed - treasuryFunds);

        _fundsWithdrawn = true;
    }

    function viewIcoToken() external view returns (address) {
        return address(_icoToken);
    }

    function viewIcoOwner() external view returns (address payable) {
        return _icoOwner;
    }

    function viewIcoTreasury() external view returns (address payable) {
        return _icoTreasury;
    }

    function viewTreasuryFee() external view returns (uint16) {
        return _treasuryFee;
    }

    function viewTotalContributed() external view returns (uint256) {
        return _totalContributed;
    }

    function viewTotalClaimed() external view returns (uint256) {
        return _totalClaimed;
    }

    function viewUserContributed(address account_)
        external
        view
        returns (uint256, bool)
    {
        return (
            _contributedPerUser[account_].amount,
            _contributedPerUser[account_].claimed
        );
    }

    /**
     * @dev Update ICO start / end / claim date
     *
     * Only owner is allowed to call this function
     */
    function updateIcoDates(
        uint256 startDate_,
        uint256 endDate_,
        uint256 claimDate_
    ) external onlyOwner {
        require(block.timestamp < _startDate, "ICO already started");
        require(block.timestamp < startDate_, "Must be future time");
        require(startDate_ < endDate_, "startDate must before endDate");
        require(endDate_ < claimDate_, "endDate must before claimDate");

        _startDate = startDate_;
        _endDate = endDate_;
        _claimDate = claimDate_;
    }

    function viewIcoDates()
        external
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        return (_startDate, _endDate, _claimDate);
    }

    /**
     * @dev Update ICO hardcap / softcap
     *
     * Only owner is allowed to call this function
     */
    function updateCap(uint256 softcap_, uint256 hardcap_) external onlyOwner {
        require(block.timestamp < _startDate, "ICO already started");
        require(hardcap_ > 0 && softcap_ > 0, "Non zero values");
        require(softcap_ <= hardcap_, "Invalid values");
        _hardcap = hardcap_;
        _softcap = softcap_;
    }

    function viewCap() external view returns (uint256, uint256) {
        return (_softcap, _hardcap);
    }

    /**
     * @dev Update user contribute min / max limitation
     *
     * Only owner is allowed to call this function
     */
    function updateLimitation(uint256 minPerUser_, uint256 maxPerUser_)
        external
        onlyOwner
    {
        require(minPerUser_ <= maxPerUser_, "Invalid values");
        require(maxPerUser_ > 0, "Invalid max value");
        _minPerUser = minPerUser_;
        _maxPerUser = maxPerUser_;
    }

    function viewLimitation() external view returns (uint256, uint256) {
        return (_minPerUser, _maxPerUser);
    }

    /**
     * @dev Update ICO price
     *
     * Only owner is allowed to call this function
     */
    function updateIcoPrice(uint256 icoPrice_) external onlyOwner {
        require(block.timestamp < _startDate, "ICO already started");
        require(icoPrice_ > 0, "Invalid price");
        _icoPrice = icoPrice_;
    }

    function viewIcoPrice() external view returns (uint256) {
        return _icoPrice;
    }

    /**
     * @dev Recover ETH sent to the contract
     *
     * Only owner allowed to call this function
     */
    function recoverETH() external onlyOwner {
        require(_fundsWithdrawn, "Not available until withdraw funds");
        uint256 etherBalance = address(this).balance;
        require(etherBalance > 0, "No ETH");
        payable(_msgSender()).transfer(etherBalance);
    }

    /**
     * @dev It allows the admin to recover tokens sent to the contract
     * @param token_: the address of the token to withdraw
     * @param amount_: the number of tokens to withdraw
     *
     * This function is only callable by owner
     */
    function recoverToken(address token_, uint256 amount_) external onlyOwner {
        require(token_ != address(_icoToken), "Not allowed token");
        require(amount_ > 0, "Non zero value");
        IERC20(token_).safeTransfer(_msgSender(), amount_);
    }

    /**
     * @dev To receive ETH in the ICO contract
     */
    receive() external payable {}
}

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"icoToken_","type":"address"},{"internalType":"address payable","name":"icoTreasury_","type":"address"},{"internalType":"address payable","name":"icoOwner_","type":"address"},{"internalType":"uint16","name":"treasuryFee_","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contribute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimDate_","type":"uint256"}],"name":"finalizeIco","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"softcap_","type":"uint256"},{"internalType":"uint256","name":"hardcap_","type":"uint256"}],"name":"updateCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate_","type":"uint256"},{"internalType":"uint256","name":"endDate_","type":"uint256"},{"internalType":"uint256","name":"claimDate_","type":"uint256"}],"name":"updateIcoDates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"icoPrice_","type":"uint256"}],"name":"updateIcoPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minPerUser_","type":"uint256"},{"internalType":"uint256","name":"maxPerUser_","type":"uint256"}],"name":"updateLimitation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewIcoDates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewIcoOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewIcoPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewIcoToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewIcoTreasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLimitation","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTreasuryFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"viewUserContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRemainedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61010060405263631b009060015563631ef51060025563631f11306003556a01a784379d99db4200000060045569d3c21bcecceda10000006005556706f05b59d3b20000600655680d8d726b7177a800006007556934f086f3b33b684000006008553480156200006e57600080fd5b5060405162001efc38038062001efc833981016040819052620000919162000207565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b1580156200011257600080fd5b505afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000273565b506001600160601b0319606085901b166080526001600160a01b038216158015906200018157506001600160a01b03831615155b620001d25760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f776e6572202f2074726561737572790000000000000000604482015260640160405180910390fd5b606091821b6001600160601b031990811660a0529290911b90911660c05260f01b6001600160f01b03191660e05250620002a5565b600080600080608085870312156200021d578384fd5b84516200022a816200028c565b60208601519094506200023d816200028c565b604086015190935062000250816200028c565b606086015190925061ffff8116811462000268578182fd5b939692955090935050565b60006020828403121562000285578081fd5b5051919050565b6001600160a01b0381168114620002a257600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f01c611bbd6200033f600039600081816103e701526107790152600081816104a801526107c2015260008181610435015281816106a10152818161080301528181610dd4015261108e0152600081816102f601528181610a8901528181610ae201528181610be001528181610e7601528181610f040152610f7a0152611bbd6000f3fe60806040526004361061016a5760003560e01c80638000deaa116100d1578063e1da49a41161008a578063f2fde38b11610064578063f2fde38b14610459578063f775e50414610479578063f8f59b8014610499578063fff24d19146104cc57600080fd5b8063e1da49a4146103d2578063eab2453c14610411578063f24994d81461042657600080fd5b80638000deaa14610343578063838ac02a1461036257806387b943ce146103775780638da5cb5b1461038c578063b29a8140146103aa578063d7bb99ba146103ca57600080fd5b80632fe69670116101235780632fe69670146102395780633e859fcb1461029257806345fd16e2146102b257806348c54b9d146102d257806354ff10b5146102e7578063715018a61461032e57600080fd5b80630614117a146101765780630672508e1461018d5780630673d3e8146101bb57806317f2656c146101d35780631d77ec3b146101f357806324600fc31461022457600080fd5b3661017157005b600080fd5b34801561018257600080fd5b5061018b6104ec565b005b34801561019957600080fd5b506005546004545b604080519283526020830191909152015b60405180910390f35b3480156101c757600080fd5b506007546008546101a1565b3480156101df57600080fd5b5061018b6101ee3660046118c6565b6105e4565b3480156101ff57600080fd5b50600154600254600354604080519384526020840192909252908201526060016101b2565b34801561023057600080fd5b5061018b61069e565b34801561024557600080fd5b5061027d610254366004611833565b6001600160a01b03166000908152600c602052604090208054600190910154909160ff90911690565b604080519283529015156020830152016101b2565b34801561029e57600080fd5b5061018b6102ad3660046118c6565b610839565b3480156102be57600080fd5b5061018b6102cd366004611896565b61091b565b3480156102de57600080fd5b5061018b6109ab565b3480156102f357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101b2565b34801561033a57600080fd5b5061018b610b40565b34801561034f57600080fd5b50600b545b6040519081526020016101b2565b34801561036e57600080fd5b50600654610354565b34801561038357600080fd5b50600a54610354565b34801561039857600080fd5b506000546001600160a01b0316610316565b3480156103b657600080fd5b5061018b6103c536600461184d565b610bb4565b61018b610ca9565b3480156103de57600080fd5b5060405161ffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b34801561041d57600080fd5b5061018b610dd1565b34801561043257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610316565b34801561046557600080fd5b5061018b610474366004611833565b610fa1565b34801561048557600080fd5b5061018b610494366004611896565b61108b565b3480156104a557600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610316565b3480156104d857600080fd5b5061018b6104e73660046118e7565b611173565b6000546001600160a01b0316331461051f5760405162461bcd60e51b815260040161051690611986565b60405180910390fd5b60095460ff1661057c5760405162461bcd60e51b815260206004820152602260248201527f4e6f7420617661696c61626c6520756e74696c2077697468647261772066756e604482015261647360f01b6064820152608401610516565b47806105b35760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610516565b604051339082156108fc029083906000818181858888f193505050501580156105e0573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461060e5760405162461bcd60e51b815260040161051690611986565b8082111561064f5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600081116106935760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d61782076616c756560781b6044820152606401610516565b600791909155600855565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146106e65760405162461bcd60e51b815260040161051690611961565b60025442101561072b5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b60095460ff16156107725760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903bb4ba34323930bbb760791b6044820152606401610516565b60006127107f000000000000000000000000000000000000000000000000000000000000000061ffff16600a546107a99190611b0b565b6107b39190611a00565b90506107e86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826112af565b61082981600a546107f99190611b2a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906112af565b506009805460ff19166001179055565b6000546001600160a01b031633146108635760405162461bcd60e51b815260040161051690611986565b60015442106108845760405162461bcd60e51b8152600401610516906119bb565b6000811180156108945750600082115b6108d25760405162461bcd60e51b815260206004820152600f60248201526e4e6f6e207a65726f2076616c75657360881b6044820152606401610516565b808211156109135760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600455600555565b6000546001600160a01b031633146109455760405162461bcd60e51b815260040161051690611986565b60015442106109665760405162461bcd60e51b8152600401610516906119bb565b600081116109a65760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b6044820152606401610516565b600655565b60035442116109e85760405162461bcd60e51b815260206004820152600960248201526857616974206d6f726560b81b6044820152606401610516565b336000908152600c60205260409020600181015460ff1615610a3e5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610516565b805480610a7f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0818dbdb9d1c9a589d5d1959608a1b6044820152606401610516565b6000600654610ab67f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c8565b610ac190600a611a63565b610acb9084611b0b565b610ad59190611a00565b90508015610b1157610b117f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338361153f565b6001838101805460ff19169091179055600a8054839190600090610b369084906119e8565b9091555050505050565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161051690611986565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bde5760405162461bcd60e51b815260040161051690611986565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610c545760405162461bcd60e51b81526020600482015260116024820152702737ba1030b63637bbb2b2103a37b5b2b760791b6044820152606401610516565b60008111610c955760405162461bcd60e51b815260206004820152600e60248201526d4e6f6e207a65726f2076616c756560901b6044820152606401610516565b6105e06001600160a01b038316338361153f565b6001544210158015610cbc575060025442105b610cf95760405162461bcd60e51b815260206004820152600e60248201526d1250d3c81b9bdd081bdc195b995960921b6044820152606401610516565b336000908152600c602052604081208054349290610d189084906119e8565b90506007548110158015610d2e57506008548111155b610d695760405162461bcd60e51b815260206004820152600c60248201526b13dd5d081bd9881b1a5b5a5d60a21b6044820152606401610516565b808255600a8054849190600090610d819084906119e8565b9091555050600454600a541115610dcc5760405162461bcd60e51b815260206004820152600f60248201526e052656163686564206861726463617608c1b6044820152606401610516565b505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610e195760405162461bcd60e51b815260040161051690611961565b600254421015610e5e5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef891906118ae565b90506000600654610f317f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c8565b610f3c90600a611a63565b600b54600a54610f4c9190611b2a565b610f569190611b0b565b610f609190611a00565b90506105e033610f708385611b2a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061153f565b6000546001600160a01b03163314610fcb5760405162461bcd60e51b815260040161051690611986565b6001600160a01b0381166110305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610516565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146110d35760405162461bcd60e51b815260040161051690611961565b60025442106111175760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48199a5b9a5cda195960821b6044820152606401610516565b80421061115b5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420636c61696d206461746560701b6044820152606401610516565b42600154111561116a57426001555b42600255600355565b6000546001600160a01b0316331461119d5760405162461bcd60e51b815260040161051690611986565b60015442106111be5760405162461bcd60e51b8152600401610516906119bb565b8242106112035760405162461bcd60e51b81526020600482015260136024820152724d757374206265206675747572652074696d6560681b6044820152606401610516565b8183106112525760405162461bcd60e51b815260206004820152601d60248201527f737461727444617465206d757374206265666f726520656e64446174650000006044820152606401610516565b8082106112a15760405162461bcd60e51b815260206004820152601d60248201527f656e6444617465206d757374206265666f726520636c61696d446174650000006044820152606401610516565b600192909255600255600355565b804710156112ff5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610516565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461134c576040519150601f19603f3d011682016040523d82523d6000602084013e611351565b606091505b5050905080610dcc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610516565b60006113d382611591565b156113e057506012919050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916001600160a01b03861691612710916114289190611912565b6000604051808303818686fa925050503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b509150915081158061147a57508051155b1561150a5760408051600481526024810182526020810180516001600160e01b0316632e0f262560e01b17905290516001600160a01b03861691612710916114c29190611912565b6000604051808303818686fa925050503d80600081146114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b5090925090505b818015611518575060008151115b611523576012611537565b8080602001905181019061153791906118ae565b949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610dcc9084906115cb565b60006001600160a01b03821615806115c557506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b6000611620826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661169d9092919063ffffffff16565b805190915015610dcc578080602001905181019061163e9190611876565b610dcc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610516565b60606116ac84846000856116b6565b90505b9392505050565b6060824710156117175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610516565b843b6117655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610516565b600080866001600160a01b031685876040516117819190611912565b60006040518083038185875af1925050503d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b50915091506117d38282866117de565b979650505050505050565b606083156117ed5750816116af565b8251156117fd5782518084602001fd5b8160405162461bcd60e51b8152600401610516919061192e565b80356001600160a01b038116811461182e57600080fd5b919050565b600060208284031215611844578081fd5b6116af82611817565b6000806040838503121561185f578081fd5b61186883611817565b946020939093013593505050565b600060208284031215611887578081fd5b815180151581146116af578182fd5b6000602082840312156118a7578081fd5b5035919050565b6000602082840312156118bf578081fd5b5051919050565b600080604083850312156118d8578182fd5b50508035926020909101359150565b6000806000606084860312156118fb578081fd5b505081359360208301359350604090920135919050565b60008251611924818460208701611b41565b9190910192915050565b602081526000825180602084015261194d816040850160208701611b41565b601f01601f19169190910160400192915050565b6020808252600b908201526a155b9c195c9b5a5d1d195960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152721250d3c8185b1c9958591e481cdd185c9d1959606a1b604082015260600190565b600082198211156119fb576119fb611b71565b500190565b600082611a1b57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115611a5b578160001904821115611a4157611a41611b71565b80851615611a4e57918102915b93841c9390800290611a25565b509250929050565b60006116af8383600082611a79575060016115c5565b81611a86575060006115c5565b8160018114611a9c5760028114611aa657611ac2565b60019150506115c5565b60ff841115611ab757611ab7611b71565b50506001821b6115c5565b5060208310610133831016604e8410600b8410161715611ae5575081810a6115c5565b611aef8383611a20565b8060001904821115611b0357611b03611b71565b029392505050565b6000816000190483118215151615611b2557611b25611b71565b500290565b600082821015611b3c57611b3c611b71565b500390565b60005b83811015611b5c578181015183820152602001611b44565b83811115611b6b576000848401525b50505050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220bf48d67cb8e61673ddc04fee1fc474d8578e6611a17a5fe3a5cc78e931850c9d64736f6c6343000804003300000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c7977000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef34000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf26800000000000000000000000000000000000000000000000000000000000000c8

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

00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c7977000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef34000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf26800000000000000000000000000000000000000000000000000000000000000c8

-----Decoded View---------------
Arg [0] : icoToken_ (address): 0x06c04b0ad236e7ca3b3189b1d049fe80109c7977
Arg [1] : icoTreasury_ (address): 0x172a25d57da59ab86792fb8ced103ad871cbef34
Arg [2] : icoOwner_ (address): 0xeefd2d76564d3c38920503881796ef3a5fecf268
Arg [3] : treasuryFee_ (uint16): 200

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c7977
Arg [1] : 000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef34
Arg [2] : 000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf268
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c8


Deployed ByteCode Sourcemap

22174:9986:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31244:278;;;;;;;;;;;;;:::i;:::-;;29991:106;;;;;;;;;;-1:-1:-1;30070:8:0;;30080;;29991:106;;;;15070:25:1;;;15126:2;15111:18;;15104:34;;;;15043:18;29991:106:0;;;;;;;;30558:119;;;;;;;;;;-1:-1:-1;30644:11:0;;30657;;30558:119;;30240:310;;;;;;;;;;-1:-1:-1;30240:310:0;;;;;:::i;:::-;;:::i;29301:216::-;;;;;;;;;;-1:-1:-1;29476:10:0;;29488:8;;29498:10;;29301:216;;;15351:25:1;;;15407:2;15392:18;;15385:34;;;;15435:18;;;15428:34;15339:2;15324:18;29301:216:0;15306:162:1;27172:534:0;;;;;;;;;;;;;:::i;28368:257::-;;;;;;;;;;-1:-1:-1;28368:257:0;;;;;:::i;:::-;-1:-1:-1;;;;;28518:29:0;28465:7;28518:29;;;:19;:29;;;;;:36;;28569:37;;;;;28518:36;;28569:37;;;;;28368:257;;;;;14801:25:1;;;14869:14;;14862:22;14857:2;14842:18;;14835:50;14774:18;28368:257:0;14756:135:1;29645:338:0;;;;;;;;;;-1:-1:-1;29645:338:0;;;;;:::i;:::-;;:::i;30793:223::-;;;;;;;;;;-1:-1:-1;30793:223:0;;;;;:::i;:::-;;:::i;25067:763::-;;;;;;;;;;;;;:::i;27714:100::-;;;;;;;;;;-1:-1:-1;27796:9:0;27714:100;;;-1:-1:-1;;;;;2605:32:1;;;2587:51;;2575:2;2560:18;27714:100:0;2542:102:1;2795:148:0;;;;;;;;;;;;;:::i;28261:99::-;;;;;;;;;;-1:-1:-1;28339:13:0;;28261:99;;;14597:25:1;;;14585:2;14570:18;28261:99:0;14552:76:1;31024:91:0;;;;;;;;;;-1:-1:-1;31098:9:0;;31024:91;;28146:107;;;;;;;;;;-1:-1:-1;28228:17:0;;28146:107;;2144:87;;;;;;;;;;-1:-1:-1;2190:7:0;2217:6;-1:-1:-1;;;;;2217:6:0;2144:87;;31793:261;;;;;;;;;;-1:-1:-1;31793:261:0;;;;;:::i;:::-;;:::i;24199:740::-;;;:::i;28042:96::-;;;;;;;;;;-1:-1:-1;28042:96:0;;14432:6:1;28118:12:0;14420:19:1;14402:38;;14390:2;14375:18;28042:96:0;14357:89:1;26574:468:0;;;;;;;;;;;;;:::i;27822:99::-;;;;;;;;;;-1:-1:-1;27904:9:0;27822:99;;3098:244;;;;;;;;;;-1:-1:-1;3098:244:0;;;;;:::i;:::-;;:::i;26022:424::-;;;;;;;;;;-1:-1:-1;26022:424:0;;;;;:::i;:::-;;:::i;27929:105::-;;;;;;;;;;-1:-1:-1;28014:12:0;27929:105;;28760:533;;;;;;;;;;-1:-1:-1;28760:533:0;;;;;:::i;:::-;;:::i;31244:278::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;;;;;;;;;31304:15:::1;::::0;::::1;;31296:62;;;::::0;-1:-1:-1;;;31296:62:0;;3742:2:1;31296:62:0::1;::::0;::::1;3724:21:1::0;3781:2;3761:18;;;3754:30;3820:34;3800:18;;;3793:62;-1:-1:-1;;;3871:18:1;;;3864:32;3913:19;;31296:62:0::1;3714:224:1::0;31296:62:0::1;31392:21;31432:16:::0;31424:35:::1;;;::::0;-1:-1:-1;;;31424:35:0;;4846:2:1;31424:35:0::1;::::0;::::1;4828:21:1::0;4885:1;4865:18;;;4858:29;-1:-1:-1;;;4903:18:1;;;4896:36;4949:18;;31424:35:0::1;4818:155:1::0;31424:35:0::1;31470:44;::::0;774:10;;31470:44;::::1;;;::::0;31501:12;;31470:44:::1;::::0;;;31501:12;774:10;31470:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2435:1;31244:278::o:0;30240:310::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;30384:11:::1;30369;:26;;30361:53;;;::::0;-1:-1:-1;;;30361:53:0;;4503:2:1;30361:53:0::1;::::0;::::1;4485:21:1::0;4542:2;4522:18;;;4515:30;-1:-1:-1;;;4561:18:1;;;4554:44;4615:18;;30361:53:0::1;4475:164:1::0;30361:53:0::1;30447:1;30433:11;:15;30425:45;;;::::0;-1:-1:-1;;;30425:45:0;;10229:2:1;30425:45:0::1;::::0;::::1;10211:21:1::0;10268:2;10248:18;;;10241:30;-1:-1:-1;;;10287:18:1;;;10280:47;10344:18;;30425:45:0::1;10201:167:1::0;30425:45:0::1;30481:11;:25:::0;;;;30517:11:::1;:25:::0;30240:310::o;27172:534::-;774:10;27241:9;-1:-1:-1;;;;;27225:25:0;;27217:49;;;;-1:-1:-1;;;27217:49:0;;;;;;;:::i;:::-;27304:8;;27285:15;:27;;27277:56;;;;-1:-1:-1;;;27277:56:0;;6280:2:1;27277:56:0;;;6262:21:1;6319:2;6299:18;;;6292:30;-1:-1:-1;;;6338:18:1;;;6331:46;6394:18;;27277:56:0;6252:166:1;27277:56:0;27353:15;;;;27352:16;27344:46;;;;-1:-1:-1;;;27344:46:0;;8844:2:1;27344:46:0;;;8826:21:1;8883:2;8863:18;;;8856:30;-1:-1:-1;;;8902:18:1;;;8895:47;8959:18;;27344:46:0;8816:167:1;27344:46:0;27445:21;27506:5;27490:12;27470:32;;:17;;:32;;;;:::i;:::-;27469:42;;;;:::i;:::-;27445:66;-1:-1:-1;27522:37:0;-1:-1:-1;;;;;27522:12:0;:22;27445:66;27522:22;:37::i;:::-;27609:54;27649:13;27629:17;;:33;;;;:::i;:::-;-1:-1:-1;;;;;27609:9:0;:19;;;:54::i;:::-;-1:-1:-1;27676:15:0;:22;;-1:-1:-1;;27676:22:0;27694:4;27676:22;;;27172:534::o;29645:338::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;29756:10:::1;;29738:15;:28;29730:60;;;;-1:-1:-1::0;;;29730:60:0::1;;;;;;;:::i;:::-;29820:1;29809:8;:12;:28;;;;;29836:1;29825:8;:12;29809:28;29801:56;;;::::0;-1:-1:-1;;;29801:56:0;;12674:2:1;29801:56:0::1;::::0;::::1;12656:21:1::0;12713:2;12693:18;;;12686:30;-1:-1:-1;;;12732:18:1;;;12725:45;12787:18;;29801:56:0::1;12646:165:1::0;29801:56:0::1;29888:8;29876;:20;;29868:47;;;::::0;-1:-1:-1;;;29868:47:0;;4503:2:1;29868:47:0::1;::::0;::::1;4485:21:1::0;4542:2;4522:18;;;4515:30;-1:-1:-1;;;4561:18:1;;;4554:44;4615:18;;29868:47:0::1;4475:164:1::0;29868:47:0::1;29926:8;:19:::0;29956:8:::1;:19:::0;29645:338::o;30793:223::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;30892:10:::1;;30874:15;:28;30866:60;;;;-1:-1:-1::0;;;30866:60:0::1;;;;;;;:::i;:::-;30957:1;30945:9;:13;30937:39;;;::::0;-1:-1:-1;;;30937:39:0;;13777:2:1;30937:39:0::1;::::0;::::1;13759:21:1::0;13816:2;13796:18;;;13789:30;-1:-1:-1;;;13835:18:1;;;13828:43;13888:18;;30937:39:0::1;13749:163:1::0;30937:39:0::1;30987:9;:21:::0;30793:223::o;25067:763::-;25136:10;;25118:15;:28;25110:50;;;;-1:-1:-1;;;25110:50:0;;9190:2:1;25110:50:0;;;9172:21:1;9229:1;9209:18;;;9202:29;-1:-1:-1;;;9247:18:1;;;9240:39;9296:18;;25110:50:0;9162:158:1;25110:50:0;774:10;25171:42;25216:57;;;:19;:57;;;;;25293:27;;;;;;25292:28;25284:56;;;;-1:-1:-1;;;25284:56:0;;9885:2:1;25284:56:0;;;9867:21:1;9924:2;9904:18;;;9897:30;-1:-1:-1;;;9943:18:1;;;9936:45;9998:18;;25284:56:0;9857:165:1;25284:56:0;25383:26;;25428:25;25420:53;;;;-1:-1:-1;;;25420:53:0;;11624:2:1;25420:53:0;;;11606:21:1;11663:2;11643:18;;;11636:30;-1:-1:-1;;;11682:18:1;;;11675:45;11737:18;;25420:53:0;11596:165:1;25420:53:0;25486:26;25592:9;;25558:29;:9;-1:-1:-1;;;;;25558:27:0;;:29::i;:::-;25553:35;;:2;:35;:::i;:::-;25516:72;;:21;:72;:::i;:::-;25515:86;;;;:::i;:::-;25486:115;-1:-1:-1;25618:22:0;;25614:111;;25657:56;:9;-1:-1:-1;;;;;25657:22:0;774:10;25694:18;25657:22;:56::i;:::-;25765:4;25735:27;;;:34;;-1:-1:-1;;25735:34:0;;;;;;25780:17;:42;;25801:21;;25780:17;25735:27;;25780:42;;25801:21;;25780:42;:::i;:::-;;;;-1:-1:-1;;;;;25067:763:0:o;2795:148::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;2902:1:::1;2886:6:::0;;2865:40:::1;::::0;-1:-1:-1;;;;;2886:6:0;;::::1;::::0;2865:40:::1;::::0;2902:1;;2865:40:::1;2933:1;2916:19:::0;;-1:-1:-1;;;;;;2916:19:0::1;::::0;;2795:148::o;31793:261::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;31904:9:::1;-1:-1:-1::0;;;;;31886:28:0::1;:6;-1:-1:-1::0;;;;;31886:28:0::1;;;31878:58;;;::::0;-1:-1:-1;;;31878:58:0;;5587:2:1;31878:58:0::1;::::0;::::1;5569:21:1::0;5626:2;5606:18;;;5599:30;-1:-1:-1;;;5645:18:1;;;5638:47;5702:18;;31878:58:0::1;5559:167:1::0;31878:58:0::1;31965:1;31955:7;:11;31947:38;;;::::0;-1:-1:-1;;;31947:38:0;;10936:2:1;31947:38:0::1;::::0;::::1;10918:21:1::0;10975:2;10955:18;;;10948:30;-1:-1:-1;;;10994:18:1;;;10987:44;11048:18;;31947:38:0::1;10908:164:1::0;31947:38:0::1;31996:50;-1:-1:-1::0;;;;;31996:27:0;::::1;774:10:::0;32038:7;31996:27:::1;:50::i;24199:740::-:0;24290:10;;24271:15;:29;;:59;;;;;24322:8;;24304:15;:26;24271:59;24249:123;;;;-1:-1:-1;;;24249:123:0;;8501:2:1;24249:123:0;;;8483:21:1;8540:2;8520:18;;;8513:30;-1:-1:-1;;;8559:18:1;;;8552:44;8613:18;;24249:123:0;8473:164:1;24249:123:0;774:10;24385:24;24476:57;;;:19;:57;;;;;24573:25;;24412:9;;24385:24;24573:44;;24412:9;;24573:44;:::i;:::-;24546:71;;24670:11;;24650:16;:31;;:66;;;;;24705:11;;24685:16;:31;;24650:66;24628:128;;;;-1:-1:-1;;;24628:128:0;;14119:2:1;24628:128:0;;;14101:21:1;14158:2;14138:18;;;14131:30;-1:-1:-1;;;14177:18:1;;;14170:42;14229:18;;24628:128:0;14091:162:1;24628:128:0;24769:44;;;24824:17;:37;;24845:16;;24824:17;24769:25;;24824:37;;24845:16;;24824:37;:::i;:::-;;;;-1:-1:-1;;24903:8:0;;24882:17;;:29;;24874:57;;;;-1:-1:-1;;;24874:57:0;;7392:2:1;24874:57:0;;;7374:21:1;7431:2;7411:18;;;7404:30;-1:-1:-1;;;7450:18:1;;;7443:45;7505:18;;24874:57:0;7364:165:1;24874:57:0;24199:740;;;:::o;26574:468::-;774:10;26652:9;-1:-1:-1;;;;;26636:25:0;;26628:49;;;;-1:-1:-1;;;26628:49:0;;;;;;;:::i;:::-;26715:8;;26696:15;:27;;26688:56;;;;-1:-1:-1;;;26688:56:0;;6280:2:1;26688:56:0;;;6262:21:1;6319:2;6299:18;;;6292:30;-1:-1:-1;;;6338:18:1;;;6331:46;6394:18;;26688:56:0;6252:166:1;26688:56:0;26780:34;;-1:-1:-1;;;26780:34:0;;26808:4;26780:34;;;2587:51:1;26755:22:0;;26780:9;-1:-1:-1;;;;;26780:19:0;;;;2560:18:1;;26780:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26755:59;;26825:23;26942:9;;26908:29;:9;-1:-1:-1;;;;;26908:27:0;;:29::i;:::-;26903:35;;:2;:35;:::i;:::-;26873:13;;26853:17;;:33;;;;:::i;:::-;26852:86;;;;:::i;:::-;26851:100;;;;:::i;:::-;26825:126;-1:-1:-1;26964:70:0;774:10;27001:32;27018:15;27001:14;:32;:::i;:::-;-1:-1:-1;;;;;26964:9:0;:22;;:70;:22;:70::i;3098:244::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3187:22:0;::::1;3179:73;;;::::0;-1:-1:-1;;;3179:73:0;;5180:2:1;3179:73:0::1;::::0;::::1;5162:21:1::0;5219:2;5199:18;;;5192:30;5258:34;5238:18;;;5231:62;-1:-1:-1;;;5309:18:1;;;5302:36;5355:19;;3179:73:0::1;5152:228:1::0;3179:73:0::1;3289:6;::::0;;3268:38:::1;::::0;-1:-1:-1;;;;;3268:38:0;;::::1;::::0;3289:6;::::1;::::0;3268:38:::1;::::0;::::1;3317:6;:17:::0;;-1:-1:-1;;;;;;3317:17:0::1;-1:-1:-1::0;;;;;3317:17:0;;;::::1;::::0;;;::::1;::::0;;3098:244::o;26022:424::-;774:10;26107:9;-1:-1:-1;;;;;26091:25:0;;26083:49;;;;-1:-1:-1;;;26083:49:0;;;;;;;:::i;:::-;26169:8;;26151:15;:26;26143:55;;;;-1:-1:-1;;;26143:55:0;;11279:2:1;26143:55:0;;;11261:21:1;11318:2;11298:18;;;11291:30;-1:-1:-1;;;11337:18:1;;;11330:46;11393:18;;26143:55:0;11251:166:1;26143:55:0;26235:10;26217:15;:28;26209:59;;;;-1:-1:-1;;;26209:59:0;;5933:2:1;26209:59:0;;;5915:21:1;5972:2;5952:18;;;5945:30;-1:-1:-1;;;5991:18:1;;;5984:48;6049:18;;26209:59:0;5905:168:1;26209:59:0;26296:15;26283:10;;:28;26279:89;;;26341:15;26328:10;:28;26279:89;26389:15;26378:8;:26;26415:10;:23;26022:424::o;28760:533::-;2190:7;2217:6;-1:-1:-1;;;;;2217:6:0;774:10;2364:23;2356:68;;;;-1:-1:-1;;;2356:68:0;;;;;;;:::i;:::-;28932:10:::1;;28914:15;:28;28906:60;;;;-1:-1:-1::0;;;28906:60:0::1;;;;;;;:::i;:::-;29003:10;28985:15;:28;28977:60;;;::::0;-1:-1:-1;;;28977:60:0;;12326:2:1;28977:60:0::1;::::0;::::1;12308:21:1::0;12365:2;12345:18;;;12338:30;-1:-1:-1;;;12384:18:1;;;12377:49;12443:18;;28977:60:0::1;12298:169:1::0;28977:60:0::1;29069:8;29056:10;:21;29048:63;;;::::0;-1:-1:-1;;;29048:63:0;;9527:2:1;29048:63:0::1;::::0;::::1;9509:21:1::0;9566:2;9546:18;;;9539:30;9605:31;9585:18;;;9578:59;9654:18;;29048:63:0::1;9499:179:1::0;29048:63:0::1;29141:10;29130:8;:21;29122:63;;;::::0;-1:-1:-1;;;29122:63:0;;4145:2:1;29122:63:0::1;::::0;::::1;4127:21:1::0;4184:2;4164:18;;;4157:30;4223:31;4203:18;;;4196:59;4272:18;;29122:63:0::1;4117:179:1::0;29122:63:0::1;29198:10;:23:::0;;;;29232:8:::1;:19:::0;29262:10:::1;:23:::0;28760:533::o;8291:397::-;8406:6;8381:21;:31;;8373:73;;;;-1:-1:-1;;;8373:73:0;;7736:2:1;8373:73:0;;;7718:21:1;7775:2;7755:18;;;7748:30;7814:31;7794:18;;;7787:59;7863:18;;8373:73:0;7708:179:1;8373:73:0;8538:12;8556:9;-1:-1:-1;;;;;8556:14:0;8579:6;8556:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8537:54;;;8610:7;8602:78;;;;-1:-1:-1;;;8602:78:0;;6965:2:1;8602:78:0;;;6947:21:1;7004:2;6984:18;;;6977:30;7043:34;7023:18;;;7016:62;7114:28;7094:18;;;7087:56;7160:19;;8602:78:0;6937:248:1;21334:574:0;21398:7;21422:12;21428:5;21422;:12::i;:::-;21418:54;;;-1:-1:-1;21458:2:0;;21334:574;-1:-1:-1;21334:574:0:o;21418:54::-;21582:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21582:37:0;-1:-1:-1;;;21582:37:0;;;21520:100;;21485:12;;;;-1:-1:-1;;;;;21520:25:0;;;21565:5;;21520:100;;21582:37;21520:100;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21484:136;;;;21636:7;21635:8;:28;;;-1:-1:-1;21647:11:0;;:16;21635:28;21631:187;;;21754:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21754:37:0;-1:-1:-1;;;21754:37:0;;;21698:108;;-1:-1:-1;;;;;21698:25:0;;;21729:5;;21698:108;;21754:37;21698:108;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21680:126:0;;-1:-1:-1;21680:126:0;-1:-1:-1;21631:187:0;21838:7;:26;;;;;21863:1;21849:4;:11;:15;21838:26;21837:63;;21898:2;21837:63;;;21879:4;21868:27;;;;;;;;;;;;:::i;:::-;21830:70;21334:574;-1:-1:-1;;;;21334:574:0:o;14828:177::-;14938:58;;;-1:-1:-1;;;;;3065:32:1;;14938:58:0;;;3047:51:1;3114:18;;;;3107:34;;;14938:58:0;;;;;;;;;;3020:18:1;;;;14938:58:0;;;;;;;;-1:-1:-1;;;;;14938:58:0;-1:-1:-1;;;14938:58:0;;;14911:86;;14931:5;;14911:19;:86::i;21916:180::-;21968:4;-1:-1:-1;;;;;21993:39:0;;;;:94;;-1:-1:-1;;;;;;22049:38:0;;18400:42;22049:38;21993:94;21985:103;21916:180;-1:-1:-1;;21916:180:0:o;17262:761::-;17686:23;17712:69;17740:4;17712:69;;;;;;;;;;;;;;;;;17720:5;-1:-1:-1;;;;;17712:27:0;;;:69;;;;;:::i;:::-;17796:17;;17686:95;;-1:-1:-1;17796:21:0;17792:224;;17938:10;17927:30;;;;;;;;;;;;:::i;:::-;17919:85;;;;-1:-1:-1;;;17919:85:0;;13366:2:1;17919:85:0;;;13348:21:1;13405:2;13385:18;;;13378:30;13444:34;13424:18;;;13417:62;-1:-1:-1;;;13495:18:1;;;13488:40;13545:19;;17919:85:0;13338:232:1;9852:195:0;9955:12;9987:52;10009:6;10017:4;10023:1;10026:12;9987:21;:52::i;:::-;9980:59;;9852:195;;;;;;:::o;10904:530::-;11031:12;11089:5;11064:21;:30;;11056:81;;;;-1:-1:-1;;;11056:81:0;;8094:2:1;11056:81:0;;;8076:21:1;8133:2;8113:18;;;8106:30;8172:34;8152:18;;;8145:62;-1:-1:-1;;;8223:18:1;;;8216:36;8269:19;;11056:81:0;8066:228:1;11056:81:0;7301:20;;11148:60;;;;-1:-1:-1;;;11148:60:0;;11968:2:1;11148:60:0;;;11950:21:1;12007:2;11987:18;;;11980:30;12046:31;12026:18;;;12019:59;12095:18;;11148:60:0;11940:179:1;11148:60:0;11282:12;11296:23;11323:6;-1:-1:-1;;;;;11323:11:0;11343:5;11351:4;11323:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11281:75;;;;11374:52;11392:7;11401:10;11413:12;11374:17;:52::i;:::-;11367:59;10904:530;-1:-1:-1;;;;;;;10904:530:0:o;13444:742::-;13559:12;13588:7;13584:595;;;-1:-1:-1;13619:10:0;13612:17;;13584:595;13733:17;;:21;13729:439;;13996:10;13990:17;14057:15;14044:10;14040:2;14036:19;14029:44;13944:148;14139:12;14132:20;;-1:-1:-1;;;14132:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:264::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;647:2;632:18;;;;619:32;;-1:-1:-1;;;480:177:1:o;662:297::-;729:6;782:2;770:9;761:7;757:23;753:32;750:2;;;803:6;795;788:22;750:2;840:9;834:16;893:5;886:13;879:21;872:5;869:32;859:2;;920:6;912;905:22;964:190;1023:6;1076:2;1064:9;1055:7;1051:23;1047:32;1044:2;;;1097:6;1089;1082:22;1044:2;-1:-1:-1;1125:23:1;;1034:120;-1:-1:-1;1034:120:1:o;1159:194::-;1229:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:2;;;1303:6;1295;1288:22;1250:2;-1:-1:-1;1331:16:1;;1240:113;-1:-1:-1;1240:113:1:o;1358:258::-;1426:6;1434;1487:2;1475:9;1466:7;1462:23;1458:32;1455:2;;;1508:6;1500;1493:22;1455:2;-1:-1:-1;;1536:23:1;;;1606:2;1591:18;;;1578:32;;-1:-1:-1;1445:171:1:o;1621:326::-;1698:6;1706;1714;1767:2;1755:9;1746:7;1742:23;1738:32;1735:2;;;1788:6;1780;1773:22;1735:2;-1:-1:-1;;1816:23:1;;;1886:2;1871:18;;1858:32;;-1:-1:-1;1937:2:1;1922:18;;;1909:32;;1725:222;-1:-1:-1;1725:222:1:o;1952:274::-;2081:3;2119:6;2113:13;2135:53;2181:6;2176:3;2169:4;2161:6;2157:17;2135:53;:::i;:::-;2204:16;;;;;2089:137;-1:-1:-1;;2089:137:1:o;3152:383::-;3301:2;3290:9;3283:21;3264:4;3333:6;3327:13;3376:6;3371:2;3360:9;3356:18;3349:34;3392:66;3451:6;3446:2;3435:9;3431:18;3426:2;3418:6;3414:15;3392:66;:::i;:::-;3519:2;3498:15;-1:-1:-1;;3494:29:1;3479:45;;;;3526:2;3475:54;;3273:262;-1:-1:-1;;3273:262:1:o;6423:335::-;6625:2;6607:21;;;6664:2;6644:18;;;6637:30;-1:-1:-1;;;6698:2:1;6683:18;;6676:41;6749:2;6734:18;;6597:161::o;10373:356::-;10575:2;10557:21;;;10594:18;;;10587:30;10653:34;10648:2;10633:18;;10626:62;10720:2;10705:18;;10547:182::o;12816:343::-;13018:2;13000:21;;;13057:2;13037:18;;;13030:30;-1:-1:-1;;;13091:2:1;13076:18;;13069:49;13150:2;13135:18;;12990:169::o;15473:128::-;15513:3;15544:1;15540:6;15537:1;15534:13;15531:2;;;15550:18;;:::i;:::-;-1:-1:-1;15586:9:1;;15521:80::o;15606:217::-;15646:1;15672;15662:2;;-1:-1:-1;;;15697:31:1;;15751:4;15748:1;15741:15;15779:4;15704:1;15769:15;15662:2;-1:-1:-1;15808:9:1;;15652:171::o;15828:422::-;15917:1;15960:5;15917:1;15974:270;15995:7;15985:8;15982:21;15974:270;;;16054:4;16050:1;16046:6;16042:17;16036:4;16033:27;16030:2;;;16063:18;;:::i;:::-;16113:7;16103:8;16099:22;16096:2;;;16133:16;;;;16096:2;16212:22;;;;16172:15;;;;15974:270;;;15978:3;15892:358;;;;;:::o;16255:131::-;16315:5;16344:36;16371:8;16365:4;16440:5;16470:8;16460:2;;-1:-1:-1;16511:1:1;16525:5;;16460:2;16559:4;16549:2;;-1:-1:-1;16596:1:1;16610:5;;16549:2;16641:4;16659:1;16654:59;;;;16727:1;16722:130;;;;16634:218;;16654:59;16684:1;16675:10;;16698:5;;;16722:130;16759:3;16749:8;16746:17;16743:2;;;16766:18;;:::i;:::-;-1:-1:-1;;16822:1:1;16808:16;;16837:5;;16634:218;;16936:2;16926:8;16923:16;16917:3;16911:4;16908:13;16904:36;16898:2;16888:8;16885:16;16880:2;16874:4;16871:12;16867:35;16864:77;16861:2;;;-1:-1:-1;16973:19:1;;;17005:5;;16861:2;17052:34;17077:8;17071:4;17052:34;:::i;:::-;17122:6;17118:1;17114:6;17110:19;17101:7;17098:32;17095:2;;;17133:18;;:::i;:::-;17171:20;;16450:747;-1:-1:-1;;;16450:747:1:o;17202:168::-;17242:7;17308:1;17304;17300:6;17296:14;17293:1;17290:21;17285:1;17278:9;17271:17;17267:45;17264:2;;;17315:18;;:::i;:::-;-1:-1:-1;17355:9:1;;17254:116::o;17375:125::-;17415:4;17443:1;17440;17437:8;17434:2;;;17448:18;;:::i;:::-;-1:-1:-1;17485:9:1;;17424:76::o;17505:258::-;17577:1;17587:113;17601:6;17598:1;17595:13;17587:113;;;17677:11;;;17671:18;17658:11;;;17651:39;17623:2;17616:10;17587:113;;;17718:6;17715:1;17712:13;17709:2;;;17753:1;17744:6;17739:3;17735:16;17728:27;17709:2;;17558:205;;;:::o;17768:127::-;17829:10;17824:3;17820:20;17817:1;17810:31;17860:4;17857:1;17850:15;17884:4;17881:1;17874:15

Swarm Source

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