ETH Price: $3,135.68 (+1.95%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0xf7160a4ce56e3ecebc452a5a54f85ebe987f2442a1d5c838143df6df0567432c Approve(pending)2025-01-29 1:11:0822 hrs ago1738113068IN
0xdd3aa289...e0aEDF82E
0 ETH(Pending)(Pending)
0x14badfc24ddd25261081e95cfa8c96dbba6bb3f74541ab8d5f7365ff80795f6d Approve(pending)2025-01-29 1:11:0822 hrs ago1738113068IN
0xdd3aa289...e0aEDF82E
0 ETH(Pending)(Pending)
Approve217268152025-01-29 1:11:1122 hrs ago1738113071IN
0xdd3aa289...e0aEDF82E
0 ETH0.000093533.86569943
Approve216617972025-01-19 23:24:359 days ago1737329075IN
0xdd3aa289...e0aEDF82E
0 ETH0.00308879127.65733813
Approve211581692024-11-10 15:28:4780 days ago1731252527IN
0xdd3aa289...e0aEDF82E
0 ETH0.0006567227.14180885
Transfer175886482023-06-30 0:52:35579 days ago1688086355IN
0xdd3aa289...e0aEDF82E
0 ETH0.0005363219.70473158
Transfer155833642022-09-21 17:55:11861 days ago1663782911IN
0xdd3aa289...e0aEDF82E
0 ETH0.0009919321.06277539
Transfer134648822021-10-22 2:42:091195 days ago1634870529IN
0xdd3aa289...e0aEDF82E
0 ETH0.002417151.32507677
Transfer133618762021-10-05 23:10:011212 days ago1633475401IN
0xdd3aa289...e0aEDF82E
0 ETH0.00417528120
Transfer133563022021-10-05 2:15:421212 days ago1633400142IN
0xdd3aa289...e0aEDF82E
0 ETH0.00480322138
Approve133514652021-10-04 8:16:431213 days ago1633335403IN
0xdd3aa289...e0aEDF82E
0 ETH0.0035567877
Transfer133488602021-10-03 22:14:581214 days ago1633299298IN
0xdd3aa289...e0aEDF82E
0 ETH0.0028202581
Transfer133488302021-10-03 22:08:531214 days ago1633298933IN
0xdd3aa289...e0aEDF82E
0 ETH0.00441883127
Approve133461962021-10-03 12:24:391214 days ago1633263879IN
0xdd3aa289...e0aEDF82E
0 ETH0.0020541244.4692526
Transfer133392852021-10-02 10:19:321215 days ago1633169972IN
0xdd3aa289...e0aEDF82E
0 ETH0.0021231661
Transfer133247192021-09-30 3:44:231217 days ago1632973463IN
0xdd3aa289...e0aEDF82E
0 ETH0.00507657145.8535377
Transfer133245142021-09-30 2:52:261217 days ago1632970346IN
0xdd3aa289...e0aEDF82E
0 ETH0.00485853139.5889279
Transfer133209192021-09-29 13:26:131218 days ago1632921973IN
0xdd3aa289...e0aEDF82E
0 ETH0.0027135477.9618978
Transfer133207252021-09-29 12:41:371218 days ago1632919297IN
0xdd3aa289...e0aEDF82E
0 ETH0.0019127854.9556961
Transfer133199842021-09-29 9:57:301218 days ago1632909450IN
0xdd3aa289...e0aEDF82E
0 ETH0.0022967465.9871308
Transfer133199672021-09-29 9:52:331218 days ago1632909153IN
0xdd3aa289...e0aEDF82E
0 ETH0.0019832557
Transfer133191672021-09-29 6:43:581218 days ago1632897838IN
0xdd3aa289...e0aEDF82E
0 ETH0.0039448576
Transfer133178462021-09-29 1:48:131218 days ago1632880093IN
0xdd3aa289...e0aEDF82E
0 ETH0.002366868
Transfer133175682021-09-29 0:48:441218 days ago1632876524IN
0xdd3aa289...e0aEDF82E
0 ETH0.0027844880
Transfer133169872021-09-28 22:39:461219 days ago1632868786IN
0xdd3aa289...e0aEDF82E
0 ETH0.0044009184.8059201
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DFKII

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-29
*/

pragma solidity ^0.5.16;

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
          return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

contract LockIdGen {

    uint256 public requestCount;

    constructor() public {
        requestCount = 0;
    }

    function generateLockId() internal returns (bytes32 lockId) {
        return keccak256(abi.encodePacked(blockhash(block.number-1), address(this), ++requestCount));
    }
}
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * IMPORTANT: It is unsafe to assume that an address for which this
     * function returns false is an externally-owned account (EOA) and not a
     * contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

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

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

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

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

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

    function safeApprove(StandardToken token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(StandardToken token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(StandardToken token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(ERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract ManagerUpgradeable is LockIdGen {

    struct ChangeRequest {
        address proposedNew;
        address proposedClear;
    }

    // address public custodian;
    mapping (address => address) public managers;

    mapping (bytes32 => ChangeRequest) public changeReqs;

    uint256     public    mancount  ;

    // CONSTRUCTOR
    constructor(
         address  [] memory _mans
    )
      LockIdGen()
      public
    {
        uint256 numMans = _mans.length;
        for (uint256 i = 0; i < numMans; i++) {
          address pto = _mans[i];
          require(pto != address(0));
          managers[pto] = pto;
        }
        mancount = 0;
    }



    modifier onlyManager {
        require(msg.sender == managers[msg.sender],"onlyManger must use");
        _;
    }

    //replace managers
    function replaceManager(address _new,address _clear) public onlyManager {
        require( _clear != address(0) || _new != address(0) );

        require( _clear == address(0) || managers[_clear] == _clear);
        
        if(_new != address(0))
        {
            managers[_new] = _new;
            mancount = mancount + 1;
        }

        if(_clear != address(0))
        {
            delete managers[_clear];
            mancount = mancount - 1;
        }

    }
    
    // for manager change
    function requestChange(address _new,address _clear) public onlyManager returns (bytes32 lockId) {
        require( _clear != address(0) || _new != address(0) );

        require( _clear == address(0) || managers[_clear] == _clear);

        lockId = generateLockId();

        changeReqs[lockId] = ChangeRequest({
            proposedNew: _new,
            proposedClear: _clear
        });

        emit ChangeRequested(lockId, msg.sender, _new,_clear);
    }

    event ChangeRequested(
        bytes32 _lockId,
        address _msgSender,
        address _new,
        address _clear
    );

   function confirmChange(bytes32 _lockId) public onlyManager {
        ChangeRequest storage changeRequest = changeReqs[_lockId];
        require( changeRequest.proposedNew != address(0) || changeRequest.proposedClear != address(0));

        if(changeRequest.proposedNew != address(0))
        {
            managers[changeRequest.proposedNew] = changeRequest.proposedNew;
            mancount = mancount + 1;
        }

        if(changeRequest.proposedClear != address(0))
        {
            delete managers[changeRequest.proposedClear];
            mancount = mancount - 1;
        }

        delete changeReqs[_lockId];

        emit ChangeConfirmed(_lockId, changeRequest.proposedNew,changeRequest.proposedClear);
    }
    event ChangeConfirmed(bytes32 _lockId, address _newCustodian, address _clearCustodian);

    function sweepChange(bytes32 _lockId) public onlyManager {
        ChangeRequest storage changeRequest=changeReqs[_lockId];
        require((changeRequest.proposedNew != address(0) || changeRequest.proposedClear != address(0) ));
        delete changeReqs[_lockId];
        emit ChangeSweep(_lockId, msg.sender);
    }
    event ChangeSweep(bytes32 _lockId, address _sender);
    
    function sweeptoken(address tokenaddr,uint256 amount) public onlyManager{
        TransferHelper.safeTransfer(tokenaddr,msg.sender,amount);
    }
    function sweepeth(uint256 amount) public onlyManager{
        msg.sender.transfer(amount);
    }
}

contract ERC20Basic {
    // events
    event Transfer(address indexed from, address indexed to, uint256 value);

    // public functions
    function totalSupply() public view returns (uint256);
    function balanceOf(address addr) public view returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
}

contract ERC20 is ERC20Basic {
    // events
    event Approval(address indexed owner, address indexed agent, uint256 value);

    // public functions
    function allowance(address owner, address agent) public view returns (uint256);
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address agent, uint256 value) public returns (bool);

}


contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  // public variables
  string public name;
  string public symbol;
  uint8 public decimals = 18;

  // internal variables
  uint256 _totalSupply;
  mapping(address => uint256) _balances;

  // events

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

  function balanceOf(address addr) public view returns (uint256 balance) {
    return _balances[addr];
  }

  function transfer(address to, uint256 value) public returns (bool) {
    require(to != address(0));
    require(value <= _balances[msg.sender]);

    _balances[msg.sender] = _balances[msg.sender].sub(value);
    _balances[to] = _balances[to].add(value);
    emit Transfer(msg.sender, to, value);
    return true;
  }

  // internal functions

}

contract StandardToken is ERC20, BasicToken {
  // public variables

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

  // events

  // public functions
  function transferFrom(address from, address to, uint256 value) public returns (bool) {
    require(to != address(0));
    require(value <= _balances[from],"value lt from");
    require(value <= _allowances[from][msg.sender],"value lt _allowances from ");

    _balances[from] = _balances[from].sub(value);
    _balances[to] = _balances[to].add(value);
    _allowances[from][msg.sender] = _allowances[from][msg.sender].sub(value);
    emit Transfer(from, to, value);
    return true;
  }

  function approve(address agent, uint256 value) public returns (bool) {
    _allowances[msg.sender][agent] = value;
    emit Approval(msg.sender, agent, value);
    return true;
  }

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

  function increaseApproval(address agent, uint value) public returns (bool) {
    _allowances[msg.sender][agent] = _allowances[msg.sender][agent].add(value);
    emit Approval(msg.sender, agent, _allowances[msg.sender][agent]);
    return true;
  }

  function decreaseApproval(address agent, uint value) public returns (bool) {
    uint allowanceValue = _allowances[msg.sender][agent];
    if (value > allowanceValue) {
      _allowances[msg.sender][agent] = 0;
    } else {
      _allowances[msg.sender][agent] = allowanceValue.sub(value);
    }
    emit Approval(msg.sender, agent, _allowances[msg.sender][agent]);
    return true;
  }
  // internal functions
}



contract MinableToken is StandardToken,ManagerUpgradeable{
    
    
    uint256 maxMined =0;
    constructor(uint256 _maxMined,address [] memory _mans) public ManagerUpgradeable(_mans){
        maxMined = _maxMined;
    }
    
    function _mint(address to, uint256 value) public onlyManager  {
        require(maxMined==0||_totalSupply.add(value)<=maxMined,"_mint value invalid");
        _totalSupply = _totalSupply.add(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) public {
        _balances[from] = _balances[from].sub(value);
        _totalSupply = _totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }


}

contract DFKII is MinableToken {
  // public variables
  string public name = "Defiking.finance Version 2.0";
  string public symbol = "DFKII";
  uint8 public decimals = 18;

  // internal variables
 
  // events

  // public functions
  constructor(address [] memory _mans,uint256 _maxMined) public MinableToken(_maxMined,_mans) {
    //init _totalSupply
    // _totalSupply = 1000*10000 * (10 ** uint256(decimals));
    
    // _balances[msg.sender] = _totalSupply;
    // emit Transfer(address(0x0), msg.sender, _totalSupply);
  }

  // internal functions
}

contract USDT is MinableToken {
  // public variables
  string public name = "Defiking.finance Version 2.0";
  string public symbol = "USDT";
  uint8 public decimals = 6;

  // internal variables
 
  // events

  // public functions
  constructor(address [] memory _mans,uint256 _maxMined) public MinableToken(_maxMined,_mans) {
    //init _totalSupply
    // _totalSupply = 1000*10000 * (10 ** uint256(decimals));
    
    // _balances[msg.sender] = _totalSupply;
    // emit Transfer(address(0x0), msg.sender, _totalSupply);
  }

  // internal functions
}


contract DFK is ManagerUpgradeable {
            
    //liquidity +
    function stakingDeposit(uint256 value) public payable returns (bool);

    //profit +
    function profit2Staking(uint256 value)public  returns (bool success);
    
    
    function withdrawProfit(address to)public  returns (bool success);
    
    
    function withdrawStaking(address to,uint256 value)public  returns (bool success);
    
    
    function withdrawAll(address to)public  returns (bool success);

    
    
    function totalMiners() public view returns (uint256);

    function totalStaking() public view returns (uint256);

    
    function poolBalance() public view returns (uint256);

    
    function minedBalance() public view returns (uint256);

    
    function stakingBalance(address miner) public view returns (uint256);


    function profitBalance(address miner) public view returns (uint256);

    
    
    function pauseStaking()public  returns (bool success);
    
    
    function resumeStaking()public  returns (bool success);

}

contract DFKImplement is DFK {

    using SafeMath for uint256;
    using SafeERC20 for StandardToken;

    int public status; 

    struct StakingLog{
        uint256   staking_time;
        uint256   profit_time;
        uint256   staking_value;
        uint256   unstaking_value; 
    }
    mapping(address => StakingLog) public stakings;

    uint256  public cleanup_time;

    uint256  public profit_period;

    uint256  public period_bonus; 

    mapping(address => uint256) public balanceProfit;
    mapping(address => uint256) public balanceStaking;

    StandardToken    public     dfkToken;

    uint256 public  _totalMiners;
    uint256 public  _totalStaking; 
    uint256 public  totalProfit;

    uint256 public  minePoolBalance; 

    modifier onStaking {
        require(status == 1,"please start minner");
        _;
    }
    event ProfitLog(
        address indexed from,
        uint256 profit_time, 
        uint256 staking_value,
        uint256 unstaking_value,
        uint256 profit_times, 
        uint256 profit
    );

    constructor(address _dfkToken,int decimals,address  [] memory _mans) public ManagerUpgradeable(_mans){
        status = 0;
        cleanup_time = now;
        profit_period = 24*3600; 
        period_bonus = 100000*(10 ** uint256(decimals));
        cleanup_time = now;
        dfkToken = StandardToken(_dfkToken);
    }

     
    function addMinePool(uint256 stakevalue) public onStaking payable returns (uint256){
        require(stakevalue>0);

        // user must call prove first.
        dfkToken.safeTransferFrom(msg.sender,address(this),stakevalue);

        minePoolBalance = minePoolBalance.add(stakevalue);

        return minePoolBalance;
    }


      
    function stakingDeposit(uint256 stakevalue) public onStaking payable returns (bool){
        require(stakevalue>0,"stakevalue is gt zero");

        // user must call prove first.
        dfkToken.transferFrom(msg.sender,address(this),stakevalue);

        _totalStaking = _totalStaking.add(stakevalue);
         
        return addMinerStaking(msg.sender,stakevalue);
    }


    function addMinerStaking(address miner,uint256 stakevalue) internal  returns (bool){
        balanceStaking[miner] = balanceStaking[miner].add(stakevalue);
        
        StakingLog memory slog=stakings[miner];

        if(slog.profit_time < cleanup_time){ 
            stakings[miner] = StakingLog({
                staking_time:now,
                profit_time:now,
                staking_value:0,
                unstaking_value:stakevalue
            });
            _totalMiners = _totalMiners.add(1);
        }else if(now.sub(slog.profit_time) >= profit_period){ 
            uint256   profit_times = now.sub(slog.profit_time).div(profit_period); 
            
            stakings[miner] = StakingLog({
                staking_time:now,
                profit_time:now,
                staking_value:slog.staking_value.add(slog.unstaking_value),
                unstaking_value:stakevalue
            });
            
            
            uint256   profit =  period_bonus.mul(stakings[miner].staking_value).mul(profit_times).div(_totalStaking);
            emit ProfitLog(miner,stakings[miner].profit_time,stakings[miner].staking_value,stakings[miner].unstaking_value,profit_times,profit);
            require(minePoolBalance>=profit,"minePoolBalance lt profit");
            minePoolBalance = minePoolBalance.sub(profit);

             
            balanceProfit[miner]=balanceProfit[miner].add(profit);
            totalProfit = totalProfit.add(profit);

        }else { 
            stakings[miner] = StakingLog({
                staking_time:now,
                profit_time:slog.profit_time,
                staking_value:slog.staking_value,
                unstaking_value:slog.unstaking_value.add(stakevalue)
            });
        }
        return true;
    }


     
    function profit2Staking(uint256 value)public onStaking returns (bool success){
        
        require(balanceProfit[msg.sender]>=value);
        balanceProfit[msg.sender] = balanceProfit[msg.sender].sub(value);
        return addMinerStaking(msg.sender,value);

    }

     
    function withdrawProfit(address to)public  returns (bool success){
        
        require(to != address(0));

        addMinerStaking(msg.sender,0);

        uint256 profit = balanceProfit[msg.sender];
        balanceProfit[msg.sender] = 0;

        require(dfkToken.transfer(to,profit));

        return true;

    }

     
    function withdrawStaking(address to,uint256 value)public  returns (bool success){
        require(value>0);
        require(to != address(0));
        require(balanceStaking[msg.sender]>=value);
        require(_totalStaking>=value);
        
        _totalStaking=_totalStaking.sub(value);
        
        balanceStaking[msg.sender] = balanceStaking[msg.sender].sub(value);
        StakingLog memory slog=stakings[msg.sender];
        
         
        stakings[msg.sender] = StakingLog({
            staking_time:now,
            profit_time:slog.profit_time,
            staking_value:0,
            unstaking_value:balanceStaking[msg.sender]
        });
        
        require(dfkToken.transfer(to,value));
        
        return true;
    }

      
    function withdrawAll(address to)public  returns (bool success){
        require(to != address(0));
        
        addMinerStaking(msg.sender,0);
        
        _totalStaking=_totalStaking.sub(balanceStaking[msg.sender]);
        
        uint256 total=balanceStaking[msg.sender].add(balanceProfit[msg.sender]);

        balanceProfit[msg.sender]=0;
        balanceStaking[msg.sender] = 0;
         
        stakings[msg.sender] = StakingLog({
            staking_time:0,
            profit_time:0,
            staking_value:0,
            unstaking_value:0
        });
        // _totalMiners=_totalMiners.sub(1);
        require(dfkToken.transfer(to,total));
        
        return true;
    }
    
    
    function totalMiners() public view returns (uint256){
        return _totalMiners;
    }

     
    function totalStaking() public view returns (uint256){
        return _totalStaking;

    }
     
    function poolBalance() public view returns (uint256){
        return minePoolBalance;
    }

     
    function minedBalance() public view returns (uint256){
        return totalProfit;
    }

     
    function stakingBalance(address miner) public view returns (uint256){
        return balanceStaking[miner];
    }


     
    function profitBalance(address miner) public view returns (uint256){
        return balanceProfit[miner];
    }

     
    function pauseStaking()public onlyManager  returns (bool ){
        status = 0;
    }
    
     
    function resumeStaking()public onlyManager returns (bool ){
       status = 1;
    }
}


contract DFKImplHelper{
    
    using SafeMath for uint256;
    
    DFKImplement public dfkImpl;
    
    constructor(address _dfkImpl) public{
        dfkImpl = DFKImplement(_dfkImpl);
    }
    
    function calcProfit(address miner) public view returns (uint256)
    {
        (,uint256   profit_time,uint256   staking_value,) = dfkImpl.stakings(miner);
        if(profit_time < dfkImpl.cleanup_time()){ 
            return 0;
        }else if(now.sub(profit_time) >= dfkImpl.profit_period()){ 
            uint256   profit_times = now.sub(profit_time).div(dfkImpl.profit_period()); 
            uint256   profit =  dfkImpl.period_bonus().mul(staking_value).mul(profit_times).div(dfkImpl._totalStaking());
            return profit;
        }else { 
            return 0;
        }
        
    }
    
    function calcProfitForFee(address miner,uint256 totalFee,uint256 lastFetchFee) public view returns (uint256)
    {
        (,uint256   profit_time,uint256   staking_value,) = dfkImpl.stakings(miner);
        
        if(staking_value == 0) {
            return 0;
        }
        if(profit_time < dfkImpl.cleanup_time()){ 
            return 0;
        }else { 
            // uint256   profit_times = now.sub(profit_time).div(dfkImpl.profit_period()); 
            uint256   profit =  totalFee.mul(staking_value).div(dfkImpl._totalStaking());
            if(profit>lastFetchFee){
                return profit.sub(lastFetchFee);
            }else{
                return 0;
            }
            
        
        }
        
    }
    
    
}


interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


contract DTradeLiquids is StandardToken {
  // public variables
  string public name = "Defiking.finance swap";
  string public symbol = "DTrade-V1 LP";
  uint8 public decimals = 18;

  // internal variables
 
  // events
  address owner;
  // public functions
  constructor() public {
    //init _totalSupply
     owner = msg.sender;
  }
  
  modifier onlyOwner {
        require(msg.sender == owner);
        _;
   }
    
  function _mint(address to, uint value) public onlyOwner  {
        _totalSupply = _totalSupply.add(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) public onlyOwner{
        _balances[from] = _balances[from].sub(value);
        _totalSupply = _totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }
  //function initialize(string _symbol) public{
//    symbol = _symbol;
 // }

  // internal functions
}


interface Refers {
    
    function rewards2Super(address user,uint256 totalReward) external returns (bool);
    
}


contract DFKExPair is ManagerUpgradeable{
    using SafeMath for uint256;
    using SafeERC20 for ERC20;
    
    
    address public token0;//usdt,basic token
    address public token1;//dfkii
    
    uint8   public price_decimal = 8;
    uint256 public cur_price  = 0;
    uint    public fee2Liquid = 22;
    uint    public fee2Refs = 3;
    uint    public fee2Burn = 5;
    uint256 public feeTotal=30;
    uint256 public PRICE_MOD=10000;//基数10000
    uint256 public FEE_MOD=10000;//基数10000
    uint256 public TOKEN_DECIMAL_DIF;//基数10000
    uint256 public reserve0 =0;//liquid.token0
    uint256 public reserve1 =0;//liquid.token1
    uint256 public decimal0;//liquid.token0
    uint256 public decimal1;//liquid.token1
    uint256 public fee = 0;
    uint256 public priceFlips = 1;//flips for each 10000 token1
    uint256 public totalProfitForLiquids =0; //fee.for liquid
    uint256 public totalProfitRefs =0; //fee.for dfk1 staking
    uint256 public totalProfitBurn =0; //fee.for burn
    uint256 public totalLiquids = 0;
    // mapping(address => uint256) public profits4DFK1;
    mapping(address => uint256[]) public liquidBonusLog;
    
    address public liquidToken;//
    
    Refers public  refers;
    address public isDfkiiRefs;
    
    uint256 public unlocked = 0;
    uint256 public miniLiquid = 100000*(10 **18);
    modifier onLiquity {
        require(unlocked == 1,"please wait liquity");
        _;
    }
    
    function pauseLiquity() public onlyManager  returns (bool ){
        unlocked = 0;
    }
    
     
    function resumeLiquity() public onlyManager returns (bool ){
       unlocked = 1;
    }
    
    constructor(address _token0,address _token1,address refs,uint256 initprice,address []memory _mans,uint256 _miniLiquid) public ManagerUpgradeable(_mans){
    //init _totalSupply
        token0 = _token0;
        token1 = _token1;
        if(_token0 == address(0x0)){
            decimal0 = 10 **18;
        } else {
            decimal0 = 10 **uint256(StandardToken(_token0).decimals());
        }

        if(_token1 == address(0x0)){
            decimal1 = 10 **18;
        } else {
            decimal1 = 10 **uint256(StandardToken(_token1).decimals());
        }        
        
        cur_price = initprice;
        TOKEN_DECIMAL_DIF = decimal1.div(decimal0);

        refers = Refers(refs);        
        bytes memory bytecode = type(DTradeLiquids).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        address _swapV2;
        assembly {
            _swapV2 := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }

        liquidToken = _swapV2;
		
		miniLiquid=_miniLiquid;
        
    } 
    
    function setPriceMod(uint256 price_mod) onlyManager public {
        require(price_mod>0);
        PRICE_MOD=price_mod;
    }
    

    //修正价格,手续费分配比例
    function fixPrice (uint256 price,uint _fee2Liquid,uint _fee2Refs,uint _fee2Burn,uint256 _priceFlips,uint256 _miniLiquid) onlyManager public {
        cur_price = price;
        fee2Liquid = _fee2Liquid;
        fee2Refs = _fee2Refs;
        fee2Burn = _fee2Burn;
        feeTotal = fee2Liquid+fee2Refs+fee2Burn;
        priceFlips = _priceFlips;
        miniLiquid=_miniLiquid;
    }
    
    
    //增加池子流动性
    function poolTokens(uint256 amount0,uint256 amount1) payable onlyManager public {
        if(token0 == address(0x0)){
            require(msg.value>=amount0);
        } else{
            TransferHelper.safeTransferFrom(token0,msg.sender,address(this),amount0);
        }        

        if(token1 == address(0x0)){
            require(msg.value>=amount1,"eth not enough");
        }else{
            TransferHelper.safeTransferFrom(token1,msg.sender,address(this),amount1);
        }   
         
        reserve0 = reserve0.add(amount0);
        reserve1 = reserve1.add(amount1);
    }
    event TotalEvent(
        uint256 totalProfitBurn,
        uint256 totalProfitRefs,
        uint256 totalProfitForLiquids,
        uint256 cur_price,
        uint256 liquidfee,
        uint256 liquidRefs,
        uint256 liquidburn
        );
    event TotalAmount(
        uint256 amount0,
        uint256 amount1,
        uint256 avg_price,
        uint256 fee
        );

    //swap token0 or token1
    function swap(uint256 amount0,uint256 amount1 ,bool toLiquids) payable public returns(uint256,uint256){
        
        require(cur_price>0);
        
        if(amount1>0 && amount0 == 0){//sell token get basic token
            //uint256 price_float = amount1.mul(priceFlips).div(decimal1).div(PRICE_MOD);
            
            // require (ERC20(token1).balanceOf(msg.sender) >= amount1 );

            uint256 price_float = amount1.mul(priceFlips).div(decimal1);
            require(price_float<cur_price,"too large amount");
            uint256 next_price = cur_price.sub(price_float);
            uint256 avg_price = cur_price.add(next_price).div(2);

            if(token1 == address(0x0)){
                require(msg.value>=amount1);
            }else{
                require (ERC20(token1).balanceOf(msg.sender) >= amount1 );
                TransferHelper.safeTransferFrom(token1,msg.sender,address(this),amount1);
            }  

            uint256 liquidfee = amount1.mul(fee2Liquid).div(FEE_MOD);
            uint256 liquidRefs = amount1.mul(fee2Refs).div(FEE_MOD);
            uint256 liquidburn = amount1.mul(fee2Burn).div(FEE_MOD);

            amount1 = amount1.sub(liquidfee).sub(liquidRefs).sub(liquidburn);
            
            if(address(refers)!=address(0x0)){
                TransferHelper.safeTransfer(token1,address(refers),liquidRefs);
                refers.rewards2Super(msg.sender,liquidRefs);
            }

            totalProfitBurn = totalProfitBurn.add(liquidburn);
            totalProfitRefs = totalProfitRefs.add(liquidRefs);
            totalProfitForLiquids = totalProfitForLiquids.add(liquidfee);
            
            amount0 = amount1.mul(avg_price).div(TOKEN_DECIMAL_DIF).div(PRICE_MOD);
            cur_price = next_price;
            if(toLiquids){
                reserve0 = reserve0.add(amount0);
                reserve1 = reserve1.add(amount1);
            }else{
                if(token0==address(0x0))
                {//eth
                   msg.sender.transfer(amount0);
                }else{
                    TransferHelper.safeTransfer(token0,msg.sender,amount0);
                }
                
            }
        }
        else if(amount0 > 0  && amount1 == 0){//using eth/usdt to buy token1
            if(token0 == address(0x0)) {
                require(msg.value >= amount0 );
            } else {
                require (ERC20(token0).balanceOf(msg.sender) >= amount0  );
                TransferHelper.safeTransferFrom(token0,msg.sender,address(this),amount0);
            }
                        
            amount1 = amount0.mul(PRICE_MOD).div(cur_price);

            uint256 price_float = amount1.mul(priceFlips).div(decimal0);
            uint256 next_price = cur_price.add(price_float);

            uint256 avg_price = cur_price.add(next_price).div(2);
            amount1 = amount0.mul(TOKEN_DECIMAL_DIF).mul(PRICE_MOD).div(avg_price);

            
            uint256 liquidfee = amount1.mul(fee2Liquid).div(FEE_MOD);
            uint256 liquidRefs = amount1.mul(fee2Refs).div(FEE_MOD);
            uint256 liquidburn = amount1.mul(fee2Burn).div(FEE_MOD);
            
            amount1 = amount1.sub(liquidfee).sub(liquidRefs).sub(liquidburn);
            
            if(address(refers)!=address(0x0)){
                TransferHelper.safeTransfer(token1,address(refers),liquidRefs);
                refers.rewards2Super(msg.sender,liquidRefs);
            }
            
            totalProfitBurn = totalProfitBurn.add(liquidburn);
            totalProfitRefs = totalProfitRefs.add(liquidRefs);
            totalProfitForLiquids = totalProfitForLiquids.add(liquidfee);
            cur_price = next_price;
            if(toLiquids){
                reserve0 = reserve0.add(amount0);
                reserve1 = reserve1.add(amount1);
            }else{
                if(token1 == address(0x0)){
                    msg.sender.transfer(amount1);
                }else{
                    TransferHelper.safeTransfer(token1,msg.sender,amount1);
                }       

            }

        }
        
        return (amount0,amount1);
    }
    
    
    function addLiquid(uint256 amount0) public onLiquity  payable  returns(uint256) {

        if(token0 == address(0x0)){
            require (msg.value >= amount0);
        }else{
            require (ERC20(token0).balanceOf(msg.sender) >= amount0  );
            TransferHelper.safeTransferFrom(token0,msg.sender,address(this),amount0.div(2));
        }

        (,uint256 buyamount1) = swap(amount0.div(2),0,true);
        
        uint256 totalLiquid = reserve1.add(reserve1);
        uint256 poolLiquid = ERC20(address(token1)).balanceOf(address(this));
        if(poolLiquid<miniLiquid){
            poolLiquid=miniLiquid;
        }

        uint256 mineCoin = buyamount1.add(buyamount1).mul(totalLiquid).div(poolLiquid);
        DTradeLiquids(liquidToken)._mint(msg.sender,mineCoin);
        uint256 leftCoin = amount0.sub(amount0.div(2).mul(2));
        if(leftCoin>0&&token0!=address(0x0)){
            TransferHelper.safeTransferFrom(token0,msg.sender,address(this),leftCoin);
        }
        return mineCoin;
    }
    
    function removeLiquid(uint256 amountL) payable public returns(uint256,uint256) {
        require(DTradeLiquids(liquidToken).balanceOf(msg.sender)>=amountL);
        
        uint256 totalLiquid = reserve1.add(reserve1);
        uint256 amount1 = amountL.mul((ERC20(address(token1)).balanceOf(address(this)))).div(totalLiquid).div(2);
        uint256 amount0 = amount1.mul(cur_price).div(TOKEN_DECIMAL_DIF).div(PRICE_MOD);
        
        require(ERC20(token1).balanceOf(address(this))>=amount1);
        
        reserve1 = reserve1.sub(amount1);
        reserve0 = reserve0.sub(amount0);
        
        DTradeLiquids(liquidToken)._burn(msg.sender,amountL);
        
        if(token0==address(0x0))
        {//eth
            require(address(this).balance>=amount0);
            msg.sender.transfer(amount0);
        }else{
            require(ERC20(token0).balanceOf(address(this))>=amount0);
            TransferHelper.safeTransfer(token0,msg.sender,amount0);
        }
        
        if(token1==address(0x0))
        {//eth
            require(address(this).balance>=amount1);
            msg.sender.transfer(amount1);
        }else{
            require(ERC20(token1).balanceOf(address(this))>=amount1);
            TransferHelper.safeTransfer(token1,msg.sender,amount1);
        }
        
        return (amount0,amount1);
    }  
    
   
}


contract UserRefers is ManagerUpgradeable,Refers{
    using SafeMath for uint256;
    using SafeERC20 for ERC20;
    
    mapping(address => address) public relations;
    mapping(address => address[]) public superiors;
    mapping(address => address) public callers;
    mapping(address => uint256) public rewards;
    
    address public topAddr;
    address public token;
    
    constructor(address _token,address []memory _mans) public ManagerUpgradeable(_mans){
        relations[address(0x0)] = address(0x0);
        topAddr = msg.sender;
        token = _token;
    }
    
    function addCaller(address _newCaller) onlyManager public {
        callers[_newCaller] = _newCaller;
    }
    
    function removeCaller(address rmCaller) onlyManager public {
        callers[rmCaller] = address(0x0);
    }
    

    function buildSuperoir(address ref,uint256 maxLayer) public {
        if(relations[msg.sender]==address(0x0)) {
            relations[msg.sender] = ref;
            superiors[msg.sender].push(ref);
            address[] memory supers = superiors[ref];
            if(supers.length>0){
                superiors[msg.sender].push(supers[0]);
            }
            uint256 cc = 2;
            for(uint256 i=1;i<supers.length && cc < maxLayer;i++){
                superiors[msg.sender].push(supers[i]);
                cc++;
            }
        }
    }
    function withdrawRewards() public{
        require(rewards[msg.sender]>0);
        TransferHelper.safeTransfer(token,msg.sender,rewards[msg.sender]);
        rewards[msg.sender] = 0;
    }
    // 0.03%分配给邀请人(其中0.01%分配给直接推荐人30%,0.005%分配给间接推荐人,15%,0.015%均分给第3代至第12代)
    function rewards2Super(address user,uint256 totalReward) external returns (bool)
    {
        require(callers[msg.sender]==msg.sender,"caller is empty") ;
        // rewards[user] = rewards[user].add(totalReward);
        address[] memory supers = superiors[user];
        uint256 leftReward = totalReward;
        uint256 bonus0;
        uint256 bonus1;
        uint256 bonus2;
        if(supers.length>0){
            uint256 bonus = totalReward.mul(30).div(100);
            rewards[supers[0]] = bonus;
            // TransferHelper.safeTransfer(token,supers[0],bonus);
            leftReward = leftReward.sub(bonus);
            bonus0=bonus;
        }
        if(supers.length>1){
            uint256 bonus = totalReward.mul(15).div(100);
            rewards[supers[1]] = bonus;
            // TransferHelper.safeTransfer(token,supers[1],bonus);
            leftReward = leftReward.sub(bonus);
            bonus1=bonus;
        }
        if(supers.length>2){
            uint256 preReward = leftReward.div(supers.length.sub(2));
        
            for(uint256 i=2;i<supers.length ;i++){
                // TransferHelper.safeTransfer(token,supers[i],preReward);
                rewards[supers[i]] = preReward;
                leftReward = leftReward.sub(preReward);
            }

            bonus2=preReward;
        }
        if(leftReward>0){
            // TransferHelper.safeTransfer(token,topAddr,leftReward);
            rewards[topAddr] = leftReward;
        }
        return true;
        
    }
    

}
contract TestRefs {
    
    
    Refers public refs;
    constructor(address _ref) public {
        refs =  Refers(_ref);
    }
    
    function testReward(uint256 amount) public {
        refs.rewards2Super(msg.sender,amount);
    }
    
}


contract DTrade is ManagerUpgradeable{
    using SafeMath for uint256;
    using SafeERC20 for ERC20;
    mapping(address => mapping(address =>uint256 )) public uniswapLiquids;//(liquid.addr=>(user.address=>amount)

    mapping(address => address) public liquidsMap;
    mapping(address => uint256)public  liquidPools;

    mapping(address => uint256) public profits4DFK1;
    mapping(address => uint256) public bonusWithdraw;
    mapping(address => uint256) public checkpointHistory;
    
    mapping(address => uint256) public joinTime;
    address [] public liquidPairs;

    uint256  public  peroid_total_bonus = 90000*(10 **18);
    uint256   public peroid_left_bonus = 0;
    uint256  public bonus_per_block = 9*(10 **18);
    uint256   public bonus_percent_LP = 10;
    
    uint256   public checkpoint_number = 0;    
    // uint256   totalProfitDFK1 = 0;
    
    uint256   public totalLiquids;

    uint256   public  totalMint;
    DFKImplHelper public dfk1Helper;
    
    uint256   public peroid_mined_coin = 0;
    
    address public token1;

    uint256 public totalFactor = 0;

    address public liquidToken;
    
    DFKII   public dfkii;
    
    constructor(address _token1,address []memory _mans) public ManagerUpgradeable(_mans){
        token1 = _token1;
        checkpoint_number = block.number+5*60;
        
        bytes memory bytecode = type(DTradeLiquids).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(msg.sender, token1));
        address _swapV2;
        assembly {
            _swapV2 := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }

        liquidToken = _swapV2;
        
    }
    
    function setDFKII(address _dfkii) public onlyManager {
        dfkii = DFKII(_dfkii);
    }
    
    function setDfk1Helper(address _dfk1Helper) public onlyManager {
        dfk1Helper = DFKImplHelper(_dfk1Helper);
    }
    
    
    function nextPeroid(uint256 total,uint256 perblock,uint256 percentLP) public onlyManager {
               
        totalMint = totalMint.add(peroid_total_bonus);
        peroid_total_bonus = total;
        bonus_per_block = perblock;
        bonus_percent_LP = percentLP;
        peroid_left_bonus = total;
        peroid_mined_coin = 0;
        checkpoint_number = block.number;
        joinTime[address(0x0)] = block.number;
        
    }
    
    function addUniswapPair(address uniAddr,uint256 factor) public onlyManager  {
        if(liquidsMap[uniAddr]==address(0x0)){
            uniswapLiquids[uniAddr][address(0x0)]=factor;
            totalFactor = totalFactor.add(factor);
            // uniswapLiquids[address(0x0)][address(0x0)] = uniswapLiquids[address(0x0)][address(0x0)].add(factor);
            liquidsMap[uniAddr] = uniAddr;
            liquidPairs.push(uniAddr);

        }
    }
    
    function removeUniswapPair(address uniAddr) public onlyManager  {
        totalFactor = totalFactor.sub(uniswapLiquids[uniAddr][address(0x0)]);
        uniswapLiquids[uniAddr][address(0x0)]=0;
    }

    function addDfkPair(address uniAddr,uint256 factor) public onlyManager  {
        if(liquidsMap[uniAddr]==address(0x0)){
            uniswapLiquids[uniAddr][address(0x0)]=factor;
            totalFactor = totalFactor.add(factor);
            liquidsMap[uniAddr] = uniAddr;
            liquidPairs.push(uniAddr);
        }
    }
    
    function removeDfkPair(address uniAddr) public onlyManager  {
        totalFactor = totalFactor.sub(uniswapLiquids[uniAddr][address(0x0)]);
        uniswapLiquids[uniAddr][address(0x0)]=0;
    }

    
    function addLiquid(address uniAddr,uint256 amountUL) public  {
        require(uniswapLiquids[uniAddr][address(0x0)]>0);//factor must large than zero
        uint256  realBonus=calcBonus(msg.sender);
        if(realBonus>0)
        {
            dfkii._mint(msg.sender,realBonus);
        }
        
        TransferHelper.safeTransferFrom(uniAddr,msg.sender,address(this),amountUL);
        liquidPools[uniAddr] = liquidPools[uniAddr].add(amountUL);
        uniswapLiquids[uniAddr][msg.sender]=uniswapLiquids[uniAddr][msg.sender].add(amountUL);

        uint256 mine_liquid=amountUL.mul(uniswapLiquids[uniAddr][address(0x0)]);
        // totalLiquids = totalLiquids.add(mine_liquid);
        DTradeLiquids(liquidToken)._mint(msg.sender,mine_liquid);
        
        joinTime[msg.sender] = block.number;
        bonusWithdraw[msg.sender] = 0;
    }
    
    function removeLiquid(address uniAddr,uint256 amountUL) public  {
        require(uniswapLiquids[uniAddr][msg.sender]>=amountUL,'amountUL is not enough');  

        uint256  realBonus=calcBonus(msg.sender);
        if(realBonus>0)
        {
            dfkii._mint(msg.sender,realBonus);
        }          
              
        TransferHelper.safeTransfer(address(uniAddr),msg.sender,amountUL); 
        uint256 mine_liquid=amountUL.mul(uniswapLiquids[uniAddr][address(0x0)]);
        DTradeLiquids(liquidToken)._burn(msg.sender,mine_liquid);        
        uniswapLiquids[uniAddr][msg.sender]=uniswapLiquids[uniAddr][msg.sender].sub(amountUL);
        
        if(DTradeLiquids(liquidToken).balanceOf(msg.sender)==0){
            joinTime[msg.sender] = 0;
        }
        else
        {
            joinTime[msg.sender] = block.number;
        }
        bonusWithdraw[msg.sender] = 0;
    }
    
    function mintCoin(address user) public view returns (uint256){
        if(joinTime[user]==0){
            return 0;
        }
        uint256 checkTime = checkpoint_number;
        if(joinTime[user]>checkpoint_number){
            checkTime = joinTime[user];
        }
        uint256 currentBonus = bonus_per_block.mul(block.number.sub(checkTime));
        if(currentBonus>peroid_left_bonus){
            currentBonus = peroid_left_bonus;
        }
        
        //
        return currentBonus;
         
        
    }

   
    modifier onlyJoin {
        require(joinTime[msg.sender] > 0,"onlyJoin time gt 0");
        _;
    }

    function calcDFK1Bonus(address addr) public view returns(uint256){
        if(joinTime[msg.sender] == 0){
            return 0;
        }
        return dfk1Helper.calcProfitForFee(addr,mintCoin(address(0x0)).mul(bonus_percent_LP).div(100),profits4DFK1[addr]);
    }
    
    function withdrawDFK1Bonus() public onlyJoin returns(uint256){
        
        uint256 bonus=calcDFK1Bonus(msg.sender);
        if(bonus>0){
            profits4DFK1[msg.sender] = profits4DFK1[msg.sender].add(bonus);
            // totalProfitDFK1 = totalProfitDFK1.sub(bonus);
            // TransferHelper.safeTransfer(token1,msg.sender,bonus);
            dfkii._mint(msg.sender,bonus);
            return bonus;
        }else{
            return 0;
        }
            
    }
    

    function withdrawBonus() public onlyJoin returns(uint256){
        uint256  realBonus=calcBonus(msg.sender);
        if(realBonus>0)
        {
            bonusWithdraw[msg.sender] = bonusWithdraw[msg.sender].add(realBonus);
            dfkii._mint(msg.sender,realBonus);
            
            joinTime[msg.sender] = block.number;
            bonusWithdraw[msg.sender] = 0;
        }
        return realBonus;
    }

    function calcBonus(address addr) public view returns (uint256){
        if(joinTime[addr] == 0){
            return 0;
        }
        if(joinTime[addr]<block.number){
            return (ERC20(liquidToken).balanceOf(addr)).div(ERC20(liquidToken).totalSupply()).mul(mintCoin(addr));
        }else{
            return 0;
        }
        
    }
}


// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    // function safeTransferETH(address to, uint value) internal {
    //     (bool success,bt) = to.call{value:value}(new bytes(0));
    //     require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    // }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_mans","type":"address[]"},{"internalType":"uint256","name":"_maxMined","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"agent","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_lockId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_newCustodian","type":"address"},{"indexed":false,"internalType":"address","name":"_clearCustodian","type":"address"}],"name":"ChangeConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_lockId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_msgSender","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"},{"indexed":false,"internalType":"address","name":"_clear","type":"address"}],"name":"ChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_lockId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_sender","type":"address"}],"name":"ChangeSweep","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"_burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"_mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"agent","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"agent","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"changeReqs","outputs":[{"internalType":"address","name":"proposedNew","type":"address"},{"internalType":"address","name":"proposedClear","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_lockId","type":"bytes32"}],"name":"confirmChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"agent","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"agent","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"managers","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mancount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new","type":"address"},{"internalType":"address","name":"_clear","type":"address"}],"name":"replaceManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new","type":"address"},{"internalType":"address","name":"_clear","type":"address"}],"name":"requestChange","outputs":[{"internalType":"bytes32","name":"lockId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_lockId","type":"bytes32"}],"name":"sweepChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweepeth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenaddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweeptoken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526012600260006101000a81548160ff021916908360ff1602179055506000600a556040518060400160405280601c81526020017f446566696b696e672e66696e616e63652056657273696f6e20322e3000000000815250600b908051906020019062000072929190620002d6565b506040518060400160405280600581526020017f44464b4949000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000c0929190620002d6565b506012600d60006101000a81548160ff021916908360ff160217905550348015620000ea57600080fd5b506040516200345438038062003454833981810160405260408110156200011057600080fd5b81019080805160405193929190846401000000008211156200013157600080fd5b838201915060208201858111156200014857600080fd5b82518660208202830111640100000000821117156200016657600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200019f57808201518184015260208101905062000182565b5050505090500160405260200180519060200190929190505050808280600060068190555060008151905060008090505b81811015620002ba576000838281518110620001e857fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200022d57600080fd5b80600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080600101915050620001d0565b506000600981905550505081600a819055505050505062000385565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200031957805160ff19168380011785556200034a565b828001600101855582156200034a579182015b82811115620003495782518255916020019190600101906200032c565b5b5090506200035991906200035d565b5090565b6200038291905b808211156200037e57600081600090555060010162000364565b5090565b90565b6130bf80620003956000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806366188463116100c3578063beda24831161007c578063beda248314610703578063d73dd62314610731578063dc3237be14610797578063dd62ed3e1461080f578063f4b05cb114610887578063fdff9b4d146108b55761014d565b8063661884631461046d57806370460299146104d357806370a082311461057457806395d89b41146105cc5780639a85448b1461064f578063a9059cbb1461069d5761014d565b806323b872dd1161011557806323b872dd146102eb578063273a506114610371578063313ce5671461038f5780634e6ec247146103b35780635badbe4c146104015780636161eb181461041f5761014d565b806301d8715f1461015257806306fdde03146101b6578063095ea7b314610239578063151754e01461029f57806318160ddd146102cd575b600080fd5b6101b46004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610939565b005b6101be610cdf565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101fe5780820151818401526020810190506101e3565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102856004803603604081101561024f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d7d565b604051808215151515815260200191505060405180910390f35b6102cb600480360360208110156102b557600080fd5b8101908080359060200190929190505050610e6f565b005b6102d5610fb9565b6040518082815260200191505060405180910390f35b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc3565b604051808215151515815260200191505060405180910390f35b61037961144e565b6040518082815260200191505060405180910390f35b610397611454565b604051808260ff1660ff16815260200191505060405180910390f35b6103ff600480360360408110156103c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611467565b005b61040961171a565b6040518082815260200191505060405180910390f35b61046b6004803603604081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611720565b005b6104b96004803603604081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061183a565b604051808215151515815260200191505060405180910390f35b6104ff600480360360208110156104e957600080fd5b8101908080359060200190929190505050611acb565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b6105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b2f565b6040518082815260200191505060405180910390f35b6105d4611b78565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106145780820151818401526020810190506105f9565b50505050905090810190601f1680156106415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61069b6004803603604081101561066557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c16565b005b6106e9600480360360408110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d25565b604051808215151515815260200191505060405180910390f35b61072f6004803603602081101561071957600080fd5b8101908080359060200190929190505050611f45565b005b61077d6004803603604081101561074757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061247b565b604051808215151515815260200191505060405180910390f35b6107f9600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612677565b6040518082815260200191505060405180910390f35b6108716004803603604081101561082557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a81565b6040518082815260200191505060405180910390f35b6108b36004803603602081101561089d57600080fd5b8101908080359060200190929190505050612b08565b005b6108f7600480360360208110156108cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580610aa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610aab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610b7057508073ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b7957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c385781600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600954016009819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cdb57600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600954036009819055505b5050565b600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b505050505081565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fb5573d6000803e3d6000fd5b5050565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ffe57600080fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f76616c7565206c742066726f6d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f76616c7565206c74205f616c6c6f77616e6365732066726f6d2000000000000081525060200191505060405180910390fd5b6111f782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061128c82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061135e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60095481565b600d60009054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600a54148061158e5750600a5461158b82600354612df690919063ffffffff16565b11155b611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5f6d696e742076616c756520696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b61161581600354612df690919063ffffffff16565b60038190555061166d81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60065481565b61177281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ca81600354612ddf90919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561194b576000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119df565b61195e8382612ddf90919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60086020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505081565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b611d21823383612e12565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d6057600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611dac57600080fd5b611dfe82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9382600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600860008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158061210d5750600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61211657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612241578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600954016009819055505b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232c57600760008260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600954036009819055505b60086000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc5ac4b86b291b7fbbf5f86c2252503f5be63cf2af544eaba554e1e134f979172828260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050565b600061250c82600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806127e25750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6127eb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806128b057508173ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6128b957600080fd5b6128c161300b565b905060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152506008600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f74989c31bb42eccbc44731e440fc47ddfd78174c1b3df0f656e28fd9b5ad2bc081338585604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a192915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600860008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580612cd05750600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612cd957600080fd5b60086000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507f2cb223f733ff50ea7b6a90296d83825ecc0280b91a448be5e7d5815c3e8fa2bf8233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082821115612deb57fe5b818303905092915050565b600080828401905083811015612e0857fe5b8091505092915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612eeb5780518252602082019150602081019050602083039250612ec8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f4d576040519150601f19603f3d011682016040523d82523d6000602084013e612f52565b606091505b5091509150818015612f925750600081511480612f915750808060200190516020811015612f7f57600080fd5b81019080805190602001909291905050505b5b613004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b6000600143034030600660008154600101919050819055604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140182815260200193505050506040516020818303038152906040528051906020012090509056fea265627a7a7231582064f167854a9b72b24f41ab2e11cab7632f451eac0ca30977511dbfb1bb4822ab64736f6c63430005110032000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dea9d2e81c9bb73c890a822f65118a3651c258d5

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806366188463116100c3578063beda24831161007c578063beda248314610703578063d73dd62314610731578063dc3237be14610797578063dd62ed3e1461080f578063f4b05cb114610887578063fdff9b4d146108b55761014d565b8063661884631461046d57806370460299146104d357806370a082311461057457806395d89b41146105cc5780639a85448b1461064f578063a9059cbb1461069d5761014d565b806323b872dd1161011557806323b872dd146102eb578063273a506114610371578063313ce5671461038f5780634e6ec247146103b35780635badbe4c146104015780636161eb181461041f5761014d565b806301d8715f1461015257806306fdde03146101b6578063095ea7b314610239578063151754e01461029f57806318160ddd146102cd575b600080fd5b6101b46004803603604081101561016857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610939565b005b6101be610cdf565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101fe5780820151818401526020810190506101e3565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102856004803603604081101561024f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d7d565b604051808215151515815260200191505060405180910390f35b6102cb600480360360208110156102b557600080fd5b8101908080359060200190929190505050610e6f565b005b6102d5610fb9565b6040518082815260200191505060405180910390f35b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc3565b604051808215151515815260200191505060405180910390f35b61037961144e565b6040518082815260200191505060405180910390f35b610397611454565b604051808260ff1660ff16815260200191505060405180910390f35b6103ff600480360360408110156103c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611467565b005b61040961171a565b6040518082815260200191505060405180910390f35b61046b6004803603604081101561043557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611720565b005b6104b96004803603604081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061183a565b604051808215151515815260200191505060405180910390f35b6104ff600480360360208110156104e957600080fd5b8101908080359060200190929190505050611acb565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b6105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b2f565b6040518082815260200191505060405180910390f35b6105d4611b78565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106145780820151818401526020810190506105f9565b50505050905090810190601f1680156106415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61069b6004803603604081101561066557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c16565b005b6106e9600480360360408110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d25565b604051808215151515815260200191505060405180910390f35b61072f6004803603602081101561071957600080fd5b8101908080359060200190929190505050611f45565b005b61077d6004803603604081101561074757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061247b565b604051808215151515815260200191505060405180910390f35b6107f9600480360360408110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612677565b6040518082815260200191505060405180910390f35b6108716004803603604081101561082557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a81565b6040518082815260200191505060405180910390f35b6108b36004803603602081101561089d57600080fd5b8101908080359060200190929190505050612b08565b005b6108f7600480360360208110156108cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580610aa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610aab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610b7057508073ffffffffffffffffffffffffffffffffffffffff16600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b7957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c385781600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600954016009819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cdb57600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600954036009819055505b5050565b600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b505050505081565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fb5573d6000803e3d6000fd5b5050565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ffe57600080fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f76616c7565206c742066726f6d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f76616c7565206c74205f616c6c6f77616e6365732066726f6d2000000000000081525060200191505060405180910390fd5b6111f782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061128c82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061135e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60095481565b600d60009054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600a54148061158e5750600a5461158b82600354612df690919063ffffffff16565b11155b611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5f6d696e742076616c756520696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b61161581600354612df690919063ffffffff16565b60038190555061166d81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60065481565b61177281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ca81600354612ddf90919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561194b576000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119df565b61195e8382612ddf90919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60086020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505081565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b611d21823383612e12565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d6057600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611dac57600080fd5b611dfe82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ddf90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e9382600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600860008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158061210d5750600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61211657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612241578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600954016009819055505b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232c57600760008260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600954036009819055505b60086000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507fc5ac4b86b291b7fbbf5f86c2252503f5be63cf2af544eaba554e1e134f979172828260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a15050565b600061250c82600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612df690919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806127e25750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6127eb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806128b057508173ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6128b957600080fd5b6128c161300b565b905060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152506008600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f74989c31bb42eccbc44731e440fc47ddfd78174c1b3df0f656e28fd9b5ad2bc081338585604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a192915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794d616e676572206d757374207573650000000000000000000000000081525060200191505060405180910390fd5b6000600860008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580612cd05750600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612cd957600080fd5b60086000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550507f2cb223f733ff50ea7b6a90296d83825ecc0280b91a448be5e7d5815c3e8fa2bf8233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082821115612deb57fe5b818303905092915050565b600080828401905083811015612e0857fe5b8091505092915050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612eeb5780518252602082019150602081019050602083039250612ec8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f4d576040519150601f19603f3d011682016040523d82523d6000602084013e612f52565b606091505b5091509150818015612f925750600081511480612f915750808060200190516020811015612f7f57600080fd5b81019080805190602001909291905050505b5b613004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5472616e7366657248656c7065723a205452414e534645525f4641494c45440081525060200191505060405180910390fd5b5050505050565b6000600143034030600660008154600101919050819055604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140182815260200193505050506040516020818303038152906040528051906020012090509056fea265627a7a7231582064f167854a9b72b24f41ab2e11cab7632f451eac0ca30977511dbfb1bb4822ab64736f6c63430005110032

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dea9d2e81c9bb73c890a822f65118a3651c258d5

-----Decoded View---------------
Arg [0] : _mans (address[]): 0xdEa9d2E81c9bb73c890A822F65118a3651c258D5
Arg [1] : _maxMined (uint256): 0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000dea9d2e81c9bb73c890a822f65118a3651c258d5


Deployed Bytecode Sourcemap

15547:580:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15547:580:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8776:491;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8776:491:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15606:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15606:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13766:184;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13766:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11318:98;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11318:98:0;;;;;;;;;;;;;;;;;:::i;:::-;;12496:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13264:496;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13264:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8223:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15697:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15014:305;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15014:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;887:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15327:209;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15327:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14343:395;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14343:395:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8162:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8162:52:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12587:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12587:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15662:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15662:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11165:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11165:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12699:324;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12699:324:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9926:745;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9926:745:0;;;;;;;;;;;;;;;;;:::i;:::-;;14086:251;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14086:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9306:473;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9306:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13956:124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13956:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10772:323;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10772:323:0;;;;;;;;;;;;;;;;;:::i;:::-;;8109:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8109:44:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8776:491;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:1;8868:20;;:6;:20;;;;:42;;;;8908:1;8892:18;;:4;:18;;;;8868:42;8859:53;;;;;;8952:1;8934:20;;:6;:20;;;:50;;;;8978:6;8958:26;;:8;:16;8967:6;8958:16;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;8934:50;8925:60;;;;;;9025:1;9009:18;;:4;:18;;;9006:118;;9070:4;9053:8;:14;9062:4;9053:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9111:1;9100:8;;:12;9089:8;:23;;;;9006:118;9157:1;9139:20;;:6;:20;;;9136:122;;9192:8;:16;9201:6;9192:16;;;;;;;;;;;;;;;;9185:23;;;;;;;;;;;9245:1;9234:8;;:12;9223:8;:23;;;;9136:122;8776:491;;:::o;15606:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13766:184::-;13829:4;13875:5;13842:11;:23;13854:10;13842:23;;;;;;;;;;;;;;;:30;13866:5;13842:30;;;;;;;;;;;;;;;:38;;;;13913:5;13892:34;;13901:10;13892:34;;;13920:5;13892:34;;;;;;;;;;;;;;;;;;13940:4;13933:11;;13766:184;;;;:::o;11318:98::-;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11381:10;:19;;:27;11401:6;11381:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11381:27:0;11318:98;:::o;12496:85::-;12540:7;12563:12;;12556:19;;12496:85;:::o;13264:496::-;13343:4;13378:1;13364:16;;:2;:16;;;;13356:25;;;;;;13405:9;:15;13415:4;13405:15;;;;;;;;;;;;;;;;13396:5;:24;;13388:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:11;:17;13473:4;13461:17;;;;;;;;;;;;;;;:29;13479:10;13461:29;;;;;;;;;;;;;;;;13452:5;:38;;13444:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13547:26;13567:5;13547:9;:15;13557:4;13547:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;13529:9;:15;13539:4;13529:15;;;;;;;;;;;;;;;:44;;;;13596:24;13614:5;13596:9;:13;13606:2;13596:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;13580:9;:13;13590:2;13580:13;;;;;;;;;;;;;;;:40;;;;13659;13693:5;13659:11;:17;13671:4;13659:17;;;;;;;;;;;;;;;:29;13677:10;13659:29;;;;;;;;;;;;;;;;:33;;:40;;;;:::i;:::-;13627:11;:17;13639:4;13627:17;;;;;;;;;;;;;;;:29;13645:10;13627:29;;;;;;;;;;;;;;;:72;;;;13726:2;13711:25;;13720:4;13711:25;;;13730:5;13711:25;;;;;;;;;;;;;;;;;;13750:4;13743:11;;13264:496;;;;;:::o;8223:30::-;;;;:::o;15697:26::-;;;;;;;;;;;;;:::o;15014:305::-;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15105:1;15095:8;;:11;:46;;;;15133:8;;15108:23;15125:5;15108:12;;:16;;:23;;;;:::i;:::-;:33;;15095:46;15087:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15190:23;15207:5;15190:12;;:16;;:23;;;;:::i;:::-;15175:12;:38;;;;15240:24;15258:5;15240:9;:13;15250:2;15240:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;15224:9;:13;15234:2;15224:13;;;;;;;;;;;;;;;:40;;;;15301:2;15280:31;;15297:1;15280:31;;;15305:5;15280:31;;;;;;;;;;;;;;;;;;15014:305;;:::o;887:27::-;;;;:::o;15327:209::-;15404:26;15424:5;15404:9;:15;15414:4;15404:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;15386:9;:15;15396:4;15386:15;;;;;;;;;;;;;;;:44;;;;15456:23;15473:5;15456:12;;:16;;:23;;;;:::i;:::-;15441:12;:38;;;;15518:1;15495:33;;15504:4;15495:33;;;15522:5;15495:33;;;;;;;;;;;;;;;;;;15327:209;;:::o;14343:395::-;14412:4;14425:19;14447:11;:23;14459:10;14447:23;;;;;;;;;;;;;;;:30;14471:5;14447:30;;;;;;;;;;;;;;;;14425:52;;14496:14;14488:5;:22;14484:160;;;14554:1;14521:11;:23;14533:10;14521:23;;;;;;;;;;;;;;;:30;14545:5;14521:30;;;;;;;;;;;;;;;:34;;;;14484:160;;;14611:25;14630:5;14611:14;:18;;:25;;;;:::i;:::-;14578:11;:23;14590:10;14578:23;;;;;;;;;;;;;;;:30;14602:5;14578:30;;;;;;;;;;;;;;;:58;;;;14484:160;14676:5;14655:59;;14664:10;14655:59;;;14683:11;:23;14695:10;14683:23;;;;;;;;;;;;;;;:30;14707:5;14683:30;;;;;;;;;;;;;;;;14655:59;;;;;;;;;;;;;;;;;;14728:4;14721:11;;;14343:395;;;;:::o;8162:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12587:106::-;12641:15;12672:9;:15;12682:4;12672:15;;;;;;;;;;;;;;;;12665:22;;12587:106;;;:::o;15662:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11165:147::-;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11248:56;11276:9;11286:10;11297:6;11248:27;:56::i;:::-;11165:147;;:::o;12699:324::-;12760:4;12795:1;12781:16;;:2;:16;;;;12773:25;;;;;;12822:9;:21;12832:10;12822:21;;;;;;;;;;;;;;;;12813:5;:30;;12805:39;;;;;;12877:32;12903:5;12877:9;:21;12887:10;12877:21;;;;;;;;;;;;;;;;:25;;:32;;;;:::i;:::-;12853:9;:21;12863:10;12853:21;;;;;;;;;;;;;;;:56;;;;12932:24;12950:5;12932:9;:13;12942:2;12932:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;12916:9;:13;12926:2;12916:13;;;;;;;;;;;;;;;:40;;;;12989:2;12968:31;;12977:10;12968:31;;;12993:5;12968:31;;;;;;;;;;;;;;;;;;13013:4;13006:11;;12699:324;;;;:::o;9926:745::-;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9996:35;10034:10;:19;10045:7;10034:19;;;;;;;;;;;9996:57;;10110:1;10073:39;;:13;:25;;;;;;;;;;;;:39;;;;:84;;;;10155:1;10116:41;;:13;:27;;;;;;;;;;;;:41;;;;10073:84;10064:94;;;;;;10211:1;10174:39;;:13;:25;;;;;;;;;;;;:39;;;10171:181;;10277:13;:25;;;;;;;;;;;;10239:8;:35;10248:13;:25;;;;;;;;;;;;10239:35;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;10339:1;10328:8;;:12;10317:8;:23;;;;10171:181;10406:1;10367:41;;:13;:27;;;;;;;;;;;;:41;;;10364:164;;10441:8;:37;10450:13;:27;;;;;;;;;;;;10441:37;;;;;;;;;;;;;;;;10434:44;;;;;;;;;;;10515:1;10504:8;;:12;10493:8;:23;;;;10364:164;10547:10;:19;10558:7;10547:19;;;;;;;;;;;;10540:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10584:79;10600:7;10609:13;:25;;;;;;;;;;;;10635:13;:27;;;;;;;;;;;;10584:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8735:1;9926:745;:::o;14086:251::-;14155:4;14201:41;14236:5;14201:11;:23;14213:10;14201:23;;;;;;;;;;;;;;;:30;14225:5;14201:30;;;;;;;;;;;;;;;;:34;;:41;;;;:::i;:::-;14168:11;:23;14180:10;14168:23;;;;;;;;;;;;;;;:30;14192:5;14168:30;;;;;;;;;;;;;;;:74;;;;14275:5;14254:59;;14263:10;14254:59;;;14282:11;:23;14294:10;14282:23;;;;;;;;;;;;;;;:30;14306:5;14282:30;;;;;;;;;;;;;;;;14254:59;;;;;;;;;;;;;;;;;;14327:4;14320:11;;14086:251;;;;:::o;9306:473::-;9386:14;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9440:1;9422:20;;:6;:20;;;;:42;;;;9462:1;9446:18;;:4;:18;;;;9422:42;9413:53;;;;;;9506:1;9488:20;;:6;:20;;;:50;;;;9532:6;9512:26;;:8;:16;9521:6;9512:16;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;9488:50;9479:60;;;;;;9561:16;:14;:16::i;:::-;9552:25;;9611:94;;;;;;;;9653:4;9611:94;;;;;;9687:6;9611:94;;;;;9590:10;:18;9601:6;9590:18;;;;;;;;;;;:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:48;9739:6;9747:10;9759:4;9764:6;9723:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9306:473;;;;:::o;13956:124::-;14026:7;14049:11;:18;14061:5;14049:18;;;;;;;;;;;;;;;:25;14068:5;14049:25;;;;;;;;;;;;;;;;14042:32;;13956:124;;;;:::o;10772:323::-;8681:8;:20;8690:10;8681:20;;;;;;;;;;;;;;;;;;;;;;;;;8667:34;;:10;:34;;;8659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10840:35;10876:10;:19;10887:7;10876:19;;;;;;;;;;;10840:55;;10952:1;10915:39;;:13;:25;;;;;;;;;;;;:39;;;;:84;;;;10997:1;10958:41;;:13;:27;;;;;;;;;;;;:41;;;;10915:84;10906:96;;;;;;11020:10;:19;11031:7;11020:19;;;;;;;;;;;;11013:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11055:32;11067:7;11076:10;11055:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;8735:1;10772:323;:::o;8109:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;570:123::-;628:7;660:1;655;:6;;648:14;;;;684:1;680;:5;673:12;;570:123;;;;:::o;705:147::-;763:7;783:9;799:1;795;:5;783:17;;823:1;818;:6;;811:14;;;;843:1;836:8;;;705:147;;;;:::o;53070:361::-;53219:12;53233:17;53254:5;:10;;53288;53300:2;53304:5;53265:45;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;53265:45:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;53265:45:0;53254:57;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;53254:57:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;53218:93:0;;;;53330:7;:57;;;;;53357:1;53342:4;:11;:16;:44;;;;53373:4;53362:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;53362:24:0;;;;;;;;;;;;;;;;53342:44;53330:57;53322:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53070:361;;;;;:::o;987:171::-;1031:14;1115:1;1102:12;:14;1092:25;1127:4;1136:12;;1134:14;;;;;;;;;;1075:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1075:74:0;;;1065:85;;;;;;1058:92;;987:171;:::o

Swarm Source

bzzr://64f167854a9b72b24f41ab2e11cab7632f451eac0ca30977511dbfb1bb4822ab

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.