Contract 0x3989ec327e8e96623debf7002983a2b3861516cd 2

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7538b085d31f3659ae42dafb4195698970c968cd5e2430253d2076b6636f9338Claim Tokens53647422022-11-01 20:41:15513 days 14 hrs ago0xaa0807bcfef104e35b7583c26c626ed89fde32f6 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO1.29723 10,000
0x772d45324c9c1493ac23faf2e3489cef2c5fce1451230c21e144551d410a1049Claim Tokens53645762022-11-01 20:25:34513 days 14 hrs ago0xd8ecdfb628e812285e1961e5d8d09b1a01bab928 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.5604385252330
0x43eb72a691a9db445fcb2fe36ee722c56a046d7e4fc630b579862ec08c52a85bClaim Tokens53451542022-10-31 13:50:02514 days 20 hrs ago0xb0a9277e02a6a3b1595afe1a2906405384fdb3a7 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x7f8638e5918a4b67107967d7756bd09c7e4af0ba729e1d4f635597512d529560Claim Tokens52903202022-10-27 23:28:43518 days 11 hrs agoCronos ID Name beanz.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6341577758010
0x97d41647167c8c5a8e3b179d59982148c9b8ff88cc68914916b49e993fd829ecClaim Tokens52241842022-10-23 15:17:10522 days 19 hrs ago0xb284bbf1864cbcfb2dff29671ff0487cd4873c87 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x1b98d2dcf7dcdc2f652b1b0e207f706beee44c1db769e92cba1109dcb46ab1d0Claim Tokens52143012022-10-22 23:42:09523 days 11 hrs agoCronos ID Name williamsllc.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.5612316461510
0xcaca5d1ac9598176482339b2bf48ec59ef772c9a9a8003d3810076945b410eddClaim Tokens52094162022-10-22 16:00:20523 days 18 hrs ago0x43ed52382d670fbada5a80f5bf0bd6e36081f18e IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0xe6ad6bd1c7fa1e94994c1f06484986f7324780ae358eb9c6a60145d41b277fc0Claim Tokens51971732022-10-21 20:40:02524 days 14 hrs agoCronos ID Name cryptomania.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6347139499710
0x7020d9795987a066d1a19405cda036a9315f3ea0760b98c59ec9b8f88119daa8Claim Tokens51908542022-10-21 10:40:42525 days 4 mins ago0x1e5806ba7bd10577f9d32e3635eafb64a0a19c8a IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.66158730
0x4b3c449a3f66adbd0509214ca30f0265d1b78d271bc23ca08c50fe9f20c44610Claim Tokens51861982022-10-21 3:20:36525 days 7 hrs ago0x1a7c460f625a1e71ef327b7d2c32f1c1e16e51b4 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x1371e5016332322f8beec077bc63c041737ac538cd5a9159d97c3c1cd3e3dc5eClaim Tokens51852622022-10-21 1:52:08525 days 8 hrs ago0xdc7175eb1c0808a31c49d36207023dab01dab445 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.5613838365470
0x04cee34d03221c8f7001c0ab2d7532cc9417b1bb1f5797bbbacef4c2b62da10cClaim Tokens51847672022-10-21 1:05:19525 days 9 hrs ago0x9453f8667ad899905b6b372ddbe9b25ac0875bc6 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.66158730
0x18cbf63e4b5edc0d03eb72b9771c3fa5beebd6f7287d17afac965b4f59337400Claim Tokens51793112022-10-20 16:29:45525 days 18 hrs agoCronos ID Name freja.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.5614153070470
0x101b5cda7540b5c0ec6e641f46bd4f102da43470f5b26acbebf46972aad5ab7cClaim Tokens51744452022-10-20 8:49:42526 days 1 hr ago0x4bee27bb36466153f14795f1f23c450ae701b76d IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.66158730
0xd80745a585bf1feeda4219ddc9b3366785fe50088c5cddbce38ba3e757769d62Claim Tokens51692672022-10-20 0:37:27526 days 10 hrs ago0x3d6e2e430bb02b24e542f082f63b09b520eae7b2 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0xb73d1540ad868df1bf965f9cc6389a1c47fb9908ea84869cee7435be40996063Claim Tokens51659772022-10-19 19:24:08526 days 15 hrs ago0x9522d76b53af4deb81c804ff46b0ea4575f29315 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.58508730
0xf35ef118da96116914d9cb70bc84b9da9039027439f4b7c68365e35f8f9c2933Claim Tokens51615002022-10-19 12:17:38526 days 22 hrs ago0x9d03870cb4e54b6ae7345045864cf85dbc502d6a IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x7bd62de2b9bf786ef9f3e2ec404ab88767c34b9e108ea37c0384e1b66b9f16baClaim Tokens51611092022-10-19 11:40:27526 days 23 hrs agoCronos ID Name todatop.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x84a5213be1d41a0e404a2e0712a9b0d8cf0133fdc6881acf731dddd21a7a5d83Claim Tokens51566502022-10-19 4:36:10527 days 6 hrs ago0xdddcb1c27aee1829d701f9c029171344e4c0c487 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6349566347950
0xee10447835033d6a509afe0b795ab10d41f4c53f56ba1358b5fcf2c86e9f13d3Claim Tokens51532642022-10-18 23:14:11527 days 11 hrs ago0x1405d7e44400824de19b24c6333d0dfa2f241774 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x7558ea0ff3a9ac698ceb27f948183ad32d2da3020cc029b56b5f76abe5ed7e27Claim Tokens51532522022-10-18 23:13:03527 days 11 hrs ago0x9ce4b1f9a82aa4037e6f8c5977be380371ce8d31 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x777fade13dbaf9a30d8765994bec0b7e202176f55e0eb2f06aa3f05c8106f912Claim Tokens51511692022-10-18 19:54:56527 days 14 hrs ago0x0e45286a3724edb5dd1b01cda2d7c3f9f7f1a639 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0x8e851bc4792ac28c8df1d8772360d748d117f5f16c0aefd3a9c55e356aaa4b93Claim Tokens51507942022-10-18 19:19:17527 days 15 hrs ago0x19db5e03a5344441908c538b826cd16ef7588278 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6615873 5,100
0xae98094879983a9a3eec57d8c3cbbe7f99970efbf8c7a4934047ba134935a4f7Claim Tokens51449192022-10-18 9:59:56528 days 45 mins ago0xfc2482f09896d02cd70be01531c91084441cb538 IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.5850873 5,100
0x9b804504914a0cbfc379baa9cb3b97dfeb1c92b95e3ba63e4898ed42f8c20e2aClaim Tokens51409522022-10-18 3:42:48528 days 7 hrs agoCronos ID Name somerville.cro IN  0x3989ec327e8e96623debf7002983a2b3861516cd0 CRO0.6350508008120
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0xd17cde548db42fb049445e93c77c45c3580550a19be3da35c253c52561ca622751291582022-10-17 9:00:03529 days 1 hr ago 0x3989ec327e8e96623debf7002983a2b3861516cd0xeefd2d76564d3c38920503881796ef3a5fecf268979,999.97422766939276 CRO
0xd17cde548db42fb049445e93c77c45c3580550a19be3da35c253c52561ca622751291582022-10-17 9:00:03529 days 1 hr ago 0x3989ec327e8e96623debf7002983a2b3861516cdBored Candy City: Deployer19,999.99947403406924 CRO
[ Download CSV Export 
Index Block
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-10-04
*/

/**
 *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 = 1665846000; // When to start ICO - Sep 15, 2022 15:00:00 UTC
    uint256 private _endDate = 1666450800; // When to end ICO - Sep 22, 2022 15:00:00 UTC
    uint256 private _claimDate = 1666458000; // When to claim ICO - Sep 22, 2022 17:00:00 UTC

    uint256 private _hardcap = 1000000 ether; // hard cap
    uint256 private _softcap = 500000 ether; // softcap
    uint256 private _icoPrice = 0.5 ether; // token price
    uint256 private _minPerUser = 1000 ether; // min amount per user
    uint256 private _maxPerUser = 100000 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"}]

61010060405263634acaf06001556363540570600255636354219060035569d3c21bcecceda10000006004556969e10de76676d08000006005556706f05b59d3b20000600655683635c9adc5dea0000060075569152d02c7e14af68000006008553480156200006d57600080fd5b5060405162001efb38038062001efb833981016040819052620000909162000206565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b1580156200011157600080fd5b505afa15801562000126573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014c919062000272565b506001600160601b0319606085901b166080526001600160a01b038216158015906200018057506001600160a01b03831615155b620001d15760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f776e6572202f2074726561737572790000000000000000604482015260640160405180910390fd5b606091821b6001600160601b031990811660a0529290911b90911660c05260f01b6001600160f01b03191660e05250620002a4565b600080600080608085870312156200021c578384fd5b845162000229816200028b565b60208601519094506200023c816200028b565b60408601519093506200024f816200028b565b606086015190925061ffff8116811462000267578182fd5b939692955090935050565b60006020828403121562000284578081fd5b5051919050565b6001600160a01b0381168114620002a157600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160f01c611bbd6200033e600039600081816103e701526107790152600081816104a801526107c2015260008181610435015281816106a10152818161080301528181610dd4015261108e0152600081816102f601528181610a8901528181610ae201528181610be001528181610e7601528181610f040152610f7a0152611bbd6000f3fe60806040526004361061016a5760003560e01c80638000deaa116100d1578063e1da49a41161008a578063f2fde38b11610064578063f2fde38b14610459578063f775e50414610479578063f8f59b8014610499578063fff24d19146104cc57600080fd5b8063e1da49a4146103d2578063eab2453c14610411578063f24994d81461042657600080fd5b80638000deaa14610343578063838ac02a1461036257806387b943ce146103775780638da5cb5b1461038c578063b29a8140146103aa578063d7bb99ba146103ca57600080fd5b80632fe69670116101235780632fe69670146102395780633e859fcb1461029257806345fd16e2146102b257806348c54b9d146102d257806354ff10b5146102e7578063715018a61461032e57600080fd5b80630614117a146101765780630672508e1461018d5780630673d3e8146101bb57806317f2656c146101d35780631d77ec3b146101f357806324600fc31461022457600080fd5b3661017157005b600080fd5b34801561018257600080fd5b5061018b6104ec565b005b34801561019957600080fd5b506005546004545b604080519283526020830191909152015b60405180910390f35b3480156101c757600080fd5b506007546008546101a1565b3480156101df57600080fd5b5061018b6101ee3660046118c6565b6105e4565b3480156101ff57600080fd5b50600154600254600354604080519384526020840192909252908201526060016101b2565b34801561023057600080fd5b5061018b61069e565b34801561024557600080fd5b5061027d610254366004611833565b6001600160a01b03166000908152600c602052604090208054600190910154909160ff90911690565b604080519283529015156020830152016101b2565b34801561029e57600080fd5b5061018b6102ad3660046118c6565b610839565b3480156102be57600080fd5b5061018b6102cd366004611896565b61091b565b3480156102de57600080fd5b5061018b6109ab565b3480156102f357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101b2565b34801561033a57600080fd5b5061018b610b40565b34801561034f57600080fd5b50600b545b6040519081526020016101b2565b34801561036e57600080fd5b50600654610354565b34801561038357600080fd5b50600a54610354565b34801561039857600080fd5b506000546001600160a01b0316610316565b3480156103b657600080fd5b5061018b6103c536600461184d565b610bb4565b61018b610ca9565b3480156103de57600080fd5b5060405161ffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b34801561041d57600080fd5b5061018b610dd1565b34801561043257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610316565b34801561046557600080fd5b5061018b610474366004611833565b610fa1565b34801561048557600080fd5b5061018b610494366004611896565b61108b565b3480156104a557600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610316565b3480156104d857600080fd5b5061018b6104e73660046118e7565b611173565b6000546001600160a01b0316331461051f5760405162461bcd60e51b815260040161051690611986565b60405180910390fd5b60095460ff1661057c5760405162461bcd60e51b815260206004820152602260248201527f4e6f7420617661696c61626c6520756e74696c2077697468647261772066756e604482015261647360f01b6064820152608401610516565b47806105b35760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610516565b604051339082156108fc029083906000818181858888f193505050501580156105e0573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461060e5760405162461bcd60e51b815260040161051690611986565b8082111561064f5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600081116106935760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d61782076616c756560781b6044820152606401610516565b600791909155600855565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146106e65760405162461bcd60e51b815260040161051690611961565b60025442101561072b5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b60095460ff16156107725760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903bb4ba34323930bbb760791b6044820152606401610516565b60006127107f000000000000000000000000000000000000000000000000000000000000000061ffff16600a546107a99190611b0b565b6107b39190611a00565b90506107e86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826112af565b61082981600a546107f99190611b2a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906112af565b506009805460ff19166001179055565b6000546001600160a01b031633146108635760405162461bcd60e51b815260040161051690611986565b60015442106108845760405162461bcd60e51b8152600401610516906119bb565b6000811180156108945750600082115b6108d25760405162461bcd60e51b815260206004820152600f60248201526e4e6f6e207a65726f2076616c75657360881b6044820152606401610516565b808211156109135760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600455600555565b6000546001600160a01b031633146109455760405162461bcd60e51b815260040161051690611986565b60015442106109665760405162461bcd60e51b8152600401610516906119bb565b600081116109a65760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b6044820152606401610516565b600655565b60035442116109e85760405162461bcd60e51b815260206004820152600960248201526857616974206d6f726560b81b6044820152606401610516565b336000908152600c60205260409020600181015460ff1615610a3e5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610516565b805480610a7f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0818dbdb9d1c9a589d5d1959608a1b6044820152606401610516565b6000600654610ab67f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c8565b610ac190600a611a63565b610acb9084611b0b565b610ad59190611a00565b90508015610b1157610b117f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338361153f565b6001838101805460ff19169091179055600a8054839190600090610b369084906119e8565b9091555050505050565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161051690611986565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bde5760405162461bcd60e51b815260040161051690611986565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610c545760405162461bcd60e51b81526020600482015260116024820152702737ba1030b63637bbb2b2103a37b5b2b760791b6044820152606401610516565b60008111610c955760405162461bcd60e51b815260206004820152600e60248201526d4e6f6e207a65726f2076616c756560901b6044820152606401610516565b6105e06001600160a01b038316338361153f565b6001544210158015610cbc575060025442105b610cf95760405162461bcd60e51b815260206004820152600e60248201526d1250d3c81b9bdd081bdc195b995960921b6044820152606401610516565b336000908152600c602052604081208054349290610d189084906119e8565b90506007548110158015610d2e57506008548111155b610d695760405162461bcd60e51b815260206004820152600c60248201526b13dd5d081bd9881b1a5b5a5d60a21b6044820152606401610516565b808255600a8054849190600090610d819084906119e8565b9091555050600454600a541115610dcc5760405162461bcd60e51b815260206004820152600f60248201526e052656163686564206861726463617608c1b6044820152606401610516565b505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610e195760405162461bcd60e51b815260040161051690611961565b600254421015610e5e5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef891906118ae565b90506000600654610f317f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c8565b610f3c90600a611a63565b600b54600a54610f4c9190611b2a565b610f569190611b0b565b610f609190611a00565b90506105e033610f708385611b2a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061153f565b6000546001600160a01b03163314610fcb5760405162461bcd60e51b815260040161051690611986565b6001600160a01b0381166110305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610516565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146110d35760405162461bcd60e51b815260040161051690611961565b60025442106111175760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48199a5b9a5cda195960821b6044820152606401610516565b80421061115b5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420636c61696d206461746560701b6044820152606401610516565b42600154111561116a57426001555b42600255600355565b6000546001600160a01b0316331461119d5760405162461bcd60e51b815260040161051690611986565b60015442106111be5760405162461bcd60e51b8152600401610516906119bb565b8242106112035760405162461bcd60e51b81526020600482015260136024820152724d757374206265206675747572652074696d6560681b6044820152606401610516565b8183106112525760405162461bcd60e51b815260206004820152601d60248201527f737461727444617465206d757374206265666f726520656e64446174650000006044820152606401610516565b8082106112a15760405162461bcd60e51b815260206004820152601d60248201527f656e6444617465206d757374206265666f726520636c61696d446174650000006044820152606401610516565b600192909255600255600355565b804710156112ff5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610516565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461134c576040519150601f19603f3d011682016040523d82523d6000602084013e611351565b606091505b5050905080610dcc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610516565b60006113d382611591565b156113e057506012919050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916001600160a01b03861691612710916114289190611912565b6000604051808303818686fa925050503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b509150915081158061147a57508051155b1561150a5760408051600481526024810182526020810180516001600160e01b0316632e0f262560e01b17905290516001600160a01b03861691612710916114c29190611912565b6000604051808303818686fa925050503d80600081146114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b5090925090505b818015611518575060008151115b611523576012611537565b8080602001905181019061153791906118ae565b949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610dcc9084906115cb565b60006001600160a01b03821615806115c557506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b6000611620826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661169d9092919063ffffffff16565b805190915015610dcc578080602001905181019061163e9190611876565b610dcc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610516565b60606116ac84846000856116b6565b90505b9392505050565b6060824710156117175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610516565b843b6117655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610516565b600080866001600160a01b031685876040516117819190611912565b60006040518083038185875af1925050503d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b50915091506117d38282866117de565b979650505050505050565b606083156117ed5750816116af565b8251156117fd5782518084602001fd5b8160405162461bcd60e51b8152600401610516919061192e565b80356001600160a01b038116811461182e57600080fd5b919050565b600060208284031215611844578081fd5b6116af82611817565b6000806040838503121561185f578081fd5b61186883611817565b946020939093013593505050565b600060208284031215611887578081fd5b815180151581146116af578182fd5b6000602082840312156118a7578081fd5b5035919050565b6000602082840312156118bf578081fd5b5051919050565b600080604083850312156118d8578182fd5b50508035926020909101359150565b6000806000606084860312156118fb578081fd5b505081359360208301359350604090920135919050565b60008251611924818460208701611b41565b9190910192915050565b602081526000825180602084015261194d816040850160208701611b41565b601f01601f19169190910160400192915050565b6020808252600b908201526a155b9c195c9b5a5d1d195960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152721250d3c8185b1c9958591e481cdd185c9d1959606a1b604082015260600190565b600082198211156119fb576119fb611b71565b500190565b600082611a1b57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115611a5b578160001904821115611a4157611a41611b71565b80851615611a4e57918102915b93841c9390800290611a25565b509250929050565b60006116af8383600082611a79575060016115c5565b81611a86575060006115c5565b8160018114611a9c5760028114611aa657611ac2565b60019150506115c5565b60ff841115611ab757611ab7611b71565b50506001821b6115c5565b5060208310610133831016604e8410600b8410161715611ae5575081810a6115c5565b611aef8383611a20565b8060001904821115611b0357611b03611b71565b029392505050565b6000816000190483118215151615611b2557611b25611b71565b500290565b600082821015611b3c57611b3c611b71565b500390565b60005b83811015611b5c578181015183820152602001611b44565b83811115611b6b576000848401525b50505050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220428555408476962a9909efbfd93086a7dd15db773f3eab1ddfceef37cee9fccd64736f6c6343000804003300000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c7977000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef34000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf26800000000000000000000000000000000000000000000000000000000000000c8

Deployed Bytecode

0x60806040526004361061016a5760003560e01c80638000deaa116100d1578063e1da49a41161008a578063f2fde38b11610064578063f2fde38b14610459578063f775e50414610479578063f8f59b8014610499578063fff24d19146104cc57600080fd5b8063e1da49a4146103d2578063eab2453c14610411578063f24994d81461042657600080fd5b80638000deaa14610343578063838ac02a1461036257806387b943ce146103775780638da5cb5b1461038c578063b29a8140146103aa578063d7bb99ba146103ca57600080fd5b80632fe69670116101235780632fe69670146102395780633e859fcb1461029257806345fd16e2146102b257806348c54b9d146102d257806354ff10b5146102e7578063715018a61461032e57600080fd5b80630614117a146101765780630672508e1461018d5780630673d3e8146101bb57806317f2656c146101d35780631d77ec3b146101f357806324600fc31461022457600080fd5b3661017157005b600080fd5b34801561018257600080fd5b5061018b6104ec565b005b34801561019957600080fd5b506005546004545b604080519283526020830191909152015b60405180910390f35b3480156101c757600080fd5b506007546008546101a1565b3480156101df57600080fd5b5061018b6101ee3660046118c6565b6105e4565b3480156101ff57600080fd5b50600154600254600354604080519384526020840192909252908201526060016101b2565b34801561023057600080fd5b5061018b61069e565b34801561024557600080fd5b5061027d610254366004611833565b6001600160a01b03166000908152600c602052604090208054600190910154909160ff90911690565b604080519283529015156020830152016101b2565b34801561029e57600080fd5b5061018b6102ad3660046118c6565b610839565b3480156102be57600080fd5b5061018b6102cd366004611896565b61091b565b3480156102de57600080fd5b5061018b6109ab565b3480156102f357600080fd5b507f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79775b6040516001600160a01b0390911681526020016101b2565b34801561033a57600080fd5b5061018b610b40565b34801561034f57600080fd5b50600b545b6040519081526020016101b2565b34801561036e57600080fd5b50600654610354565b34801561038357600080fd5b50600a54610354565b34801561039857600080fd5b506000546001600160a01b0316610316565b3480156103b657600080fd5b5061018b6103c536600461184d565b610bb4565b61018b610ca9565b3480156103de57600080fd5b5060405161ffff7f00000000000000000000000000000000000000000000000000000000000000c81681526020016101b2565b34801561041d57600080fd5b5061018b610dd1565b34801561043257600080fd5b507f000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf268610316565b34801561046557600080fd5b5061018b610474366004611833565b610fa1565b34801561048557600080fd5b5061018b610494366004611896565b61108b565b3480156104a557600080fd5b507f000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef34610316565b3480156104d857600080fd5b5061018b6104e73660046118e7565b611173565b6000546001600160a01b0316331461051f5760405162461bcd60e51b815260040161051690611986565b60405180910390fd5b60095460ff1661057c5760405162461bcd60e51b815260206004820152602260248201527f4e6f7420617661696c61626c6520756e74696c2077697468647261772066756e604482015261647360f01b6064820152608401610516565b47806105b35760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610516565b604051339082156108fc029083906000818181858888f193505050501580156105e0573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461060e5760405162461bcd60e51b815260040161051690611986565b8082111561064f5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600081116106935760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d61782076616c756560781b6044820152606401610516565b600791909155600855565b337f000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf2686001600160a01b0316146106e65760405162461bcd60e51b815260040161051690611961565b60025442101561072b5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b60095460ff16156107725760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903bb4ba34323930bbb760791b6044820152606401610516565b60006127107f00000000000000000000000000000000000000000000000000000000000000c861ffff16600a546107a99190611b0b565b6107b39190611a00565b90506107e86001600160a01b037f000000000000000000000000172a25d57da59ab86792fb8ced103ad871cbef3416826112af565b61082981600a546107f99190611b2a565b6001600160a01b037f000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf26816906112af565b506009805460ff19166001179055565b6000546001600160a01b031633146108635760405162461bcd60e51b815260040161051690611986565b60015442106108845760405162461bcd60e51b8152600401610516906119bb565b6000811180156108945750600082115b6108d25760405162461bcd60e51b815260206004820152600f60248201526e4e6f6e207a65726f2076616c75657360881b6044820152606401610516565b808211156109135760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642076616c75657360901b6044820152606401610516565b600455600555565b6000546001600160a01b031633146109455760405162461bcd60e51b815260040161051690611986565b60015442106109665760405162461bcd60e51b8152600401610516906119bb565b600081116109a65760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b6044820152606401610516565b600655565b60035442116109e85760405162461bcd60e51b815260206004820152600960248201526857616974206d6f726560b81b6044820152606401610516565b336000908152600c60205260409020600181015460ff1615610a3e5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610516565b805480610a7f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0818dbdb9d1c9a589d5d1959608a1b6044820152606401610516565b6000600654610ab67f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79776001600160a01b03166113c8565b610ac190600a611a63565b610acb9084611b0b565b610ad59190611a00565b90508015610b1157610b117f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79776001600160a01b0316338361153f565b6001838101805460ff19169091179055600a8054839190600090610b369084906119e8565b9091555050505050565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161051690611986565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bde5760405162461bcd60e51b815260040161051690611986565b7f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79776001600160a01b0316826001600160a01b03161415610c545760405162461bcd60e51b81526020600482015260116024820152702737ba1030b63637bbb2b2103a37b5b2b760791b6044820152606401610516565b60008111610c955760405162461bcd60e51b815260206004820152600e60248201526d4e6f6e207a65726f2076616c756560901b6044820152606401610516565b6105e06001600160a01b038316338361153f565b6001544210158015610cbc575060025442105b610cf95760405162461bcd60e51b815260206004820152600e60248201526d1250d3c81b9bdd081bdc195b995960921b6044820152606401610516565b336000908152600c602052604081208054349290610d189084906119e8565b90506007548110158015610d2e57506008548111155b610d695760405162461bcd60e51b815260206004820152600c60248201526b13dd5d081bd9881b1a5b5a5d60a21b6044820152606401610516565b808255600a8054849190600090610d819084906119e8565b9091555050600454600a541115610dcc5760405162461bcd60e51b815260206004820152600f60248201526e052656163686564206861726463617608c1b6044820152606401610516565b505050565b337f000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf2686001600160a01b031614610e195760405162461bcd60e51b815260040161051690611961565b600254421015610e5e5760405162461bcd60e51b815260206004820152601060248201526f1250d3c81b9bdd08199a5b9a5cda195960821b6044820152606401610516565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79776001600160a01b0316906370a082319060240160206040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef891906118ae565b90506000600654610f317f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c79776001600160a01b03166113c8565b610f3c90600a611a63565b600b54600a54610f4c9190611b2a565b610f569190611b0b565b610f609190611a00565b90506105e033610f708385611b2a565b6001600160a01b037f00000000000000000000000006c04b0ad236e7ca3b3189b1d049fe80109c797716919061153f565b6000546001600160a01b03163314610fcb5760405162461bcd60e51b815260040161051690611986565b6001600160a01b0381166110305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610516565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b337f000000000000000000000000eefd2d76564d3c38920503881796ef3a5fecf2686001600160a01b0316146110d35760405162461bcd60e51b815260040161051690611961565b60025442106111175760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48199a5b9a5cda195960821b6044820152606401610516565b80421061115b5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420636c61696d206461746560701b6044820152606401610516565b42600154111561116a57426001555b42600255600355565b6000546001600160a01b0316331461119d5760405162461bcd60e51b815260040161051690611986565b60015442106111be5760405162461bcd60e51b8152600401610516906119bb565b8242106112035760405162461bcd60e51b81526020600482015260136024820152724d757374206265206675747572652074696d6560681b6044820152606401610516565b8183106112525760405162461bcd60e51b815260206004820152601d60248201527f737461727444617465206d757374206265666f726520656e64446174650000006044820152606401610516565b8082106112a15760405162461bcd60e51b815260206004820152601d60248201527f656e6444617465206d757374206265666f726520636c61696d446174650000006044820152606401610516565b600192909255600255600355565b804710156112ff5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610516565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461134c576040519150601f19603f3d011682016040523d82523d6000602084013e611351565b606091505b5050905080610dcc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610516565b60006113d382611591565b156113e057506012919050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916001600160a01b03861691612710916114289190611912565b6000604051808303818686fa925050503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b509150915081158061147a57508051155b1561150a5760408051600481526024810182526020810180516001600160e01b0316632e0f262560e01b17905290516001600160a01b03861691612710916114c29190611912565b6000604051808303818686fa925050503d80600081146114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b5090925090505b818015611518575060008151115b611523576012611537565b8080602001905181019061153791906118ae565b949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610dcc9084906115cb565b60006001600160a01b03821615806115c557506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b6000611620826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661169d9092919063ffffffff16565b805190915015610dcc578080602001905181019061163e9190611876565b610dcc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610516565b60606116ac84846000856116b6565b90505b9392505050565b6060824710156117175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610516565b843b6117655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610516565b600080866001600160a01b031685876040516117819190611912565b60006040518083038185875af1925050503d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b50915091506117d38282866117de565b979650505050505050565b606083156117ed5750816116af565b8251156117fd5782518084602001fd5b8160405162461bcd60e51b8152600401610516919061192e565b80356001600160a01b038116811461182e57600080fd5b919050565b600060208284031215611844578081fd5b6116af82611817565b6000806040838503121561185f578081fd5b61186883611817565b946020939093013593505050565b600060208284031215611887578081fd5b815180151581146116af578182fd5b6000602082840312156118a7578081fd5b5035919050565b6000602082840312156118bf578081fd5b5051919050565b600080604083850312156118d8578182fd5b50508035926020909101359150565b6000806000606084860312156118fb578081fd5b505081359360208301359350604090920135919050565b60008251611924818460208701611b41565b9190910192915050565b602081526000825180602084015261194d816040850160208701611b41565b601f01601f19169190910160400192915050565b6020808252600b908201526a155b9c195c9b5a5d1d195960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152721250d3c8185b1c9958591e481cdd185c9d1959606a1b604082015260600190565b600082198211156119fb576119fb611b71565b500190565b600082611a1b57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115611a5b578160001904821115611a4157611a41611b71565b80851615611a4e57918102915b93841c9390800290611a25565b509250929050565b60006116af8383600082611a79575060016115c5565b81611a86575060006115c5565b8160018114611a9c5760028114611aa657611ac2565b60019150506115c5565b60ff841115611ab757611ab7611b71565b50506001821b6115c5565b5060208310610133831016604e8410600b8410161715611ae5575081810a6115c5565b611aef8383611a20565b8060001904821115611b0357611b03611b71565b029392505050565b6000816000190483118215151615611b2557611b25611b71565b500290565b600082821015611b3c57611b3c611b71565b500390565b60005b83811015611b5c578181015183820152602001611b44565b83811115611b6b576000848401525b50505050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220428555408476962a9909efbfd93086a7dd15db773f3eab1ddfceef37cee9fccd64736f6c63430008040033

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

22246:9987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31317:278;;;;;;;;;;;;;:::i;:::-;;30064:106;;;;;;;;;;-1:-1:-1;30143:8:0;;30153;;30064:106;;;;15070:25:1;;;15126:2;15111:18;;15104:34;;;;15043:18;30064:106:0;;;;;;;;30631:119;;;;;;;;;;-1:-1:-1;30717:11:0;;30730;;30631:119;;30313:310;;;;;;;;;;-1:-1:-1;30313:310:0;;;;;:::i;:::-;;:::i;29374:216::-;;;;;;;;;;-1:-1:-1;29549:10:0;;29561:8;;29571:10;;29374:216;;;15351:25:1;;;15407:2;15392:18;;15385:34;;;;15435:18;;;15428:34;15339:2;15324:18;29374:216:0;15306:162:1;27245:534:0;;;;;;;;;;;;;:::i;28441:257::-;;;;;;;;;;-1:-1:-1;28441:257:0;;;;;:::i;:::-;-1:-1:-1;;;;;28591:29:0;28538:7;28591:29;;;:19;:29;;;;;:36;;28642:37;;;;;28591:36;;28642:37;;;;;28441:257;;;;;14801:25:1;;;14869:14;;14862:22;14857:2;14842:18;;14835:50;14774:18;28441:257:0;14756:135:1;29718:338:0;;;;;;;;;;-1:-1:-1;29718:338:0;;;;;:::i;:::-;;:::i;30866:223::-;;;;;;;;;;-1:-1:-1;30866:223:0;;;;;:::i;:::-;;:::i;25140:763::-;;;;;;;;;;;;;:::i;27787:100::-;;;;;;;;;;-1:-1:-1;27869:9:0;27787:100;;;-1:-1:-1;;;;;2605:32:1;;;2587:51;;2575:2;2560:18;27787:100:0;2542:102:1;2867:148:0;;;;;;;;;;;;;:::i;28334:99::-;;;;;;;;;;-1:-1:-1;28412:13:0;;28334:99;;;14597:25:1;;;14585:2;14570:18;28334:99:0;14552:76:1;31097:91:0;;;;;;;;;;-1:-1:-1;31171:9:0;;31097:91;;28219:107;;;;;;;;;;-1:-1:-1;28301:17:0;;28219:107;;2216:87;;;;;;;;;;-1:-1:-1;2262:7:0;2289:6;-1:-1:-1;;;;;2289:6:0;2216:87;;31866:261;;;;;;;;;;-1:-1:-1;31866:261:0;;;;;:::i;:::-;;:::i;24272:740::-;;;:::i;28115:96::-;;;;;;;;;;-1:-1:-1;28115:96:0;;14432:6:1;28191:12:0;14420:19:1;14402:38;;14390:2;14375:18;28115:96:0;14357:89:1;26647:468:0;;;;;;;;;;;;;:::i;27895:99::-;;;;;;;;;;-1:-1:-1;27977:9:0;27895:99;;3170:244;;;;;;;;;;-1:-1:-1;3170:244:0;;;;;:::i;:::-;;:::i;26095:424::-;;;;;;;;;;-1:-1:-1;26095:424:0;;;;;:::i;:::-;;:::i;28002:105::-;;;;;;;;;;-1:-1:-1;28087:12:0;28002:105;;28833:533;;;;;;;;;;-1:-1:-1;28833:533:0;;;;;:::i;:::-;;:::i;31317:278::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;;;;;;;;;31377:15:::1;::::0;::::1;;31369:62;;;::::0;-1:-1:-1;;;31369:62:0;;3742:2:1;31369: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;;31369:62:0::1;3714:224:1::0;31369:62:0::1;31465:21;31505:16:::0;31497:35:::1;;;::::0;-1:-1:-1;;;31497:35:0;;4846:2:1;31497: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;;31497:35:0::1;4818:155:1::0;31497:35:0::1;31543:44;::::0;846:10;;31543:44;::::1;;;::::0;31574:12;;31543:44:::1;::::0;;;31574:12;846:10;31543:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2507:1;31317:278::o:0;30313:310::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;30457:11:::1;30442;:26;;30434:53;;;::::0;-1:-1:-1;;;30434:53:0;;4503:2:1;30434: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;;30434:53:0::1;4475:164:1::0;30434:53:0::1;30520:1;30506:11;:15;30498:45;;;::::0;-1:-1:-1;;;30498:45:0;;10229:2:1;30498: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;;30498:45:0::1;10201:167:1::0;30498:45:0::1;30554:11;:25:::0;;;;30590:11:::1;:25:::0;30313:310::o;27245:534::-;846:10;27314:9;-1:-1:-1;;;;;27298:25:0;;27290:49;;;;-1:-1:-1;;;27290:49:0;;;;;;;:::i;:::-;27377:8;;27358:15;:27;;27350:56;;;;-1:-1:-1;;;27350:56:0;;6280:2:1;27350:56:0;;;6262:21:1;6319:2;6299:18;;;6292:30;-1:-1:-1;;;6338:18:1;;;6331:46;6394:18;;27350:56:0;6252:166:1;27350:56:0;27426:15;;;;27425:16;27417:46;;;;-1:-1:-1;;;27417:46:0;;8844:2:1;27417:46:0;;;8826:21:1;8883:2;8863:18;;;8856:30;-1:-1:-1;;;8902:18:1;;;8895:47;8959:18;;27417:46:0;8816:167:1;27417:46:0;27518:21;27579:5;27563:12;27543:32;;:17;;:32;;;;:::i;:::-;27542:42;;;;:::i;:::-;27518:66;-1:-1:-1;27595:37:0;-1:-1:-1;;;;;27595:12:0;:22;27518:66;27595:22;:37::i;:::-;27682:54;27722:13;27702:17;;:33;;;;:::i;:::-;-1:-1:-1;;;;;27682:9:0;:19;;;:54::i;:::-;-1:-1:-1;27749:15:0;:22;;-1:-1:-1;;27749:22:0;27767:4;27749:22;;;27245:534::o;29718:338::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;29829:10:::1;;29811:15;:28;29803:60;;;;-1:-1:-1::0;;;29803:60:0::1;;;;;;;:::i;:::-;29893:1;29882:8;:12;:28;;;;;29909:1;29898:8;:12;29882:28;29874:56;;;::::0;-1:-1:-1;;;29874:56:0;;12674:2:1;29874: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;;29874:56:0::1;12646:165:1::0;29874:56:0::1;29961:8;29949;:20;;29941:47;;;::::0;-1:-1:-1;;;29941:47:0;;4503:2:1;29941: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;;29941:47:0::1;4475:164:1::0;29941:47:0::1;29999:8;:19:::0;30029:8:::1;:19:::0;29718:338::o;30866:223::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;30965:10:::1;;30947:15;:28;30939:60;;;;-1:-1:-1::0;;;30939:60:0::1;;;;;;;:::i;:::-;31030:1;31018:9;:13;31010:39;;;::::0;-1:-1:-1;;;31010:39:0;;13777:2:1;31010: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;;31010:39:0::1;13749:163:1::0;31010:39:0::1;31060:9;:21:::0;30866:223::o;25140:763::-;25209:10;;25191:15;:28;25183:50;;;;-1:-1:-1;;;25183:50:0;;9190:2:1;25183:50:0;;;9172:21:1;9229:1;9209:18;;;9202:29;-1:-1:-1;;;9247:18:1;;;9240:39;9296:18;;25183:50:0;9162:158:1;25183:50:0;846:10;25244:42;25289:57;;;:19;:57;;;;;25366:27;;;;;;25365:28;25357:56;;;;-1:-1:-1;;;25357:56:0;;9885:2:1;25357:56:0;;;9867:21:1;9924:2;9904:18;;;9897:30;-1:-1:-1;;;9943:18:1;;;9936:45;9998:18;;25357:56:0;9857:165:1;25357:56:0;25456:26;;25501:25;25493:53;;;;-1:-1:-1;;;25493:53:0;;11624:2:1;25493:53:0;;;11606:21:1;11663:2;11643:18;;;11636:30;-1:-1:-1;;;11682:18:1;;;11675:45;11737:18;;25493:53:0;11596:165:1;25493:53:0;25559:26;25665:9;;25631:29;:9;-1:-1:-1;;;;;25631:27:0;;:29::i;:::-;25626:35;;:2;:35;:::i;:::-;25589:72;;:21;:72;:::i;:::-;25588:86;;;;:::i;:::-;25559:115;-1:-1:-1;25691:22:0;;25687:111;;25730:56;:9;-1:-1:-1;;;;;25730:22:0;846:10;25767:18;25730:22;:56::i;:::-;25838:4;25808:27;;;:34;;-1:-1:-1;;25808:34:0;;;;;;25853:17;:42;;25874:21;;25853:17;25808:27;;25853:42;;25874:21;;25853:42;:::i;:::-;;;;-1:-1:-1;;;;;25140:763:0:o;2867:148::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;2974:1:::1;2958:6:::0;;2937:40:::1;::::0;-1:-1:-1;;;;;2958:6:0;;::::1;::::0;2937:40:::1;::::0;2974:1;;2937:40:::1;3005:1;2988:19:::0;;-1:-1:-1;;;;;;2988:19:0::1;::::0;;2867:148::o;31866:261::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;31977:9:::1;-1:-1:-1::0;;;;;31959:28:0::1;:6;-1:-1:-1::0;;;;;31959:28:0::1;;;31951:58;;;::::0;-1:-1:-1;;;31951:58:0;;5587:2:1;31951: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;;31951:58:0::1;5559:167:1::0;31951:58:0::1;32038:1;32028:7;:11;32020:38;;;::::0;-1:-1:-1;;;32020:38:0;;10936:2:1;32020: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;;32020:38:0::1;10908:164:1::0;32020:38:0::1;32069:50;-1:-1:-1::0;;;;;32069:27:0;::::1;846:10:::0;32111:7;32069:27:::1;:50::i;24272:740::-:0;24363:10;;24344:15;:29;;:59;;;;;24395:8;;24377:15;:26;24344:59;24322:123;;;;-1:-1:-1;;;24322:123:0;;8501:2:1;24322:123:0;;;8483:21:1;8540:2;8520:18;;;8513:30;-1:-1:-1;;;8559:18:1;;;8552:44;8613:18;;24322:123:0;8473:164:1;24322:123:0;846:10;24458:24;24549:57;;;:19;:57;;;;;24646:25;;24485:9;;24458:24;24646:44;;24485:9;;24646:44;:::i;:::-;24619:71;;24743:11;;24723:16;:31;;:66;;;;;24778:11;;24758:16;:31;;24723:66;24701:128;;;;-1:-1:-1;;;24701:128:0;;14119:2:1;24701:128:0;;;14101:21:1;14158:2;14138:18;;;14131:30;-1:-1:-1;;;14177:18:1;;;14170:42;14229:18;;24701:128:0;14091:162:1;24701:128:0;24842:44;;;24897:17;:37;;24918:16;;24897:17;24842:25;;24897:37;;24918:16;;24897:37;:::i;:::-;;;;-1:-1:-1;;24976:8:0;;24955:17;;:29;;24947:57;;;;-1:-1:-1;;;24947:57:0;;7392:2:1;24947:57:0;;;7374:21:1;7431:2;7411:18;;;7404:30;-1:-1:-1;;;7450:18:1;;;7443:45;7505:18;;24947:57:0;7364:165:1;24947:57:0;24272:740;;;:::o;26647:468::-;846:10;26725:9;-1:-1:-1;;;;;26709:25:0;;26701:49;;;;-1:-1:-1;;;26701:49:0;;;;;;;:::i;:::-;26788:8;;26769:15;:27;;26761:56;;;;-1:-1:-1;;;26761:56:0;;6280:2:1;26761:56:0;;;6262:21:1;6319:2;6299:18;;;6292:30;-1:-1:-1;;;6338:18:1;;;6331:46;6394:18;;26761:56:0;6252:166:1;26761:56:0;26853:34;;-1:-1:-1;;;26853:34:0;;26881:4;26853:34;;;2587:51:1;26828:22:0;;26853:9;-1:-1:-1;;;;;26853:19:0;;;;2560:18:1;;26853:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26828:59;;26898:23;27015:9;;26981:29;:9;-1:-1:-1;;;;;26981:27:0;;:29::i;:::-;26976:35;;:2;:35;:::i;:::-;26946:13;;26926:17;;:33;;;;:::i;:::-;26925:86;;;;:::i;:::-;26924:100;;;;:::i;:::-;26898:126;-1:-1:-1;27037:70:0;846:10;27074:32;27091:15;27074:14;:32;:::i;:::-;-1:-1:-1;;;;;27037:9:0;:22;;:70;:22;:70::i;3170:244::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3259:22:0;::::1;3251:73;;;::::0;-1:-1:-1;;;3251:73:0;;5180:2:1;3251: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;;3251:73:0::1;5152:228:1::0;3251:73:0::1;3361:6;::::0;;3340:38:::1;::::0;-1:-1:-1;;;;;3340:38:0;;::::1;::::0;3361:6;::::1;::::0;3340:38:::1;::::0;::::1;3389:6;:17:::0;;-1:-1:-1;;;;;;3389:17:0::1;-1:-1:-1::0;;;;;3389:17:0;;;::::1;::::0;;;::::1;::::0;;3170:244::o;26095:424::-;846:10;26180:9;-1:-1:-1;;;;;26164:25:0;;26156:49;;;;-1:-1:-1;;;26156:49:0;;;;;;;:::i;:::-;26242:8;;26224:15;:26;26216:55;;;;-1:-1:-1;;;26216:55:0;;11279:2:1;26216:55:0;;;11261:21:1;11318:2;11298:18;;;11291:30;-1:-1:-1;;;11337:18:1;;;11330:46;11393:18;;26216:55:0;11251:166:1;26216:55:0;26308:10;26290:15;:28;26282:59;;;;-1:-1:-1;;;26282:59:0;;5933:2:1;26282:59:0;;;5915:21:1;5972:2;5952:18;;;5945:30;-1:-1:-1;;;5991:18:1;;;5984:48;6049:18;;26282:59:0;5905:168:1;26282:59:0;26369:15;26356:10;;:28;26352:89;;;26414:15;26401:10;:28;26352:89;26462:15;26451:8;:26;26488:10;:23;26095:424::o;28833:533::-;2262:7;2289:6;-1:-1:-1;;;;;2289:6:0;846:10;2436:23;2428:68;;;;-1:-1:-1;;;2428:68:0;;;;;;;:::i;:::-;29005:10:::1;;28987:15;:28;28979:60;;;;-1:-1:-1::0;;;28979:60:0::1;;;;;;;:::i;:::-;29076:10;29058:15;:28;29050:60;;;::::0;-1:-1:-1;;;29050:60:0;;12326:2:1;29050: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;;29050:60:0::1;12298:169:1::0;29050:60:0::1;29142:8;29129:10;:21;29121:63;;;::::0;-1:-1:-1;;;29121:63:0;;9527:2:1;29121:63:0::1;::::0;::::1;9509:21:1::0;9566:2;9546:18;;;9539:30;9605:31;9585:18;;;9578:59;9654:18;;29121:63:0::1;9499:179:1::0;29121:63:0::1;29214:10;29203:8;:21;29195:63;;;::::0;-1:-1:-1;;;29195:63:0;;4145:2:1;29195:63:0::1;::::0;::::1;4127:21:1::0;4184:2;4164:18;;;4157:30;4223:31;4203:18;;;4196:59;4272:18;;29195:63:0::1;4117:179:1::0;29195:63:0::1;29271:10;:23:::0;;;;29305:8:::1;:19:::0;29335:10:::1;:23:::0;28833:533::o;8363:397::-;8478:6;8453:21;:31;;8445:73;;;;-1:-1:-1;;;8445:73:0;;7736:2:1;8445:73:0;;;7718:21:1;7775:2;7755:18;;;7748:30;7814:31;7794:18;;;7787:59;7863:18;;8445:73:0;7708:179:1;8445:73:0;8610:12;8628:9;-1:-1:-1;;;;;8628:14:0;8651:6;8628:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8609:54;;;8682:7;8674:78;;;;-1:-1:-1;;;8674:78:0;;6965:2:1;8674: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;;8674:78:0;6937:248:1;21406:574:0;21470:7;21494:12;21500:5;21494;:12::i;:::-;21490:54;;;-1:-1:-1;21530:2:0;;21406:574;-1:-1:-1;21406:574:0:o;21490:54::-;21654:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21654:37:0;-1:-1:-1;;;21654:37:0;;;21592:100;;21557:12;;;;-1:-1:-1;;;;;21592:25:0;;;21637:5;;21592:100;;21654:37;21592:100;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21556:136;;;;21708:7;21707:8;:28;;;-1:-1:-1;21719:11:0;;:16;21707:28;21703:187;;;21826:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21826:37:0;-1:-1:-1;;;21826:37:0;;;21770:108;;-1:-1:-1;;;;;21770:25:0;;;21801:5;;21770:108;;21826:37;21770:108;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21752:126:0;;-1:-1:-1;21752:126:0;-1:-1:-1;21703:187:0;21910:7;:26;;;;;21935:1;21921:4;:11;:15;21910:26;21909:63;;21970:2;21909:63;;;21951:4;21940:27;;;;;;;;;;;;:::i;:::-;21902:70;21406:574;-1:-1:-1;;;;21406:574:0:o;14900:177::-;15010:58;;;-1:-1:-1;;;;;3065:32:1;;15010:58:0;;;3047:51:1;3114:18;;;;3107:34;;;15010:58:0;;;;;;;;;;3020:18:1;;;;15010:58:0;;;;;;;;-1:-1:-1;;;;;15010:58:0;-1:-1:-1;;;15010:58:0;;;14983:86;;15003:5;;14983:19;:86::i;21988:180::-;22040:4;-1:-1:-1;;;;;22065:39:0;;;;:94;;-1:-1:-1;;;;;;22121:38:0;;18472:42;22121:38;22065:94;22057:103;21988:180;-1:-1:-1;;21988:180:0:o;17334:761::-;17758:23;17784:69;17812:4;17784:69;;;;;;;;;;;;;;;;;17792:5;-1:-1:-1;;;;;17784:27:0;;;:69;;;;;:::i;:::-;17868:17;;17758:95;;-1:-1:-1;17868:21:0;17864:224;;18010:10;17999:30;;;;;;;;;;;;:::i;:::-;17991:85;;;;-1:-1:-1;;;17991:85:0;;13366:2:1;17991: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;;17991:85:0;13338:232:1;9924:195:0;10027:12;10059:52;10081:6;10089:4;10095:1;10098:12;10059:21;:52::i;:::-;10052:59;;9924:195;;;;;;:::o;10976:530::-;11103:12;11161:5;11136:21;:30;;11128:81;;;;-1:-1:-1;;;11128:81:0;;8094:2:1;11128: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;;11128:81:0;8066:228:1;11128:81:0;7373:20;;11220:60;;;;-1:-1:-1;;;11220:60:0;;11968:2:1;11220:60:0;;;11950:21:1;12007:2;11987:18;;;11980:30;12046:31;12026:18;;;12019:59;12095:18;;11220:60:0;11940:179:1;11220:60:0;11354:12;11368:23;11395:6;-1:-1:-1;;;;;11395:11:0;11415:5;11423:4;11395:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11353:75;;;;11446:52;11464:7;11473:10;11485:12;11446:17;:52::i;:::-;11439:59;10976:530;-1:-1:-1;;;;;;;10976:530:0:o;13516:742::-;13631:12;13660:7;13656:595;;;-1:-1:-1;13691:10:0;13684:17;;13656:595;13805:17;;:21;13801:439;;14068:10;14062:17;14129:15;14116:10;14112:2;14108:19;14101:44;14016:148;14211:12;14204:20;;-1:-1:-1;;;14204: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://428555408476962a9909efbfd93086a7dd15db773f3eab1ddfceef37cee9fccd
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.