ETH Price: $1,877.15 (-5.04%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim244526712026-02-14 4:35:118 days ago1771043711IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008580.05752087
Claim244526682026-02-14 4:34:358 days ago1771043675IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008060.06104462
Claim244526612026-02-14 4:33:118 days ago1771043591IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008690.05829136
Claim244524402026-02-14 3:48:598 days ago1771040939IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006030.04042953
Claim244524342026-02-14 3:47:478 days ago1771040867IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006380.04930446
Claim244253412026-02-10 9:00:4712 days ago1770714047IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008010.06064834
Claim244253252026-02-10 8:57:3512 days ago1770713855IN
0xcbB3B5cb...ECe690E95
0 ETH0.00000780.06033973
Claim244253132026-02-10 8:55:1112 days ago1770713711IN
0xcbB3B5cb...ECe690E95
0 ETH0.000007470.05776445
Claim244253002026-02-10 8:52:3512 days ago1770713555IN
0xcbB3B5cb...ECe690E95
0 ETH0.000007010.05313657
Claim244252912026-02-10 8:50:4712 days ago1770713447IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008470.06413719
Claim244252272026-02-10 8:37:5912 days ago1770712679IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006710.05085868
Claim244248022026-02-10 7:12:3512 days ago1770707555IN
0xcbB3B5cb...ECe690E95
0 ETH0.000018660.14420033
Claim244247902026-02-10 7:10:1112 days ago1770707411IN
0xcbB3B5cb...ECe690E95
0 ETH0.00002450.16422227
Claim244247822026-02-10 7:08:3512 days ago1770707315IN
0xcbB3B5cb...ECe690E95
0 ETH0.000022590.15143779
Claim244239122026-02-10 4:13:2312 days ago1770696803IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006230.04180015
Claim244239122026-02-10 4:13:2312 days ago1770696803IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006240.04183513
Claim244239062026-02-10 4:12:1112 days ago1770696731IN
0xcbB3B5cb...ECe690E95
0 ETH0.000005920.04488644
Claim244239022026-02-10 4:11:2312 days ago1770696683IN
0xcbB3B5cb...ECe690E95
0 ETH0.000005830.04416312
Claim244238052026-02-10 3:51:5912 days ago1770695519IN
0xcbB3B5cb...ECe690E95
0 ETH0.000005580.04230271
Claim244237702026-02-10 3:44:5912 days ago1770695099IN
0xcbB3B5cb...ECe690E95
0 ETH0.000006930.05355782
Claim244237672026-02-10 3:44:2312 days ago1770695063IN
0xcbB3B5cb...ECe690E95
0 ETH0.000007530.05818223
Claim244237632026-02-10 3:43:3512 days ago1770695015IN
0xcbB3B5cb...ECe690E95
0 ETH0.000007630.05898628
Claim244237552026-02-10 3:41:5912 days ago1770694919IN
0xcbB3B5cb...ECe690E95
0 ETH0.000009070.07015088
Claim244237512026-02-10 3:41:1112 days ago1770694871IN
0xcbB3B5cb...ECe690E95
0 ETH0.000008480.0655237
Claim244237462026-02-10 3:40:1112 days ago1770694811IN
0xcbB3B5cb...ECe690E95
0 ETH0.000011050.08368306
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EsgSHIPV3Pro

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 300 runs

Other Settings:
istanbul EvmVersion
pragma solidity >=0.5.16;
pragma experimental ABIEncoderV2;

import "./EIP20Interface.sol";
import "./SafeMath.sol";

contract EsgSHIPV3Pro{
    using SafeMath for uint256;
    EIP20Interface public esg;
    address public owner;

    event SetInvitee(address referrerAddress, address inviteeAddress);

    event SetInviteeByOwner(address[] referrerAddress, address[] inviteeAddress);

    event EsgInvest(address account, uint256 amount, uint256 price);

    event EsgInvestByOwner(address[] account, uint256[] values, uint256[] withdraws, uint256[] bonuss, uint256[] lastTimes, uint256[] endTimes, uint256[] releaseRates);

    event EsgClaimed(address account, uint256 amount, uint256 price);

    event EsgChangeLockInfo(address _user, uint256 _value, uint256 _withdraw, uint256 _bonus, uint256 _lastTime, uint256 _endTime, uint256 _releaseRate);

    event FeeWalletChanged(address feewallet, address miniwallet);

    struct Lock {
        uint256 value;
        uint256 withdraw;
        uint256 bonus;
        uint256 lastTime;
        uint256 endTime;
        uint256 releaseRate;
    }
    mapping(address => Lock) public locks;

    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can call this function.");
        _;
    }

    struct Referrer {
        address[] invitees;
    }
    mapping (address => Referrer) internal inviteeslist;

    struct User {
        address referrer_addr;
    }
    mapping (address => User) public referreraddr;

    address public feeWallet = 0xaAc08D7CF5e7D9b0418e841d1E68cb5a2904A08C;
    uint256 public fee_rate = 5;
    address public miniWallet = 0x22656e9DeeCD1fC1D9380b1D5db11522c6139899;
    uint256 public mini_rate = 10;
    uint256 public fee_rate2 = 15;

    uint256 public invest_days1 = 350;
    uint256 public invest_days2 = 300;
    uint256 public invest_rate = 10;
    uint256 public first_level = 20000 * 1e24;

    uint256 public referralThreshold = 1000 * 1e24;
    uint256 public total_deposited;
    uint256 public total_user;
    uint256 public total_amount;
    uint256 public total_extracted;
    uint256 public total_claim_amount;
    uint256 public lockRates = 100;
    uint256 public staticRewardRate = 10;
    uint256 public invest_price = 511000;
    uint256 public claim_price = 511000;
    bool public investEnabled;
    bool public claimEnabled;

    constructor(address esgAddress) public {
        owner = msg.sender;
        investEnabled = true;
        claimEnabled = true;
        esg = EIP20Interface(esgAddress);
    }

    function setPrice(uint256 investPrice, uint256 claimPrice) onlyOwner public {
        require(investPrice > 0 && claimPrice > 0, "Price must be positive");
        invest_price = investPrice;
        claim_price = claimPrice;
    }

    function setFee(uint256 _fee, uint256 _minifee, uint256 _fee2) onlyOwner public {
        require(_fee2 >= _fee + _minifee, "_fee2 must be greater than the sum of the first two numbers");
        fee_rate = _fee;
        mini_rate = _minifee;
        fee_rate2 = _fee2;
    }

    function setFeeWallets(address _feewallet, address _miniwallet) onlyOwner public {
        require(_feewallet != address(0) && _miniwallet != address(0), "Invalid address");
        feeWallet = _feewallet;
        miniWallet = _miniwallet;
        emit FeeWalletChanged(_feewallet, _miniwallet);
    }

    function setInvestRate(uint256 _rate) onlyOwner public {
        invest_rate = _rate;
    }

    function setTotalNum(uint256 _deposited, uint256 _user, uint256 _amount, uint256 _extracted, uint256 _claimnum) onlyOwner public {
        total_deposited = _deposited;
        total_user = _user;
        total_amount = _amount;
        total_extracted = _extracted;
        total_claim_amount = _claimnum;
    }

    function setInvestEnabled(bool _investEnabled) onlyOwner public {
        investEnabled = _investEnabled;
    }

    function setClaimEnabled(bool _claimEnabled) onlyOwner public {
        claimEnabled = _claimEnabled;
    }

    function setInvestDays(uint256 days1, uint256 days2) onlyOwner public {
        require(days1 > 0 && days2 > 0, "days should be greater than 0");
        invest_days1 = days1;
        invest_days2 = days2;
    }

    function setInvestLevels(uint256 level) onlyOwner public {
        require(level > 0, "level should be greater than 0");
        first_level = level;
    }

    function setLockRates(uint256 _lockRates) onlyOwner public {
        lockRates = _lockRates;
    }

    function setReferralThreshold(uint256 _referralThreshold) onlyOwner public {
        referralThreshold = _referralThreshold;
    }

    function setStaticRewardRate(uint256 _staticRewardRate) onlyOwner public {
        staticRewardRate = _staticRewardRate;
    }

    function setInvitee(address inviteeAddress) public returns (bool) {
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");

        User storage user = referreraddr[inviteeAddress];
        require(user.referrer_addr == address(0), "This account had been invited!");
        
        Lock storage lock = locks[msg.sender];
        require(lock.value.mul(lockRates).div(100).add(lock.value).sub(lock.withdraw).sub(lock.bonus) >= referralThreshold, "Referrer has no referral qualification.");

        Lock storage inviteeLocks = locks[inviteeAddress];
        require(inviteeLocks.value == 0, "This account had staked!");
        
        Referrer storage referrer = inviteeslist[msg.sender];
        referrer.invitees.push(inviteeAddress);

        User storage _user = referreraddr[inviteeAddress];
        _user.referrer_addr = msg.sender;

        emit SetInvitee(msg.sender, inviteeAddress);
        return true;   
    }

    function setInviteeByOwner(address[] memory referrerAddress, address[] memory inviteeAddress) public onlyOwner returns (bool) {
        require(referrerAddress.length == inviteeAddress.length, "The length of the two arrays must be the same");

        for (uint256 i = 0; i < inviteeAddress.length; i++) {
            Referrer storage referrer = inviteeslist[referrerAddress[i]];
            referrer.invitees.push(inviteeAddress[i]);
            User storage _user = referreraddr[inviteeAddress[i]];
            _user.referrer_addr = referrerAddress[i];
        }

        emit SetInviteeByOwner(referrerAddress, inviteeAddress);
        return true;   
    }

    function removeInvitee(address referrer, address invitee) public onlyOwner {
        address[] storage invitees = inviteeslist[referrer].invitees;
        for (uint i = 0; i < invitees.length; i++) {
            if (invitees[i] == invitee) {
                invitees[i] = invitees[invitees.length - 1];
                invitees.pop();
                break;
            }
        }
    }

    function changeReferrerAddr(address referrer, address invitee) public onlyOwner {
        require(invitee != address(0), "inviteeAddress cannot be 0x0.");
        User storage _user = referreraddr[invitee];
        _user.referrer_addr = referrer;
    }

    function getInviteelist(address referrerAddress) public view returns (address[] memory) {
        require(referrerAddress != address(0), "referrerAddress cannot be 0x0.");
        Referrer storage referrer = inviteeslist[referrerAddress];
        return referrer.invitees;
    }

    function getReferrer(address inviteeAddress) public view returns (address) {
        require(inviteeAddress != address(0), "inviteeAddress cannot be 0x0.");
        User storage user = referreraddr[inviteeAddress];
        return user.referrer_addr;
    }

    function invest(uint256 _amount) public returns (bool) {
        require(investEnabled == true, "No invest allowed!");
        require(_amount > 0, "Invalid amount.");

        uint256 fee_amount = _amount.mul(invest_rate).div(100);
        esg.transferFrom(msg.sender, feeWallet, fee_amount);
        esg.transferFrom(msg.sender, address(this), _amount - fee_amount);

        Lock storage user_locks = locks[msg.sender];
        uint256 invest_days = 0;
        if(user_locks.lastTime > 0){
            user_locks.bonus += block.timestamp.sub(user_locks.lastTime).mul(user_locks.releaseRate).div(86400);
        }

        if(user_locks.value == 0){
            total_user = total_user + 1;
        }
        
        user_locks.value += _amount.mul(invest_price);
        user_locks.lastTime = block.timestamp;
        
        uint256 deposit = user_locks.value.mul(lockRates).div(100).add(user_locks.value).sub(user_locks.withdraw).sub(user_locks.bonus);
        if(deposit < first_level){
            invest_days = invest_days1;
        }else{
            invest_days = invest_days2;
        } 
        user_locks.endTime = block.timestamp + (invest_days * 86400);
        user_locks.releaseRate = deposit.div(invest_days);

        total_deposited += _amount.mul(invest_price);
        total_amount += _amount;
            
        User storage user = referreraddr[msg.sender];

        if(user.referrer_addr != address(0)){
            locks[user.referrer_addr].bonus += _amount.mul(invest_price).mul(staticRewardRate).div(100);
        }

        emit EsgInvest(msg.sender, _amount, invest_price);
        return true;
    }

    function investByOwner(address[] memory investAddress, uint256[] memory _value, uint256[] memory _withdraw, uint256[] memory _bonus, uint256[] memory _lastTime, uint256[] memory _endTime, uint256[] memory _releaseRate) public onlyOwner returns (bool) {
        require(investAddress.length == _value.length && investAddress.length == _withdraw.length && investAddress.length == _bonus.length && investAddress.length == _lastTime.length && investAddress.length == _endTime.length && investAddress.length == _releaseRate.length, "The length of the arrays must be the same");
        
        for (uint256 i = 0; i < investAddress.length; i++) {
            Lock storage user_locks = locks[investAddress[i]];
            user_locks.value = _value[i];
            user_locks.withdraw = _withdraw[i];
            user_locks.bonus = _bonus[i];
            user_locks.lastTime = _lastTime[i];
            user_locks.endTime = _endTime[i];
            user_locks.releaseRate = _releaseRate[i];
        }

        emit EsgInvestByOwner(investAddress, _value, _withdraw, _bonus, _lastTime, _endTime, _releaseRate);
        return true;
    }

    function claim() public returns (bool) {
        require(claimEnabled == true, "No claim allowed!");
        Lock storage userLocks = locks[msg.sender];
        require(userLocks.releaseRate > 0 && userLocks.lastTime > 0, "No locked amount.");

        uint256 totalInterest = userLocks.bonus;
        uint256 userDeposit = userLocks.value.mul(lockRates).div(100).add(userLocks.value);
        uint256 userWithdraw = userLocks.withdraw;
        require(userDeposit > userWithdraw, "All investments have been fully withdrawn");

        uint256 interest = (block.timestamp.sub(userLocks.lastTime)).mul(userLocks.releaseRate).div(86400);    
        totalInterest += interest;
        userLocks.lastTime = block.timestamp;
        userLocks.bonus = 0;   
        require(totalInterest > 0, "No interest to claim.");

        uint256 transfer_amount = 0;
        uint256 feeAmount = 0;
        uint256 miniAmount = 0;
        uint256 total_withdraw = userLocks.withdraw + totalInterest;
        if(total_withdraw >= userDeposit){
            transfer_amount = (userDeposit.sub(userWithdraw)).div(claim_price);
            userLocks.withdraw = userDeposit;
            feeAmount = transfer_amount.mul(fee_rate).div(100);
            miniAmount = transfer_amount.mul(mini_rate).div(100);
            uint256 fee = 0;
            if(userLocks.withdraw > userLocks.value){
                fee = fee_rate2 - fee_rate - mini_rate;
                feeAmount += transfer_amount.mul(fee).div(100);
            }
            if(feeAmount > 0){
                esg.transfer(feeWallet, feeAmount);  
            }
            if(miniAmount > 0){
                esg.transfer(miniWallet, miniAmount);  
            }
            esg.transfer(msg.sender, transfer_amount.sub(feeAmount).sub(miniAmount));
            userLocks.releaseRate = 0;
            userLocks.lastTime = 0;
            userLocks.endTime = 0;
        }else{
            transfer_amount = totalInterest.div(claim_price);
            userLocks.withdraw += totalInterest;
            feeAmount = transfer_amount.mul(fee_rate).div(100);
            miniAmount = transfer_amount.mul(mini_rate).div(100);
            uint256 fee = 0;
            if(userLocks.withdraw > userLocks.value){
                fee = fee_rate2 - fee_rate - mini_rate;
                feeAmount += transfer_amount.mul(fee).div(100);
            }
            if(feeAmount > 0){
                esg.transfer(feeWallet, feeAmount);  
            }
            if(miniAmount > 0){
                esg.transfer(miniWallet, miniAmount);  
            }
            esg.transfer(msg.sender, transfer_amount.sub(feeAmount).sub(miniAmount));

            uint256 deposit = userDeposit.sub(total_withdraw);
            uint256 invest_days = 0;
            if(deposit < first_level){
                invest_days = invest_days1;
            }else{
                invest_days = invest_days2;
            } 
            userLocks.releaseRate = deposit.div(invest_days);
            userLocks.endTime = block.timestamp + (invest_days * 86400);
        }
        total_claim_amount += transfer_amount;
        total_extracted += transfer_amount.mul(claim_price);

        emit EsgClaimed (msg.sender, transfer_amount, claim_price); 
        return true;
    }

    function getUnclaimValue(address _user) public view returns (uint256) {
        require(_user != address(0), "_user cannot be 0x0.");
        Lock storage userLocks = locks[_user];
        if(userLocks.value == 0){
            return 0;
        }

        uint256 totalInterest = userLocks.bonus;
        uint256 userDeposit = userLocks.value.mul(lockRates).div(100).add(userLocks.value);
        uint256 userWithdraw = userLocks.withdraw;
        if(userDeposit <= userWithdraw){
            return 0;
        }

        uint256 interest = (block.timestamp.sub(userLocks.lastTime)).mul(userLocks.releaseRate).div(86400);    
        totalInterest += interest; 
        if(totalInterest + userWithdraw >= userDeposit){
            return userDeposit - userWithdraw;
        }
        return totalInterest;
    }

    function changeLockInfo(address _user, uint256 _value, uint256 _withdraw, uint256 _bonus, uint256 _lastTime, uint256 _endTime, uint256 _releaseRate) public onlyOwner returns (bool) {
        require(_user != address(0), "_user cannot be 0x0.");
        locks[_user] = Lock(_value, _withdraw, _bonus, _lastTime, _endTime, _releaseRate);
        emit EsgChangeLockInfo(_user, _value, _withdraw, _bonus, _lastTime, _endTime, _releaseRate);
        return true;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "New owner cannot be 0x0.");
        owner = newOwner;
    }
}

pragma solidity ^0.5.16;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, errorMessage);

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts with custom message on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

    /**
   * @dev gives square root of given x.
   */
  function sqrt(uint256 x) internal pure returns(uint256 y) {
        uint256 z = ((add(x, 1)) / 2);
        y = x;
        while (z < y) {
            y = z;
            z = ((add((x / z), z)) / 2);
        }
  }

  /**
   * @dev gives square. multiplies x by x
   */
  function sq(uint256 x) internal pure returns(uint256) {
       return (mul(x, x));
  }

  /**
   * @dev x to the power of y
   */
  function pwr(uint256 x, uint256 y) internal pure returns(uint256) {
    if (x == 0)
      return (0);
    else if (y == 0)
      return (1);
    else {
      uint256 z = x;
      for (uint256 i = 1; i < y; i++)
        z = mul(z, x);
      return (z);
    }
  }
}

pragma solidity ^0.5.16;

/**
 * @title ERC 20 Token Standard Interface
 *  https://eips.ethereum.org/EIPS/eip-20
 */
interface EIP20Interface {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    /**
      * @notice Get the total number of tokens in circulation
      * @return The supply of tokens
      */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
      * @notice Transfer `amount` tokens from `msg.sender` to `dst`
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transfer(address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Transfer `amount` tokens from `src` to `dst`
      * @param src The address of the source account
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Approve `spender` to transfer up to `amount` from `src`
      * @dev This will overwrite the approval amount for `spender`
      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
      * @param spender The address of the account which may transfer tokens
      * @param amount The number of tokens that are approved (-1 means infinite)
      * @return Whether or not the approval succeeded
      */
    function approve(address spender, uint256 amount) external returns (bool success);

    /**
      * @notice Get the current allowance from `owner` for `spender`
      * @param owner The address of the account which owns the tokens to be spent
      * @param spender The address of the account which may transfer tokens
      * @return The number of tokens allowed to be spent (-1 means infinite)
      */
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 300
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"esgAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_withdraw","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_bonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_lastTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_releaseRate","type":"uint256"}],"name":"EsgChangeLockInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EsgClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EsgInvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"account","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"withdraws","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"bonuss","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"lastTimes","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"endTimes","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"releaseRates","type":"uint256[]"}],"name":"EsgInvestByOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feewallet","type":"address"},{"indexed":false,"internalType":"address","name":"miniwallet","type":"address"}],"name":"FeeWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referrerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"SetInvitee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"referrerAddress","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"inviteeAddress","type":"address[]"}],"name":"SetInviteeByOwner","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_withdraw","type":"uint256"},{"internalType":"uint256","name":"_bonus","type":"uint256"},{"internalType":"uint256","name":"_lastTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"uint256","name":"_releaseRate","type":"uint256"}],"name":"changeLockInfo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"invitee","type":"address"}],"name":"changeReferrerAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"claim_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"esg","outputs":[{"internalType":"contract EIP20Interface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fee_rate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"first_level","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"}],"name":"getInviteelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"getReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUnclaimValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"investAddress","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"uint256[]","name":"_withdraw","type":"uint256[]"},{"internalType":"uint256[]","name":"_bonus","type":"uint256[]"},{"internalType":"uint256[]","name":"_lastTime","type":"uint256[]"},{"internalType":"uint256[]","name":"_endTime","type":"uint256[]"},{"internalType":"uint256[]","name":"_releaseRate","type":"uint256[]"}],"name":"investByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"invest_days1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"invest_days2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"invest_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"invest_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"withdraw","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"},{"internalType":"uint256","name":"lastTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"releaseRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miniWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mini_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referreraddr","outputs":[{"internalType":"address","name":"referrer_addr","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"invitee","type":"address"}],"name":"removeInvitee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_claimEnabled","type":"bool"}],"name":"setClaimEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_minifee","type":"uint256"},{"internalType":"uint256","name":"_fee2","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feewallet","type":"address"},{"internalType":"address","name":"_miniwallet","type":"address"}],"name":"setFeeWallets","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"days1","type":"uint256"},{"internalType":"uint256","name":"days2","type":"uint256"}],"name":"setInvestDays","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_investEnabled","type":"bool"}],"name":"setInvestEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"setInvestLevels","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setInvestRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"inviteeAddress","type":"address"}],"name":"setInvitee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"referrerAddress","type":"address[]"},{"internalType":"address[]","name":"inviteeAddress","type":"address[]"}],"name":"setInviteeByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_lockRates","type":"uint256"}],"name":"setLockRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"investPrice","type":"uint256"},{"internalType":"uint256","name":"claimPrice","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_referralThreshold","type":"uint256"}],"name":"setReferralThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_staticRewardRate","type":"uint256"}],"name":"setStaticRewardRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_deposited","type":"uint256"},{"internalType":"uint256","name":"_user","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_extracted","type":"uint256"},{"internalType":"uint256","name":"_claimnum","type":"uint256"}],"name":"setTotalNum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"staticRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_claim_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_extracted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_user","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600580546001600160a01b031990811673aac08d7cf5e7d9b0418e841d1e68cb5a2904a08c178255600691909155600780549091167322656e9deecd1fc1d9380b1d5db11522c6139899179055600a6008819055600f60095561015e815561012c600b55600c8190556b409f9cbc7c4a04c220000000600d556b033b2e3c9fd0803ce8000000600e5560646014556015556207cc186016819055601755348015620000ae57600080fd5b506040516200328338038062003283833981016040819052620000d19162000133565b60018054336001600160a01b03199182161782556018805461010060ff1990911690931761ff00191692909217909155600080549091166001600160a01b039290921691909117905562000188565b80516200012d816200016e565b92915050565b6000602082840312156200014657600080fd5b600062000154848462000120565b949350505050565b60006001600160a01b0382166200012d565b62000179816200015c565b81146200018557600080fd5b50565b6130eb80620001986000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80637cb04a21116101b2578063cac06522116100f9578063f25f4b56116100a2578063fcb53d361161007c578063fcb53d36146105e8578063fd1fb605146105f0578063fe354cd314610603578063ff3829eb146106165761032b565b8063f25f4b56146105ba578063f2fde38b146105c2578063f7d97577146105d55761032b565b8063de560cca116100d3578063de560cca14610597578063e085c9521461059f578063f0fde113146105a75761032b565b8063cac0652214610572578063d88e71e014610587578063dd9697281461058f5761032b565b80638fc1ea1e1161015b578063a0cbadb311610135578063a0cbadb31461054f578063ad82c25414610557578063b553207e1461056a5761032b565b80638fc1ea1e1461051657806392929a09146105295780639b9c97591461053c5761032b565b80638bdb1e4f1161018c5780638bdb1e4f146104f35780638da5cb5b146105065780638f73918e1461050e5761032b565b80637cb04a21146104ba5780637e320f7f146104cd57806388045588146104e05761032b565b806339e38f41116102765780635b65b9ab1161021f578063673cd98e116101f9578063673cd98e146104a257806371f4f3fb146104aa578063767eb6c7146104b25761032b565b80635b65b9ab146104625780635de9a1371461047557806365ab44771461049a5761032b565b80634e71d92d116102505780634e71d92d1461043f5780634fa77a48146104475780635a6da1e91461045a5761032b565b806339e38f411461041c57806340912990146104245780634a9fefc71461042c5761032b565b8063265243b6116102d85780632e5e8334116102b25780632e5e8334146103e157806336d8a893146103e9578063384c9aef146104095761032b565b8063265243b6146103b35780632866ed21146103c65780632afcf480146103ce5761032b565b8063179eb7fc11610309578063179eb7fc146103835780631fe9483f146103985780631fed13f2146103ab5761032b565b8063027dcbe6146103305780630985f7081461034e5780630b6bedec1461036e575b600080fd5b610338610629565b6040516103459190612f60565b60405180910390f35b61036161035c366004612276565b61062f565b6040516103459190612dc3565b6103766107d5565b6040516103459190612bec565b610396610391366004612463565b6107e4565b005b6103966103a6366004612445565b610845565b610338610894565b6103616103c13660046121da565b61089a565b6103616109d0565b6103616103dc366004612445565b6109de565b610338610d51565b6103fc6103f736600461217a565b610d57565b6040516103459190612cf7565b610396610417366004612445565b610df8565b610338610e27565b610338610e2d565b61037661043a36600461217a565b610e33565b610361610e7a565b61036161045536600461217a565b611518565b6103386116a1565b610396610470366004612493565b6116a7565b61048861048336600461217a565b611701565b60405161034596959493929190612f6e565b610338611738565b61033861173e565b610361611744565b61033861174d565b6103966104c8366004612445565b611753565b6103966104db3660046124e0565b611782565b6103966104ee366004612445565b6117c3565b6103966105013660046121a0565b6117f2565b610376611873565b610338611882565b610396610524366004612409565b611888565b610396610537366004612409565b6118c5565b61033861054a36600461217a565b611909565b6103386119ee565b610396610565366004612445565b6119f4565b610338611a23565b61057a611a29565b6040516103459190612dd1565b610338611a38565b610338611a3e565b610338611a44565b610338611a4a565b6103966105b53660046121a0565b611a50565b610376611b77565b6103966105d036600461217a565b611b86565b6103966105e3366004612463565b611bf8565b610338611c59565b6103966105fe3660046121a0565b611c5f565b6103616106113660046122d5565b611d33565b61037661062436600461217a565b611ef7565b60175481565b6001546000906001600160a01b031633146106655760405162461bcd60e51b815260040161065c90612e10565b60405180910390fd5b81518351146106865760405162461bcd60e51b815260040161065c90612e60565b60005b8251811015610791576000600360008684815181106106a457fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050806000018483815181106106de57fe5b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b039092169190911790558451600490829087908690811061072d57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020905085838151811061076357fe5b602090810291909101015181546001600160a01b0319166001600160a01b0390911617905550600101610689565b507f9dbeb05a6254e135c9083ae0658fc2bb9b12fa2507454a145f9a3e032a65979b83836040516107c3929190612d08565b60405180910390a15060015b92915050565b6007546001600160a01b031681565b6001546001600160a01b0316331461080e5760405162461bcd60e51b815260040161065c90612e10565b60008211801561081e5750600081115b61083a5760405162461bcd60e51b815260040161065c90612eb0565b600a91909155600b55565b6001546001600160a01b0316331461086f5760405162461bcd60e51b815260040161065c90612e10565b6000811161088f5760405162461bcd60e51b815260040161065c90612ec0565b600d55565b600c5481565b6001546000906001600160a01b031633146108c75760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0388166108ed5760405162461bcd60e51b815260040161065c90612f30565b6040518060c0016040528088815260200187815260200186815260200185815260200184815260200183815250600260008a6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501559050507f1d258f449ca00d720f3d00f10cd38a6e2fbae3ff5b1b8b206acb2272c9640275888888888888886040516109b99796959493929190612c8f565b60405180910390a15060015b979650505050505050565b601854610100900460ff1681565b60185460009060ff161515600114610a085760405162461bcd60e51b815260040161065c90612ea0565b60008211610a285760405162461bcd60e51b815260040161065c90612df0565b6000610a506064610a44600c5486611f1290919063ffffffff16565b9063ffffffff611f5316565b6000546005546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd92610a8b9233929116908690600401612c15565b602060405180830381600087803b158015610aa557600080fd5b505af1158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610add9190810190612427565b506000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610b14903390309086890390600401612c15565b602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b669190810190612427565b50336000908152600260205260408120600381015490919015610bc157610bb562015180610a448460050154610ba9866003015442611f9590919063ffffffff16565b9063ffffffff611f1216565b60028301805490910190555b8154610bd1576010805460010190555b601654610be590869063ffffffff611f1216565b82540180835542600384015560028301546001840154601454600093610c3e9392610c329290918391610c2690606490610a4490849063ffffffff611f1216565b9063ffffffff611fd716565b9063ffffffff611f9516565b9050600d54811015610c5457600a549150610c5a565b600b5491505b42620151808302016004840155610c77818363ffffffff611f5316565b6005840155601654610c9090879063ffffffff611f1216565b600f80549091019055601180548701905533600090815260046020526040902080546001600160a01b031615610d0557610ce06064610a44601554610ba96016548c611f1290919063ffffffff16565b81546001600160a01b0316600090815260026020819052604090912001805490910190555b7f3eb0f553d9ec38e0ff3a72db450f9d6f5e372e70e824a3195a09ead1c01fb8763388601654604051610d3a93929190612c58565b60405180910390a16001955050505050505b919050565b600b5481565b60606001600160a01b038216610d7f5760405162461bcd60e51b815260040161065c90612e90565b6001600160a01b0382166000908152600360209081526040918290208054835181840281018401909452808452909291839190830182828015610deb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dcd575b5050505050915050919050565b6001546001600160a01b03163314610e225760405162461bcd60e51b815260040161065c90612e10565b601455565b60085481565b60105481565b60006001600160a01b038216610e5b5760405162461bcd60e51b815260040161065c90612f00565b506001600160a01b039081166000908152600460205260409020541690565b60185460009060ff610100909104161515600114610eaa5760405162461bcd60e51b815260040161065c90612f50565b336000908152600260205260409020600581015415801590610ed0575060008160030154115b610eec5760405162461bcd60e51b815260040161065c90612ee0565b60028101548154601454600091610f1591610c2690606490610a4490849063ffffffff611f1216565b6001840154909150808211610f3c5760405162461bcd60e51b815260040161065c90612f20565b6000610f6462015180610a448760050154610ba9896003015442611f9590919063ffffffff16565b4260038701556000600287015593840193905083610f945760405162461bcd60e51b815260040161065c90612e80565b600185015460009081908190870186811061120b57601754610fc090610a44898963ffffffff611f9516565b9350868960010181905550610fe56064610a4460065487611f1290919063ffffffff16565b92506110016064610a4460085487611f1290919063ffffffff16565b895460018b0154919350600091111561103a575060085460065460095403036110356064610a44878463ffffffff611f1216565b840193505b83156110ca5760005460055460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611076929116908890600401612c81565b602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110c89190810190612427565b505b821561115a5760005460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611106929116908790600401612c81565b602060405180830381600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111589190810190612427565b505b6000546001600160a01b031663a9059cbb3361118086610c328a8a63ffffffff611f9516565b6040518363ffffffff1660e01b815260040161119d929190612c3d565b602060405180830381600087803b1580156111b757600080fd5b505af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ef9190810190612427565b5050600060058a0181905560038a0181905560048a01556114a6565b60175461121f90899063ffffffff611f5316565b60018a0180548a01905560065490945061124790606490610a4490879063ffffffff611f1216565b92506112636064610a4460085487611f1290919063ffffffff16565b895460018b0154919350600091111561129c575060085460065460095403036112976064610a44878463ffffffff611f1216565b840193505b831561132c5760005460055460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926112d8929116908890600401612c81565b602060405180830381600087803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061132a9190810190612427565b505b82156113bc5760005460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611368929116908790600401612c81565b602060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ba9190810190612427565b505b6000546001600160a01b031663a9059cbb336113e286610c328a8a63ffffffff611f9516565b6040518363ffffffff1660e01b81526004016113ff929190612c3d565b602060405180830381600087803b15801561141957600080fd5b505af115801561142d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114519190810190612427565b506000611464898463ffffffff611f9516565b600d5490915060009082101561147d5750600a54611482565b50600b545b611492828263ffffffff611f5316565b60058d01556201518002420160048c015550505b60138054850190556017546114c290859063ffffffff611f1216565b6012805490910190556017546040517f4343fc0436cb075772fdb7e28d5380cc610e5334add5537e2d2b2946b8e2836f916115009133918891612c58565b60405180910390a16001995050505050505050505090565b60006001600160a01b0382166115405760405162461bcd60e51b815260040161065c90612f00565b6001600160a01b03808316600090815260046020526040902080549091161561157b5760405162461bcd60e51b815260040161065c90612f40565b336000908152600260208190526040909120600e5491810154600182015482546014549394936115c79392610c32929091839190610c2690606490610a4490849063ffffffff611f1216565b10156115e55760405162461bcd60e51b815260040161065c90612e00565b6001600160a01b038416600090815260026020526040902080541561161c5760405162461bcd60e51b815260040161065c90612e70565b33600081815260036020908152604080832080546001810182558185528385200180546001600160a01b038c166001600160a01b0319918216811790925590855260049093529281902080549092168417825551919290917f119ef486614f5f4e5c2be21ea6eaf1a60375d930dbc6fa4cba7989bcfbe0ec8591610d3a918a90612bfa565b60145481565b6001546001600160a01b031633146116d15760405162461bcd60e51b815260040161065c90612e10565b8183018110156116f35760405162461bcd60e51b815260040161065c90612ef0565b600692909255600855600955565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b600e5481565b60115481565b60185460ff1681565b600d5481565b6001546001600160a01b0316331461177d5760405162461bcd60e51b815260040161065c90612e10565b601555565b6001546001600160a01b031633146117ac5760405162461bcd60e51b815260040161065c90612e10565b600f94909455601092909255601155601255601355565b6001546001600160a01b031633146117ed5760405162461bcd60e51b815260040161065c90612e10565b600c55565b6001546001600160a01b0316331461181c5760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0381166118425760405162461bcd60e51b815260040161065c90612f00565b6001600160a01b03908116600090815260046020526040902080546001600160a01b03191692909116919091179055565b6001546001600160a01b031681565b60095481565b6001546001600160a01b031633146118b25760405162461bcd60e51b815260040161065c90612e10565b6018805460ff1916911515919091179055565b6001546001600160a01b031633146118ef5760405162461bcd60e51b815260040161065c90612e10565b601880549115156101000261ff0019909216919091179055565b60006001600160a01b0382166119315760405162461bcd60e51b815260040161065c90612f30565b6001600160a01b03821660009081526002602052604090208054611959576000915050610d4c565b6002810154815460145460009161198291610c2690606490610a4490849063ffffffff611f1216565b600184015490915080821161199e576000945050505050610d4c565b60006119c662015180610a448760050154610ba9896003015442611f9590919063ffffffff16565b9050808401935082828501106119e3575090039250610d4c915050565b509195945050505050565b60125481565b6001546001600160a01b03163314611a1e5760405162461bcd60e51b815260040161065c90612e10565b600e55565b600a5481565b6000546001600160a01b031681565b60155481565b60165481565b600f5481565b60135481565b6001546001600160a01b03163314611a7a5760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0382166000908152600360205260408120905b8154811015611b7157826001600160a01b0316828281548110611ab357fe5b6000918252602090912001546001600160a01b03161415611b6957815482906000198101908110611ae057fe5b9060005260206000200160009054906101000a90046001600160a01b0316828281548110611b0a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081805480611b4257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611b71565b600101611a94565b50505050565b6005546001600160a01b031681565b6001546001600160a01b03163314611bb05760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b038116611bd65760405162461bcd60e51b815260040161065c90612e20565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611c225760405162461bcd60e51b815260040161065c90612e10565b600082118015611c325750600081115b611c4e5760405162461bcd60e51b815260040161065c90612f10565b601691909155601755565b60065481565b6001546001600160a01b03163314611c895760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b03821615801590611ca957506001600160a01b03811615155b611cc55760405162461bcd60e51b815260040161065c90612e30565b600580546001600160a01b038085166001600160a01b03199283161790925560078054928416929091169190911790556040517f9f4f5dce3c4d197b5d7496cb96e25f0a89809167195964b0daa3ef5fed63c00a90611d279084908490612c73565b60405180910390a15050565b6001546000906001600160a01b03163314611d605760405162461bcd60e51b815260040161065c90612e10565b86518851148015611d72575085518851145b8015611d7f575084518851145b8015611d8c575083518851145b8015611d99575082518851145b8015611da6575081518851145b611dc25760405162461bcd60e51b815260040161065c90612e40565b60005b8851811015611ebb576000600260008b8481518110611de057fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050888281518110611e1657fe5b60200260200101518160000181905550878281518110611e3257fe5b60200260200101518160010181905550868281518110611e4e57fe5b60200260200101518160020181905550858281518110611e6a57fe5b60200260200101518160030181905550848281518110611e8657fe5b60200260200101518160040181905550838281518110611ea257fe5b6020908102919091010151600590910155600101611dc5565b507ff4a5e17d0336eb9b912ed5de3d810d3957d3b48b09452a5ccd34885369167807888888888888886040516109b99796959493929190612d2d565b6004602052600090815260409020546001600160a01b031681565b600082611f21575060006107cf565b82820282848281611f2e57fe5b0414611f4c5760405162461bcd60e51b815260040161065c90612ed0565b9392505050565b6000611f4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ffc565b6000611f4c83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250612033565b600082820183811015611f4c5760405162461bcd60e51b815260040161065c90612e50565b6000818361201d5760405162461bcd60e51b815260040161065c9190612ddf565b50600083858161202957fe5b0495945050505050565b600081848411156120575760405162461bcd60e51b815260040161065c9190612ddf565b505050900390565b80356107cf8161307f565b600082601f83011261207b57600080fd5b813561208e61208982612fe4565b612fbd565b915081818352602084019350602081019050838560208402820111156120b357600080fd5b60005b838110156120df57816120c9888261205f565b84525060209283019291909101906001016120b6565b5050505092915050565b600082601f8301126120fa57600080fd5b813561210861208982612fe4565b9150818183526020840193506020810190508385602084028201111561212d57600080fd5b60005b838110156120df5781612143888261216f565b8452506020928301929190910190600101612130565b80356107cf81613096565b80516107cf81613096565b80356107cf8161309f565b60006020828403121561218c57600080fd5b6000612198848461205f565b949350505050565b600080604083850312156121b357600080fd5b60006121bf858561205f565b92505060206121d08582860161205f565b9150509250929050565b600080600080600080600060e0888a0312156121f557600080fd5b60006122018a8a61205f565b97505060206122128a828b0161216f565b96505060406122238a828b0161216f565b95505060606122348a828b0161216f565b94505060806122458a828b0161216f565b93505060a06122568a828b0161216f565b92505060c06122678a828b0161216f565b91505092959891949750929550565b6000806040838503121561228957600080fd5b823567ffffffffffffffff8111156122a057600080fd5b6122ac8582860161206a565b925050602083013567ffffffffffffffff8111156122c957600080fd5b6121d08582860161206a565b600080600080600080600060e0888a0312156122f057600080fd5b873567ffffffffffffffff81111561230757600080fd5b6123138a828b0161206a565b975050602088013567ffffffffffffffff81111561233057600080fd5b61233c8a828b016120e9565b965050604088013567ffffffffffffffff81111561235957600080fd5b6123658a828b016120e9565b955050606088013567ffffffffffffffff81111561238257600080fd5b61238e8a828b016120e9565b945050608088013567ffffffffffffffff8111156123ab57600080fd5b6123b78a828b016120e9565b93505060a088013567ffffffffffffffff8111156123d457600080fd5b6123e08a828b016120e9565b92505060c088013567ffffffffffffffff8111156123fd57600080fd5b6122678a828b016120e9565b60006020828403121561241b57600080fd5b60006121988484612159565b60006020828403121561243957600080fd5b60006121988484612164565b60006020828403121561245757600080fd5b6000612198848461216f565b6000806040838503121561247657600080fd5b6000612482858561216f565b92505060206121d08582860161216f565b6000806000606084860312156124a857600080fd5b60006124b4868661216f565b93505060206124c58682870161216f565b92505060406124d68682870161216f565b9150509250925092565b600080600080600060a086880312156124f857600080fd5b6000612504888861216f565b95505060206125158882890161216f565b94505060406125268882890161216f565b93505060606125378882890161216f565b92505060806125488882890161216f565b9150509295509295909350565b60006125618383612584565b505060200190565b60006125618383612be3565b61257e81613037565b82525050565b61257e81613018565b60006125988261300b565b6125a2818561300f565b93506125ad83613005565b8060005b838110156125db5781516125c58882612555565b97506125d083613005565b9250506001016125b1565b509495945050505050565b60006125f18261300b565b6125fb818561300f565b935061260683613005565b8060005b838110156125db57815161261e8882612569565b975061262983613005565b92505060010161260a565b61257e81613023565b61257e8161303e565b60006126518261300b565b61265b818561300f565b935061266b818560208601613049565b61267481613075565b9093019392505050565b600061268b600f8361300f565b6e24b73b30b634b21030b6b7bab73a1760891b815260200192915050565b60006126b660278361300f565b7f526566657272657220686173206e6f20726566657272616c207175616c69666981526631b0ba34b7b71760c91b602082015260400192915050565b60006126ff60228361300f565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f815261371760f11b602082015260400192915050565b600061274360188361300f565b7f4e6577206f776e65722063616e6e6f74206265203078302e0000000000000000815260200192915050565b600061277c600f8361300f565b6e496e76616c6964206164647265737360881b815260200192915050565b60006127a760298361300f565b7f546865206c656e677468206f662074686520617272617973206d757374206265815268207468652073616d6560b81b602082015260400192915050565b60006127f2601b8361300f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061282b602d8361300f565b7f546865206c656e677468206f66207468652074776f20617272617973206d757381526c74206265207468652073616d6560981b602082015260400192915050565b600061287a60188361300f565b7f54686973206163636f756e7420686164207374616b6564210000000000000000815260200192915050565b60006128b360158361300f565b7f4e6f20696e74657265737420746f20636c61696d2e0000000000000000000000815260200192915050565b60006128ec601e8361300f565b7f7265666572726572416464726573732063616e6e6f74206265203078302e0000815260200192915050565b600061292560128361300f565b714e6f20696e7665737420616c6c6f7765642160701b815260200192915050565b6000612953601d8361300f565b7f646179732073686f756c642062652067726561746572207468616e2030000000815260200192915050565b600061298c601e8361300f565b7f6c6576656c2073686f756c642062652067726561746572207468616e20300000815260200192915050565b60006129c560218361300f565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612a0860118361300f565b702737903637b1b5b2b21030b6b7bab73a1760791b815260200192915050565b6000612a35603b8361300f565b7f5f66656532206d7573742062652067726561746572207468616e20746865207381527f756d206f66207468652066697273742074776f206e756d626572730000000000602082015260400192915050565b6000612a94601d8361300f565b7f696e7669746565416464726573732063616e6e6f74206265203078302e000000815260200192915050565b6000612acd60168361300f565b7f5072696365206d75737420626520706f73697469766500000000000000000000815260200192915050565b6000612b0660298361300f565b7f416c6c20696e766573746d656e74732068617665206265656e2066756c6c79208152683bb4ba34323930bbb760b91b602082015260400192915050565b6000612b5160148361300f565b7f5f757365722063616e6e6f74206265203078302e000000000000000000000000815260200192915050565b6000612b8a601e8361300f565b7f54686973206163636f756e7420686164206265656e20696e7669746564210000815260200192915050565b6000612bc360118361300f565b704e6f20636c61696d20616c6c6f7765642160781b815260200192915050565b61257e81613034565b602081016107cf8284612584565b60408101612c088285612575565b611f4c6020830184612584565b60608101612c238286612575565b612c306020830185612584565b6121986040830184612be3565b60408101612c4b8285612575565b611f4c6020830184612be3565b60608101612c668286612575565b612c306020830185612be3565b60408101612c088285612584565b60408101612c4b8285612584565b60e08101612c9d828a612584565b612caa6020830189612be3565b612cb76040830188612be3565b612cc46060830187612be3565b612cd16080830186612be3565b612cde60a0830185612be3565b612ceb60c0830184612be3565b98975050505050505050565b60208082528101611f4c818461258d565b60408082528101612d19818561258d565b90508181036020830152612198818461258d565b60e08082528101612d3e818a61258d565b90508181036020830152612d5281896125e6565b90508181036040830152612d6681886125e6565b90508181036060830152612d7a81876125e6565b90508181036080830152612d8e81866125e6565b905081810360a0830152612da281856125e6565b905081810360c0830152612db681846125e6565b9998505050505050505050565b602081016107cf8284612634565b602081016107cf828461263d565b60208082528101611f4c8184612646565b602080825281016107cf8161267e565b602080825281016107cf816126a9565b602080825281016107cf816126f2565b602080825281016107cf81612736565b602080825281016107cf8161276f565b602080825281016107cf8161279a565b602080825281016107cf816127e5565b602080825281016107cf8161281e565b602080825281016107cf8161286d565b602080825281016107cf816128a6565b602080825281016107cf816128df565b602080825281016107cf81612918565b602080825281016107cf81612946565b602080825281016107cf8161297f565b602080825281016107cf816129b8565b602080825281016107cf816129fb565b602080825281016107cf81612a28565b602080825281016107cf81612a87565b602080825281016107cf81612ac0565b602080825281016107cf81612af9565b602080825281016107cf81612b44565b602080825281016107cf81612b7d565b602080825281016107cf81612bb6565b602081016107cf8284612be3565b60c08101612f7c8289612be3565b612f896020830188612be3565b612f966040830187612be3565b612fa36060830186612be3565b612fb06080830185612be3565b6109c560a0830184612be3565b60405181810167ffffffffffffffff81118282101715612fdc57600080fd5b604052919050565b600067ffffffffffffffff821115612ffb57600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b60006107cf82613028565b151590565b6001600160a01b031690565b90565b60006107cf825b60006107cf82613018565b60005b8381101561306457818101518382015260200161304c565b83811115611b715750506000910152565b601f01601f191690565b61308881613018565b811461309357600080fd5b50565b61308881613023565b6130888161303456fea365627a7a723158200f6631b5a51ec713c0bb2be84c50c5df39084d10d1ae99a2eef778c6312e75fe6c6578706572696d656e74616cf564736f6c6343000510004000000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80637cb04a21116101b2578063cac06522116100f9578063f25f4b56116100a2578063fcb53d361161007c578063fcb53d36146105e8578063fd1fb605146105f0578063fe354cd314610603578063ff3829eb146106165761032b565b8063f25f4b56146105ba578063f2fde38b146105c2578063f7d97577146105d55761032b565b8063de560cca116100d3578063de560cca14610597578063e085c9521461059f578063f0fde113146105a75761032b565b8063cac0652214610572578063d88e71e014610587578063dd9697281461058f5761032b565b80638fc1ea1e1161015b578063a0cbadb311610135578063a0cbadb31461054f578063ad82c25414610557578063b553207e1461056a5761032b565b80638fc1ea1e1461051657806392929a09146105295780639b9c97591461053c5761032b565b80638bdb1e4f1161018c5780638bdb1e4f146104f35780638da5cb5b146105065780638f73918e1461050e5761032b565b80637cb04a21146104ba5780637e320f7f146104cd57806388045588146104e05761032b565b806339e38f41116102765780635b65b9ab1161021f578063673cd98e116101f9578063673cd98e146104a257806371f4f3fb146104aa578063767eb6c7146104b25761032b565b80635b65b9ab146104625780635de9a1371461047557806365ab44771461049a5761032b565b80634e71d92d116102505780634e71d92d1461043f5780634fa77a48146104475780635a6da1e91461045a5761032b565b806339e38f411461041c57806340912990146104245780634a9fefc71461042c5761032b565b8063265243b6116102d85780632e5e8334116102b25780632e5e8334146103e157806336d8a893146103e9578063384c9aef146104095761032b565b8063265243b6146103b35780632866ed21146103c65780632afcf480146103ce5761032b565b8063179eb7fc11610309578063179eb7fc146103835780631fe9483f146103985780631fed13f2146103ab5761032b565b8063027dcbe6146103305780630985f7081461034e5780630b6bedec1461036e575b600080fd5b610338610629565b6040516103459190612f60565b60405180910390f35b61036161035c366004612276565b61062f565b6040516103459190612dc3565b6103766107d5565b6040516103459190612bec565b610396610391366004612463565b6107e4565b005b6103966103a6366004612445565b610845565b610338610894565b6103616103c13660046121da565b61089a565b6103616109d0565b6103616103dc366004612445565b6109de565b610338610d51565b6103fc6103f736600461217a565b610d57565b6040516103459190612cf7565b610396610417366004612445565b610df8565b610338610e27565b610338610e2d565b61037661043a36600461217a565b610e33565b610361610e7a565b61036161045536600461217a565b611518565b6103386116a1565b610396610470366004612493565b6116a7565b61048861048336600461217a565b611701565b60405161034596959493929190612f6e565b610338611738565b61033861173e565b610361611744565b61033861174d565b6103966104c8366004612445565b611753565b6103966104db3660046124e0565b611782565b6103966104ee366004612445565b6117c3565b6103966105013660046121a0565b6117f2565b610376611873565b610338611882565b610396610524366004612409565b611888565b610396610537366004612409565b6118c5565b61033861054a36600461217a565b611909565b6103386119ee565b610396610565366004612445565b6119f4565b610338611a23565b61057a611a29565b6040516103459190612dd1565b610338611a38565b610338611a3e565b610338611a44565b610338611a4a565b6103966105b53660046121a0565b611a50565b610376611b77565b6103966105d036600461217a565b611b86565b6103966105e3366004612463565b611bf8565b610338611c59565b6103966105fe3660046121a0565b611c5f565b6103616106113660046122d5565b611d33565b61037661062436600461217a565b611ef7565b60175481565b6001546000906001600160a01b031633146106655760405162461bcd60e51b815260040161065c90612e10565b60405180910390fd5b81518351146106865760405162461bcd60e51b815260040161065c90612e60565b60005b8251811015610791576000600360008684815181106106a457fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050806000018483815181106106de57fe5b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b039092169190911790558451600490829087908690811061072d57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020905085838151811061076357fe5b602090810291909101015181546001600160a01b0319166001600160a01b0390911617905550600101610689565b507f9dbeb05a6254e135c9083ae0658fc2bb9b12fa2507454a145f9a3e032a65979b83836040516107c3929190612d08565b60405180910390a15060015b92915050565b6007546001600160a01b031681565b6001546001600160a01b0316331461080e5760405162461bcd60e51b815260040161065c90612e10565b60008211801561081e5750600081115b61083a5760405162461bcd60e51b815260040161065c90612eb0565b600a91909155600b55565b6001546001600160a01b0316331461086f5760405162461bcd60e51b815260040161065c90612e10565b6000811161088f5760405162461bcd60e51b815260040161065c90612ec0565b600d55565b600c5481565b6001546000906001600160a01b031633146108c75760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0388166108ed5760405162461bcd60e51b815260040161065c90612f30565b6040518060c0016040528088815260200187815260200186815260200185815260200184815260200183815250600260008a6001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501559050507f1d258f449ca00d720f3d00f10cd38a6e2fbae3ff5b1b8b206acb2272c9640275888888888888886040516109b99796959493929190612c8f565b60405180910390a15060015b979650505050505050565b601854610100900460ff1681565b60185460009060ff161515600114610a085760405162461bcd60e51b815260040161065c90612ea0565b60008211610a285760405162461bcd60e51b815260040161065c90612df0565b6000610a506064610a44600c5486611f1290919063ffffffff16565b9063ffffffff611f5316565b6000546005546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd92610a8b9233929116908690600401612c15565b602060405180830381600087803b158015610aa557600080fd5b505af1158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610add9190810190612427565b506000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610b14903390309086890390600401612c15565b602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b669190810190612427565b50336000908152600260205260408120600381015490919015610bc157610bb562015180610a448460050154610ba9866003015442611f9590919063ffffffff16565b9063ffffffff611f1216565b60028301805490910190555b8154610bd1576010805460010190555b601654610be590869063ffffffff611f1216565b82540180835542600384015560028301546001840154601454600093610c3e9392610c329290918391610c2690606490610a4490849063ffffffff611f1216565b9063ffffffff611fd716565b9063ffffffff611f9516565b9050600d54811015610c5457600a549150610c5a565b600b5491505b42620151808302016004840155610c77818363ffffffff611f5316565b6005840155601654610c9090879063ffffffff611f1216565b600f80549091019055601180548701905533600090815260046020526040902080546001600160a01b031615610d0557610ce06064610a44601554610ba96016548c611f1290919063ffffffff16565b81546001600160a01b0316600090815260026020819052604090912001805490910190555b7f3eb0f553d9ec38e0ff3a72db450f9d6f5e372e70e824a3195a09ead1c01fb8763388601654604051610d3a93929190612c58565b60405180910390a16001955050505050505b919050565b600b5481565b60606001600160a01b038216610d7f5760405162461bcd60e51b815260040161065c90612e90565b6001600160a01b0382166000908152600360209081526040918290208054835181840281018401909452808452909291839190830182828015610deb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dcd575b5050505050915050919050565b6001546001600160a01b03163314610e225760405162461bcd60e51b815260040161065c90612e10565b601455565b60085481565b60105481565b60006001600160a01b038216610e5b5760405162461bcd60e51b815260040161065c90612f00565b506001600160a01b039081166000908152600460205260409020541690565b60185460009060ff610100909104161515600114610eaa5760405162461bcd60e51b815260040161065c90612f50565b336000908152600260205260409020600581015415801590610ed0575060008160030154115b610eec5760405162461bcd60e51b815260040161065c90612ee0565b60028101548154601454600091610f1591610c2690606490610a4490849063ffffffff611f1216565b6001840154909150808211610f3c5760405162461bcd60e51b815260040161065c90612f20565b6000610f6462015180610a448760050154610ba9896003015442611f9590919063ffffffff16565b4260038701556000600287015593840193905083610f945760405162461bcd60e51b815260040161065c90612e80565b600185015460009081908190870186811061120b57601754610fc090610a44898963ffffffff611f9516565b9350868960010181905550610fe56064610a4460065487611f1290919063ffffffff16565b92506110016064610a4460085487611f1290919063ffffffff16565b895460018b0154919350600091111561103a575060085460065460095403036110356064610a44878463ffffffff611f1216565b840193505b83156110ca5760005460055460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611076929116908890600401612c81565b602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110c89190810190612427565b505b821561115a5760005460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611106929116908790600401612c81565b602060405180830381600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111589190810190612427565b505b6000546001600160a01b031663a9059cbb3361118086610c328a8a63ffffffff611f9516565b6040518363ffffffff1660e01b815260040161119d929190612c3d565b602060405180830381600087803b1580156111b757600080fd5b505af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ef9190810190612427565b5050600060058a0181905560038a0181905560048a01556114a6565b60175461121f90899063ffffffff611f5316565b60018a0180548a01905560065490945061124790606490610a4490879063ffffffff611f1216565b92506112636064610a4460085487611f1290919063ffffffff16565b895460018b0154919350600091111561129c575060085460065460095403036112976064610a44878463ffffffff611f1216565b840193505b831561132c5760005460055460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926112d8929116908890600401612c81565b602060405180830381600087803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061132a9190810190612427565b505b82156113bc5760005460075460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92611368929116908790600401612c81565b602060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113ba9190810190612427565b505b6000546001600160a01b031663a9059cbb336113e286610c328a8a63ffffffff611f9516565b6040518363ffffffff1660e01b81526004016113ff929190612c3d565b602060405180830381600087803b15801561141957600080fd5b505af115801561142d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114519190810190612427565b506000611464898463ffffffff611f9516565b600d5490915060009082101561147d5750600a54611482565b50600b545b611492828263ffffffff611f5316565b60058d01556201518002420160048c015550505b60138054850190556017546114c290859063ffffffff611f1216565b6012805490910190556017546040517f4343fc0436cb075772fdb7e28d5380cc610e5334add5537e2d2b2946b8e2836f916115009133918891612c58565b60405180910390a16001995050505050505050505090565b60006001600160a01b0382166115405760405162461bcd60e51b815260040161065c90612f00565b6001600160a01b03808316600090815260046020526040902080549091161561157b5760405162461bcd60e51b815260040161065c90612f40565b336000908152600260208190526040909120600e5491810154600182015482546014549394936115c79392610c32929091839190610c2690606490610a4490849063ffffffff611f1216565b10156115e55760405162461bcd60e51b815260040161065c90612e00565b6001600160a01b038416600090815260026020526040902080541561161c5760405162461bcd60e51b815260040161065c90612e70565b33600081815260036020908152604080832080546001810182558185528385200180546001600160a01b038c166001600160a01b0319918216811790925590855260049093529281902080549092168417825551919290917f119ef486614f5f4e5c2be21ea6eaf1a60375d930dbc6fa4cba7989bcfbe0ec8591610d3a918a90612bfa565b60145481565b6001546001600160a01b031633146116d15760405162461bcd60e51b815260040161065c90612e10565b8183018110156116f35760405162461bcd60e51b815260040161065c90612ef0565b600692909255600855600955565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290919086565b600e5481565b60115481565b60185460ff1681565b600d5481565b6001546001600160a01b0316331461177d5760405162461bcd60e51b815260040161065c90612e10565b601555565b6001546001600160a01b031633146117ac5760405162461bcd60e51b815260040161065c90612e10565b600f94909455601092909255601155601255601355565b6001546001600160a01b031633146117ed5760405162461bcd60e51b815260040161065c90612e10565b600c55565b6001546001600160a01b0316331461181c5760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0381166118425760405162461bcd60e51b815260040161065c90612f00565b6001600160a01b03908116600090815260046020526040902080546001600160a01b03191692909116919091179055565b6001546001600160a01b031681565b60095481565b6001546001600160a01b031633146118b25760405162461bcd60e51b815260040161065c90612e10565b6018805460ff1916911515919091179055565b6001546001600160a01b031633146118ef5760405162461bcd60e51b815260040161065c90612e10565b601880549115156101000261ff0019909216919091179055565b60006001600160a01b0382166119315760405162461bcd60e51b815260040161065c90612f30565b6001600160a01b03821660009081526002602052604090208054611959576000915050610d4c565b6002810154815460145460009161198291610c2690606490610a4490849063ffffffff611f1216565b600184015490915080821161199e576000945050505050610d4c565b60006119c662015180610a448760050154610ba9896003015442611f9590919063ffffffff16565b9050808401935082828501106119e3575090039250610d4c915050565b509195945050505050565b60125481565b6001546001600160a01b03163314611a1e5760405162461bcd60e51b815260040161065c90612e10565b600e55565b600a5481565b6000546001600160a01b031681565b60155481565b60165481565b600f5481565b60135481565b6001546001600160a01b03163314611a7a5760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b0382166000908152600360205260408120905b8154811015611b7157826001600160a01b0316828281548110611ab357fe5b6000918252602090912001546001600160a01b03161415611b6957815482906000198101908110611ae057fe5b9060005260206000200160009054906101000a90046001600160a01b0316828281548110611b0a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081805480611b4257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611b71565b600101611a94565b50505050565b6005546001600160a01b031681565b6001546001600160a01b03163314611bb05760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b038116611bd65760405162461bcd60e51b815260040161065c90612e20565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611c225760405162461bcd60e51b815260040161065c90612e10565b600082118015611c325750600081115b611c4e5760405162461bcd60e51b815260040161065c90612f10565b601691909155601755565b60065481565b6001546001600160a01b03163314611c895760405162461bcd60e51b815260040161065c90612e10565b6001600160a01b03821615801590611ca957506001600160a01b03811615155b611cc55760405162461bcd60e51b815260040161065c90612e30565b600580546001600160a01b038085166001600160a01b03199283161790925560078054928416929091169190911790556040517f9f4f5dce3c4d197b5d7496cb96e25f0a89809167195964b0daa3ef5fed63c00a90611d279084908490612c73565b60405180910390a15050565b6001546000906001600160a01b03163314611d605760405162461bcd60e51b815260040161065c90612e10565b86518851148015611d72575085518851145b8015611d7f575084518851145b8015611d8c575083518851145b8015611d99575082518851145b8015611da6575081518851145b611dc25760405162461bcd60e51b815260040161065c90612e40565b60005b8851811015611ebb576000600260008b8481518110611de057fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050888281518110611e1657fe5b60200260200101518160000181905550878281518110611e3257fe5b60200260200101518160010181905550868281518110611e4e57fe5b60200260200101518160020181905550858281518110611e6a57fe5b60200260200101518160030181905550848281518110611e8657fe5b60200260200101518160040181905550838281518110611ea257fe5b6020908102919091010151600590910155600101611dc5565b507ff4a5e17d0336eb9b912ed5de3d810d3957d3b48b09452a5ccd34885369167807888888888888886040516109b99796959493929190612d2d565b6004602052600090815260409020546001600160a01b031681565b600082611f21575060006107cf565b82820282848281611f2e57fe5b0414611f4c5760405162461bcd60e51b815260040161065c90612ed0565b9392505050565b6000611f4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ffc565b6000611f4c83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250612033565b600082820183811015611f4c5760405162461bcd60e51b815260040161065c90612e50565b6000818361201d5760405162461bcd60e51b815260040161065c9190612ddf565b50600083858161202957fe5b0495945050505050565b600081848411156120575760405162461bcd60e51b815260040161065c9190612ddf565b505050900390565b80356107cf8161307f565b600082601f83011261207b57600080fd5b813561208e61208982612fe4565b612fbd565b915081818352602084019350602081019050838560208402820111156120b357600080fd5b60005b838110156120df57816120c9888261205f565b84525060209283019291909101906001016120b6565b5050505092915050565b600082601f8301126120fa57600080fd5b813561210861208982612fe4565b9150818183526020840193506020810190508385602084028201111561212d57600080fd5b60005b838110156120df5781612143888261216f565b8452506020928301929190910190600101612130565b80356107cf81613096565b80516107cf81613096565b80356107cf8161309f565b60006020828403121561218c57600080fd5b6000612198848461205f565b949350505050565b600080604083850312156121b357600080fd5b60006121bf858561205f565b92505060206121d08582860161205f565b9150509250929050565b600080600080600080600060e0888a0312156121f557600080fd5b60006122018a8a61205f565b97505060206122128a828b0161216f565b96505060406122238a828b0161216f565b95505060606122348a828b0161216f565b94505060806122458a828b0161216f565b93505060a06122568a828b0161216f565b92505060c06122678a828b0161216f565b91505092959891949750929550565b6000806040838503121561228957600080fd5b823567ffffffffffffffff8111156122a057600080fd5b6122ac8582860161206a565b925050602083013567ffffffffffffffff8111156122c957600080fd5b6121d08582860161206a565b600080600080600080600060e0888a0312156122f057600080fd5b873567ffffffffffffffff81111561230757600080fd5b6123138a828b0161206a565b975050602088013567ffffffffffffffff81111561233057600080fd5b61233c8a828b016120e9565b965050604088013567ffffffffffffffff81111561235957600080fd5b6123658a828b016120e9565b955050606088013567ffffffffffffffff81111561238257600080fd5b61238e8a828b016120e9565b945050608088013567ffffffffffffffff8111156123ab57600080fd5b6123b78a828b016120e9565b93505060a088013567ffffffffffffffff8111156123d457600080fd5b6123e08a828b016120e9565b92505060c088013567ffffffffffffffff8111156123fd57600080fd5b6122678a828b016120e9565b60006020828403121561241b57600080fd5b60006121988484612159565b60006020828403121561243957600080fd5b60006121988484612164565b60006020828403121561245757600080fd5b6000612198848461216f565b6000806040838503121561247657600080fd5b6000612482858561216f565b92505060206121d08582860161216f565b6000806000606084860312156124a857600080fd5b60006124b4868661216f565b93505060206124c58682870161216f565b92505060406124d68682870161216f565b9150509250925092565b600080600080600060a086880312156124f857600080fd5b6000612504888861216f565b95505060206125158882890161216f565b94505060406125268882890161216f565b93505060606125378882890161216f565b92505060806125488882890161216f565b9150509295509295909350565b60006125618383612584565b505060200190565b60006125618383612be3565b61257e81613037565b82525050565b61257e81613018565b60006125988261300b565b6125a2818561300f565b93506125ad83613005565b8060005b838110156125db5781516125c58882612555565b97506125d083613005565b9250506001016125b1565b509495945050505050565b60006125f18261300b565b6125fb818561300f565b935061260683613005565b8060005b838110156125db57815161261e8882612569565b975061262983613005565b92505060010161260a565b61257e81613023565b61257e8161303e565b60006126518261300b565b61265b818561300f565b935061266b818560208601613049565b61267481613075565b9093019392505050565b600061268b600f8361300f565b6e24b73b30b634b21030b6b7bab73a1760891b815260200192915050565b60006126b660278361300f565b7f526566657272657220686173206e6f20726566657272616c207175616c69666981526631b0ba34b7b71760c91b602082015260400192915050565b60006126ff60228361300f565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f815261371760f11b602082015260400192915050565b600061274360188361300f565b7f4e6577206f776e65722063616e6e6f74206265203078302e0000000000000000815260200192915050565b600061277c600f8361300f565b6e496e76616c6964206164647265737360881b815260200192915050565b60006127a760298361300f565b7f546865206c656e677468206f662074686520617272617973206d757374206265815268207468652073616d6560b81b602082015260400192915050565b60006127f2601b8361300f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061282b602d8361300f565b7f546865206c656e677468206f66207468652074776f20617272617973206d757381526c74206265207468652073616d6560981b602082015260400192915050565b600061287a60188361300f565b7f54686973206163636f756e7420686164207374616b6564210000000000000000815260200192915050565b60006128b360158361300f565b7f4e6f20696e74657265737420746f20636c61696d2e0000000000000000000000815260200192915050565b60006128ec601e8361300f565b7f7265666572726572416464726573732063616e6e6f74206265203078302e0000815260200192915050565b600061292560128361300f565b714e6f20696e7665737420616c6c6f7765642160701b815260200192915050565b6000612953601d8361300f565b7f646179732073686f756c642062652067726561746572207468616e2030000000815260200192915050565b600061298c601e8361300f565b7f6c6576656c2073686f756c642062652067726561746572207468616e20300000815260200192915050565b60006129c560218361300f565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612a0860118361300f565b702737903637b1b5b2b21030b6b7bab73a1760791b815260200192915050565b6000612a35603b8361300f565b7f5f66656532206d7573742062652067726561746572207468616e20746865207381527f756d206f66207468652066697273742074776f206e756d626572730000000000602082015260400192915050565b6000612a94601d8361300f565b7f696e7669746565416464726573732063616e6e6f74206265203078302e000000815260200192915050565b6000612acd60168361300f565b7f5072696365206d75737420626520706f73697469766500000000000000000000815260200192915050565b6000612b0660298361300f565b7f416c6c20696e766573746d656e74732068617665206265656e2066756c6c79208152683bb4ba34323930bbb760b91b602082015260400192915050565b6000612b5160148361300f565b7f5f757365722063616e6e6f74206265203078302e000000000000000000000000815260200192915050565b6000612b8a601e8361300f565b7f54686973206163636f756e7420686164206265656e20696e7669746564210000815260200192915050565b6000612bc360118361300f565b704e6f20636c61696d20616c6c6f7765642160781b815260200192915050565b61257e81613034565b602081016107cf8284612584565b60408101612c088285612575565b611f4c6020830184612584565b60608101612c238286612575565b612c306020830185612584565b6121986040830184612be3565b60408101612c4b8285612575565b611f4c6020830184612be3565b60608101612c668286612575565b612c306020830185612be3565b60408101612c088285612584565b60408101612c4b8285612584565b60e08101612c9d828a612584565b612caa6020830189612be3565b612cb76040830188612be3565b612cc46060830187612be3565b612cd16080830186612be3565b612cde60a0830185612be3565b612ceb60c0830184612be3565b98975050505050505050565b60208082528101611f4c818461258d565b60408082528101612d19818561258d565b90508181036020830152612198818461258d565b60e08082528101612d3e818a61258d565b90508181036020830152612d5281896125e6565b90508181036040830152612d6681886125e6565b90508181036060830152612d7a81876125e6565b90508181036080830152612d8e81866125e6565b905081810360a0830152612da281856125e6565b905081810360c0830152612db681846125e6565b9998505050505050505050565b602081016107cf8284612634565b602081016107cf828461263d565b60208082528101611f4c8184612646565b602080825281016107cf8161267e565b602080825281016107cf816126a9565b602080825281016107cf816126f2565b602080825281016107cf81612736565b602080825281016107cf8161276f565b602080825281016107cf8161279a565b602080825281016107cf816127e5565b602080825281016107cf8161281e565b602080825281016107cf8161286d565b602080825281016107cf816128a6565b602080825281016107cf816128df565b602080825281016107cf81612918565b602080825281016107cf81612946565b602080825281016107cf8161297f565b602080825281016107cf816129b8565b602080825281016107cf816129fb565b602080825281016107cf81612a28565b602080825281016107cf81612a87565b602080825281016107cf81612ac0565b602080825281016107cf81612af9565b602080825281016107cf81612b44565b602080825281016107cf81612b7d565b602080825281016107cf81612bb6565b602081016107cf8284612be3565b60c08101612f7c8289612be3565b612f896020830188612be3565b612f966040830187612be3565b612fa36060830186612be3565b612fb06080830185612be3565b6109c560a0830184612be3565b60405181810167ffffffffffffffff81118282101715612fdc57600080fd5b604052919050565b600067ffffffffffffffff821115612ffb57600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b60006107cf82613028565b151590565b6001600160a01b031690565b90565b60006107cf825b60006107cf82613018565b60005b8381101561306457818101518382015260200161304c565b83811115611b715750506000910152565b601f01601f191690565b61308881613018565b811461309357600080fd5b50565b61308881613023565b6130888161303456fea365627a7a723158200f6631b5a51ec713c0bb2be84c50c5df39084d10d1ae99a2eef778c6312e75fe6c6578706572696d656e74616cf564736f6c63430005100040

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

00000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9

-----Decoded View---------------
Arg [0] : esgAddress (address): 0x20cD2E7Ec8F5d8b337fe46a4F565Ccef1561b9a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000020cd2e7ec8f5d8b337fe46a4f565ccef1561b9a9


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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