ETH Price: $2,418.16 (+1.72%)

Contract

0x9A65C56CAf2ae2E46d1d088a9Af7F6Bf54bd8988
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Transfer Ownersh...132431122021-09-17 12:09:211113 days ago1631880561IN
0x9A65C56C...f54bd8988
0 ETH0.0016983359.20011866
Transfer126645712021-06-19 11:36:531203 days ago1624102613IN
0x9A65C56C...f54bd8988
0.24928541 ETH0.00025212
Transfer124740542021-05-20 22:45:391233 days ago1621550739IN
0x9A65C56C...f54bd8988
0.08425879 ETH0.0057039362
Transfer124609342021-05-18 21:53:021235 days ago1621374782IN
0x9A65C56C...f54bd8988
0.2 ETH0.01514388120
Transfer124609322021-05-18 21:52:411235 days ago1621374761IN
0x9A65C56C...f54bd8988
0.49 ETH0.0104114182.5
Transfer124608142021-05-18 21:28:171235 days ago1621373297IN
0x9A65C56C...f54bd8988
0.15290214 ETH0.010989122.1
Transfer124607972021-05-18 21:24:201235 days ago1621373060IN
0x9A65C56C...f54bd8988
0.16389114 ETH0.010791119.9
Transfer124606532021-05-18 20:49:521235 days ago1621370992IN
0x9A65C56C...f54bd8988
0.29157154 ETH0.00525250
Transfer124606422021-05-18 20:48:071235 days ago1621370887IN
0x9A65C56C...f54bd8988
0.29157154 ETH0.00336160
Transfer124606302021-05-18 20:44:341235 days ago1621370674IN
0x9A65C56C...f54bd8988
0.29163786 ETH0.00375150
Transfer124606212021-05-18 20:42:141235 days ago1621370534IN
0x9A65C56C...f54bd8988
0.29163786 ETH0.002793133
Transfer124606122021-05-18 20:40:371235 days ago1621370437IN
0x9A65C56C...f54bd8988
0 ETH0.002793133
Transfer124605982021-05-18 20:37:291235 days ago1621370249IN
0x9A65C56C...f54bd8988
0.29227374 ETH0.002562122
Transfer124605442021-05-18 20:25:361235 days ago1621369536IN
0x9A65C56C...f54bd8988
0.29446147 ETH0.002436116
Transfer124600242021-05-18 18:33:221235 days ago1621362802IN
0x9A65C56C...f54bd8988
0.1 ETH0.01892985150
Transfer124600122021-05-18 18:30:311235 days ago1621362631IN
0x9A65C56C...f54bd8988
0 ETH0.0018902480
Transfer124597922021-05-18 17:42:391235 days ago1621359759IN
0x9A65C56C...f54bd8988
0.08 ETH0.01514388120
Transfer124597372021-05-18 17:30:501235 days ago1621359050IN
0x9A65C56C...f54bd8988
0.09 ETH0.002289109
Transfer124597162021-05-18 17:26:271235 days ago1621358787IN
0x9A65C56C...f54bd8988
0.09 ETH0.002163103
Transfer124596612021-05-18 17:14:331235 days ago1621358073IN
0x9A65C56C...f54bd8988
0.429 ETH0.01048788114
Transfer124596412021-05-18 17:10:451235 days ago1621357845IN
0x9A65C56C...f54bd8988
0.12052 ETH0.01817265144
Transfer124593422021-05-18 16:01:371235 days ago1621353697IN
0x9A65C56C...f54bd8988
0.15650005 ETH0.0106007184
Transfer124592642021-05-18 15:44:151235 days ago1621352655IN
0x9A65C56C...f54bd8988
0.33 ETH0.01640587130
Transfer124592282021-05-18 15:37:331235 days ago1621352253IN
0x9A65C56C...f54bd8988
0.145 ETH0.01539627122
Transfer124591982021-05-18 15:30:481235 days ago1621351848IN
0x9A65C56C...f54bd8988
0.25203225 ETH0.01413428112
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
124740542021-05-20 22:45:391233 days ago1621550739
0x9A65C56C...f54bd8988
0.08425879 ETH
124609342021-05-18 21:53:021235 days ago1621374782
0x9A65C56C...f54bd8988
0.2 ETH
124609322021-05-18 21:52:411235 days ago1621374761
0x9A65C56C...f54bd8988
0.49 ETH
124600242021-05-18 18:33:221235 days ago1621362802
0x9A65C56C...f54bd8988
0.1 ETH
124597922021-05-18 17:42:391235 days ago1621359759
0x9A65C56C...f54bd8988
0.08 ETH
124596612021-05-18 17:14:331235 days ago1621358073
0x9A65C56C...f54bd8988
0.429 ETH
124596412021-05-18 17:10:451235 days ago1621357845
0x9A65C56C...f54bd8988
0.12052 ETH
124593422021-05-18 16:01:371235 days ago1621353697
0x9A65C56C...f54bd8988
0.15650005 ETH
124592642021-05-18 15:44:151235 days ago1621352655
0x9A65C56C...f54bd8988
0.33 ETH
124592282021-05-18 15:37:331235 days ago1621352253
0x9A65C56C...f54bd8988
0.145 ETH
124591982021-05-18 15:30:481235 days ago1621351848
0x9A65C56C...f54bd8988
0.25203225 ETH
124586032021-05-18 13:17:301235 days ago1621343850
0x9A65C56C...f54bd8988
0.4 ETH
124584742021-05-18 12:48:571235 days ago1621342137
0x9A65C56C...f54bd8988
0.1013 ETH
124579602021-05-18 10:52:551235 days ago1621335175
0x9A65C56C...f54bd8988
0.07 ETH
124574802021-05-18 9:11:311235 days ago1621329091
0x9A65C56C...f54bd8988
0.9 ETH
124573672021-05-18 8:44:131235 days ago1621327453
0x9A65C56C...f54bd8988
3.98 ETH
124571782021-05-18 8:02:241235 days ago1621324944
0x9A65C56C...f54bd8988
0.69 ETH
124540002021-05-17 20:06:401236 days ago1621282000
0x9A65C56C...f54bd8988
0.01 ETH
124526252021-05-17 15:07:301236 days ago1621264050
0x9A65C56C...f54bd8988
0.15 ETH
124519132021-05-17 12:36:591236 days ago1621255019
0x9A65C56C...f54bd8988
0.270045 ETH
124516612021-05-17 11:36:441236 days ago1621251404
0x9A65C56C...f54bd8988
0.1 ETH
124459852021-05-16 14:22:121237 days ago1621174932
0x9A65C56C...f54bd8988
0.01791662 ETH
124444532021-05-16 8:40:311237 days ago1621154431
0x9A65C56C...f54bd8988
0.06175354 ETH
124440392021-05-16 7:01:281237 days ago1621148488
0x9A65C56C...f54bd8988
0.13 ETH
124437212021-05-16 5:42:541237 days ago1621143774
0x9A65C56C...f54bd8988
0.265 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ICO

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-31
*/

/**
 *Submitted for verification at Etherscan.io on 2020-08-31
*/

pragma solidity ^0.6.12;

// SPDX-License-Identifier: GPL-3.0

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;


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


    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() public {
        owner = msg.sender;
    }


    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "Not authorized operation");
        _;
    }


    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Address shouldn't be zero");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}


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

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

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

        return c;
    }

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

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

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


    event Transfer(address indexed from, address indexed to, uint256 value);

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


/**
 * @dev Simple ERC20 Token example, with mintable token creation only during the deployement of the token contract */

contract TokenContract is Ownable{
  using SafeMath for uint256;

  string public name;
  string public symbol;
  uint8 public decimals;
  uint256 public totalSupply;
  address public tokenOwner;
  address private ico;

  mapping(address => uint256) balances;
  mapping (address => mapping (address => uint256)) internal allowed;
  mapping(address => bool) public vestedlist;

  event SetICO(address indexed _ico);
  event Mint(address indexed to, uint256 amount);
  event MintFinished();
  event UnlockToken();
  event LockToken();
  event Burn();
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event addedToVestedlist(address indexed _vestedAddress);
  event removedFromVestedlist(address indexed _vestedAddress);

  
  bool public mintingFinished = false;
  bool public locked = true;

  modifier canMint() {
    require(!mintingFinished);
    _;
  }
  
  modifier canTransfer() {
    require(!locked || msg.sender == owner || msg.sender == ico);
    _;
  }
  
  modifier onlyAuthorized() {
    require(msg.sender == owner || msg.sender == ico);
    _;
  }


  constructor(string memory _name, string memory  _symbol, uint8 _decimals) public {
    require (_decimals != 0);
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
    totalSupply = 0;
    balances[msg.sender] = totalSupply;
    emit Transfer(address(0), msg.sender, totalSupply);


  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) public onlyAuthorized canMint returns (bool) {
    totalSupply = totalSupply.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(this), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() public onlyAuthorized canMint returns (bool) {
    mintingFinished = true;
    emit MintFinished();
    return true;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public canTransfer returns (bool) {
    require(_to != address(0));
	require (!isVestedlisted(msg.sender));
    require(_value <= balances[msg.sender]);
    require (msg.sender != address(this));

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }


  function burn(address _who, uint256 _value) onlyAuthorized public returns (bool){
    require(_who != address(0));
    
    totalSupply = totalSupply.sub(_value);
    balances[_who] = balances[_who].sub(_value);
    emit Burn();
    emit Transfer(_who, address(0), _value);
    return true;
  }
  

  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }
  
  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public canTransfer returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    emit Transfer(_from, _to, _value);
    return true;
  }

  function transferFromERC20Contract(address _to, uint256 _value) public onlyOwner returns (bool) {
    require(_to != address(0));
    require(_value <= balances[address(this)]);
    balances[address(this)] = balances[address(this)].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(address(this), _to, _value);
    return true;
  }


  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function unlockToken() public onlyAuthorized returns (bool) {
    locked = false;
    emit UnlockToken();
    return true;
  }

  function lockToken() public onlyAuthorized returns (bool) {
    locked = true;
    emit LockToken();
    return true;
  }
  
  function setICO(address _icocontract) public onlyOwner returns (bool) {
    require(_icocontract != address(0));
    ico = _icocontract;
    emit SetICO(_icocontract);
    return true;
  }

    /**
     * @dev Adds list of addresses to Vestedlist. Not overloaded due to limitations with truffle testing.
     * @param _vestedAddress Addresses to be added to the Vestedlist
     */
    function addToVestedlist(address[] memory _vestedAddress) public onlyOwner {
        for (uint256 i = 0; i < _vestedAddress.length; i++) {
            if (vestedlist[_vestedAddress[i]]) continue;
            vestedlist[_vestedAddress[i]] = true;
        }
    }


    /**
     * @dev Removes single address from Vestedlist.
     * @param _vestedAddress Address to be removed to the Vestedlist
     */
    function removeFromVestedlist(address[] memory _vestedAddress) public onlyOwner {
        for (uint256 i = 0; i < _vestedAddress.length; i++) {
            if (!vestedlist[_vestedAddress[i]]) continue;
            vestedlist[_vestedAddress[i]] = false;
        }
    }


    function isVestedlisted(address _vestedAddress) internal view returns (bool) {
      return (vestedlist[_vestedAddress]);
    }

}

/**
 * @title PullPayment
 * @dev Base contract supporting async send for pull payments. Inherit from this
 * contract and use asyncSend instead of send.
 */
contract PullPayment {
    using SafeMath for uint256;

    mapping (address => uint256) public payments;

    uint256 public totalPayments;

    /**
    * @dev Called by the payer to store the sent amount as credit to be pulled.
    * @param dest The destination address of the funds.
    * @param amount The amount to transfer.
    */
    function asyncSend(address dest, uint256 amount) internal{
        payments[dest] = payments[dest].add(amount);
        totalPayments = totalPayments.add(amount);
    }

    /**
    * @dev withdraw accumulated balance, called by payee.
    */
    function withdrawPayments() internal{
        address payable payee = msg.sender;
        uint256 payment = payments[payee];

        require(payment != 0);
        require(address(this).balance >= payment);

        totalPayments = totalPayments.sub(payment);
        payments[payee] = 0;

        assert(payee.send(payment));
    }
}

/**
 * @title ICO
 * @dev ICO is a base contract for managing a public token sale,
 * allowing investors to purchase tokens with ether. This contract implements
 * such functionality in its most fundamental form and can be extended to provide additional
 * functionality and/or custom behavior.
 * The external interface represents the basic interface for purchasing tokens, and conform
 * the base architecture for a public sale. They are *not* intended to be modified / overriden.
 * The internal interface conforms the extensible and modifiable surface of public token sales. Override
 * the methods to add functionality. Consider using 'super' where appropiate to concatenate
 * behavior.
 */

contract ICO is PullPayment, Ownable {

  using SafeMath for uint256;

  // The token being sold
  TokenContract public token;

  // Address where funds are collected
  address payable public wallet;

  // Address to receive project tokens
  address public projectOwner;

  // Refund period if the ICO failed
  uint256 public refundPeriod;

  // How many token units a buyer gets per ETH/wei during Pre sale. The ETH price is fixed at 400$ during Pre sale.
  uint256 public Presalerate = 0.00025 ether;   //  1 DCASH Token = 0.10 $ = 0.00025 Ether

  // How many token units a buyer gets per ETH/wei during ICO. The ETH price is fixed at 400$ during the ICO to guarantee the 30 % discount rate with the presale rate
  uint256 public Icorate = 0.000325 ether;    //  1 DCASH Token = 0.13 $ = 0.000325 Ether
 
  // Amount of ETH/Wei raised during the ICO period
  uint256 public EthRaisedIco;

  // Amount of ETH/wei raised during the Pre sale
  uint256 public EthRaisedpresale;

  // Token amount distributed during the ICO period
  uint256 public tokenDistributed;

  // Token amount distributed during the Pre sale
  uint256 public tokenDistributedpresale;

  // investors part according to the whitepaper 60 % (50% ICO + 10% PreSale) 
  uint256 public investors = 60;
  
  // Min purchase size of incoming ETH during pre sale period fixed at 2 ETH valued at 800 $ 
  uint256 public constant MIN_PURCHASE_Presale = 2 ether;

  // Minimum purchase size of incoming ETH during ICO at 1$
  uint256 public constant MIN_PURCHASE_ICO = 0.0025 ether;

  // Hardcap cap in Ether raised during Pre sale fixed at $ 200 000 for ETH valued at 440$ 
  uint256 public PresaleSalemaxCap1 = 500 ether;

  // Softcap funding goal during ICO in Ether raised fixed at $ 200 000 for ETH valued at 400$.
  uint256 public ICOminCap = 500 ether;

  // Hardcap goal in Ether during ICO in Ether raised fixed at $ 13 000 000 for ETH valued at 400$
  uint256 public ICOmaxCap = 32500 ether;

  // presale start/end
  bool public presale = true;    // State of the ongoing sales Pre sale 
  
  // ICO start/end
  bool public ico = false;         // State of the ongoing sales ICO period

  // Balances in incoming Ether
  mapping(address => uint256) balances;
  
  // Bool to check that the Presalesale period is launch only one time
  bool public statepresale = false;
  
  // Bool to check that the ico is launch only one time
  bool public stateico = true;

  /**
   * Event for token purchase logging
   * @param purchaser who paid for the tokens
   * @param beneficiary who got the tokens
   * @param value weis paid for purchase
   * @param amount amount of tokens purchased
   */
  event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
  event NewContract(address indexed _from, address indexed _contract, string _type);

  /**
   * @param _wallet Address where collected funds will be forwarded to
   * @param _token Address of the ERC20 Token
   * @param _project Address where the Token of the project will be sent
   */
  constructor(address payable _wallet, address _token, address _project) public {
    require(_wallet != address(0) && _token != address(0) && _project != address(0));
    wallet = _wallet;
    token = TokenContract(_token);    
    projectOwner = _project;

  }

  // -----------------------------------------
  // ICO external interface
  // -----------------------------------------

  /**
   * @dev fallback function ***DO NOT OVERRIDE***
   */
  receive() external payable {
     if (presale) {
      buypresaleTokens(msg.sender);
    }

    if (ico) {
      buyICOTokens(msg.sender);
    }
  }

  function buypresaleTokens (address _beneficiary) internal {
    require(_beneficiary != address(0) , "Failed the wallet is not allowed");  
    require(msg.value >= MIN_PURCHASE_Presale, "Failed the amount is not respecting the minimum deposit of Presale ");
    // Check that if investors sends more than the MIN_PURCHASE_Presale
    uint256 weiAmount = msg.value;
	// According to the whitepaper the backers who invested on Presale Sale have not possibilities to be refunded. Their ETH Balance is updated to zero value.
	balances[msg.sender] = 0;
    // calculate token amount to be created
    uint256 tokensTocreate = _getTokenpresaleAmount(weiAmount);
    _getRemainingTokenStock(_beneficiary, tokensTocreate);
    emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokensTocreate);

    // update state
    EthRaisedpresale = EthRaisedpresale.add(weiAmount);
    tokenDistributedpresale = tokenDistributedpresale.add(tokensTocreate);

    // If Presale Sale softcap is reached then the ether on the ICO contract are send to project wallet
    if (EthRaisedpresale <= PresaleSalemaxCap1) {
      wallet.transfer(address(this).balance);
    } else {
      //If PresaleSalemaxCap1 is reached then the presale is closed
      if (EthRaisedpresale >= PresaleSalemaxCap1) {
        presale = false;
      }
    }
  }
  
  /**
   * @dev low level token purchase ***DO NOT OVERRIDE***
   * @param _beneficiary Address performing the token purchase
   */
  function buyICOTokens(address _beneficiary) internal {
	require(_beneficiary != address(0) , "Failed the wallet is not allowed");  
    require(msg.value >= MIN_PURCHASE_ICO, "Failed the amount is not respecting the minimum deposit of ICO");
    // Check that if investors sends more than the MIN_PURCHASE_ICO
    uint256 weiAmount = msg.value;

    // calculate token amount to be created
    uint256 tokensTocreate = _getTokenAmount(weiAmount);

    // Look if there is token on the contract if he is not create the amount of token
    _getRemainingTokenStock(_beneficiary, tokensTocreate);
    emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokensTocreate);

    // update state
    EthRaisedIco = EthRaisedIco.add(weiAmount);

    // Creation of the token and transfer to beneficiary
    tokenDistributed = tokenDistributed.add(tokensTocreate);

    // Update the balance of benificiary
    balances[_beneficiary] = balances[_beneficiary].add(weiAmount);

    uint256 totalEthRaised = EthRaisedIco.add(EthRaisedpresale);

    // If ICOminCap is reached then the ether on the ICO contract are send to project wallet
    if (totalEthRaised >= ICOminCap && totalEthRaised <= ICOmaxCap) {
      wallet.transfer(address(this).balance);
    }

    //If ICOmaxCap is reached then the ICO close
    if (totalEthRaised >= ICOmaxCap) {
      ico = false;
    }
  }

  /* ADMINISTRATIVE FUNCTIONS */

  // Update the ETH ICO rate  
  function updateETHIcoRate(uint256 _EtherAmount) public onlyOwner {
    Icorate = (_EtherAmount).mul(1 wei);
  }
  
    // Update the ETH PreSale rate  
  function updateETHPresaleRate(uint256 _EtherAmount) public onlyOwner {
    Presalerate = (_EtherAmount).mul(1 wei);
  }

    // Update the ETH ICO MAX CAP  
  function updateICOMaxcap(uint256 _EtherAmount) public onlyOwner {
    ICOmaxCap = (_EtherAmount).mul(1 wei);
  }

  // start presale
  function startpresale() public onlyOwner {
    require(statepresale && !ico,"Failed the Presale was already started or another sale is ongoing");
    presale = true;
    statepresale = false;
    token.lockToken();
  }

  // close Presale
  function closepresale() public onlyOwner {
    require(presale && !ico, "Failed it was already closed");
    presale = false;
  }
 
 // start ICO
  function startICO() public onlyOwner {

    // bool to see if the ico has already been launched and  presale is not in progress
    require(stateico && !presale, "Failed the ICO was already started or another salae is ongoing");

    refundPeriod = now.add(2764800);
      // 32 days in seconds ==> 32*24*3600

    ico = true;
    token.lockToken();

    // Put the bool to False to block the start of this function again
    stateico = false;
  }

  // close ICO
  function closeICO() public onlyOwner {
    require(!presale && ico,"Failed it was already closed");
    ico = false;
  }

  /* When ICO MIN_CAP is not reach the smart contract will be credited to make refund possible by backers
   * 1) backer call the "refund" function of the ICO contract
   * 2) backer call the "reimburse" function of the ICO contract to get a refund in ETH
   */
  function refund() public {
    require(_refundPeriod());
    require(balances[msg.sender] > 0);

    uint256 ethToSend = balances[msg.sender];
    balances[msg.sender] = 0;
    asyncSend(msg.sender, ethToSend);
  }

  function reimburse() public {
    require(_refundPeriod());
    withdrawPayments();
    EthRaisedIco = address(this).balance;
  }

  // Function to pay out if the ICO is successful
  function WithdrawFunds() public onlyOwner {
    require(!ico && !presale, "Failed a sales is ongoing");
    require(now > refundPeriod.add(7776000) || _isSuccessful(), "Failed the refund period is not finished");
    //  90 days in seconds ==> 2*30*24*3600
    if (_isSuccessful()) {
      uint256 _tokensProjectToSend = _getTokenAmountToDistribute(100 - investors);
      _getRemainingTokenStock(projectOwner, _tokensProjectToSend);
      token.unlockToken();
    } else {
      wallet.transfer(EthRaisedIco);
    }
    
    // burn in case that there is some not distributed tokens on the contract
    if (token.balanceOf(address(this)) > 0) {
      uint256 totalDistributedToken = tokenDistributed;
      token.burn(address(this),totalDistributedToken);
    }
  }

  // -----------------------------------------
  // Internal interface (extensible)
  // -----------------------------------------

  /**
   * @dev Override to extend the way in which ether is converted to tokens.
   * @param _weiAmount Value in wei to be converted into tokens
   * @return Number of tokens that can be purchased with the specified _weiAmount
   */

  // Calcul the amount of token the benifiaciary will get by buying during Presale 
  function _getTokenpresaleAmount(uint256 _weiAmount) internal view returns (uint256) {
    uint256 _amountToSend = _weiAmount.div(Presalerate).mul(10 ** 10);
    return _amountToSend;
  }
  
  // Calcul the amount of token the benifiaciary will get by buying during Sale
  function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) {
    uint256 _amountToSend = _weiAmount.div(Icorate).mul(10 ** 10);
    return _amountToSend;
  }

  // Calcul the token amount to distribute in the forwardFunds for the project (team, bounty ...)
  function _getTokenAmountToDistribute(uint _part) internal view returns (uint256) {
    uint256 _delivredTokens = tokenDistributed.add(tokenDistributedpresale);
    return (_part.mul(_delivredTokens).div(investors));

  }

  // verify the remaining token stock & deliver tokens to the beneficiary
  function _getRemainingTokenStock(address _beneficiary, uint256 _tokenAmount) internal {
    if (token.balanceOf(address(this)) >= _tokenAmount) {
      require(token.transfer(_beneficiary, _tokenAmount));
    }
    else {
      if (token.balanceOf(address(this)) == 0) {
        require(token.mint(_beneficiary, _tokenAmount));
      }
      else {
        uint256 remainingTokenTocreate = _tokenAmount.sub(token.balanceOf(address(this)));
        require(token.transfer(_beneficiary, token.balanceOf(address(this))));
        require(token.mint(_beneficiary, remainingTokenTocreate));
      }
    }
  }

  // Function to check the refund period
  function _refundPeriod() internal view returns (bool){
    require(!_isSuccessful(),"Failed refund period is not opened");
    return ((!ico && !stateico) || (now > refundPeriod));
  }

  // check if the ico is successful
  function _isSuccessful() internal view returns (bool){
    return (EthRaisedIco.add(EthRaisedpresale) >= ICOminCap);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_project","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"string","name":"_type","type":"string"}],"name":"NewContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"inputs":[],"name":"EthRaisedIco","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EthRaisedpresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICOmaxCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ICOminCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Icorate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PURCHASE_ICO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PURCHASE_Presale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PresaleSalemaxCap1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Presalerate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WithdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closepresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ico","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reimburse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startpresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateico","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"statepresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract TokenContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributedpresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateETHIcoRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateETHPresaleRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_EtherAmount","type":"uint256"}],"name":"updateICOMaxcap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405265e35fa931a00060075566012795f58d5000600855603c600d55681b1ae4d6e2ef500000600e55681b1ae4d6e2ef500000600f556906e1d41a8f9ec35000006010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550348015620000bf57600080fd5b50604051620032013803806200320183398181016040526060811015620000e557600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001b65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620001f05750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620001fa57600080fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050612f3180620002d06000396000f3fe6080604052600436106101fc5760003560e01c80637fa8c1581161010d578063d3927c15116100a0578063e4f8a6221161006f578063e4f8a6221461074b578063f2fde38b14610776578063f607493e146107c7578063fc0c546a146107f2578063fdea8e0b1461083357610241565b8063d3927c1514610677578063da3fca8d1461068e578063de78b109146106bb578063e2982c21146106e657610241565b8063a6a3b5b4116100dc578063a6a3b5b4146105cf578063a9af75fa146105fa578063b4a97fca14610635578063b6b4e4671461066057610241565b80637fa8c1581461050b5780638ac27f5f146105225780638da5cb5b1461054d578063a4475ce41461058e57610241565b806354238645116101905780635dfb98961161015f5780635dfb989614610436578063614138e414610471578063725504ab1461049c57806372959388146104c75780637adc7233146104f457610241565b806354238645146103b0578063590e1ae3146103c75780635c81fd48146103de5780635d4522011461040957610241565b806333128f8f116101cc57806333128f8f146103025780634862b6311461032d5780634c0aac9a14610358578063521eb2731461036f57610241565b80625b44871461024657806306466ec914610271578063215c38f51461029c5780632378bac6146102d757610241565b3661024157601160009054906101000a900460ff16156102205761021f33610860565b5b601160019054906101000a900460ff161561023f5761023e33610b0e565b5b005b600080fd5b34801561025257600080fd5b5061025b610e2e565b6040518082815260200191505060405180910390f35b34801561027d57600080fd5b50610286610e34565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102d5600480360360208110156102bf57600080fd5b8101908080359060200190929190505050610e3a565b005b3480156102e357600080fd5b506102ec610f1a565b6040518082815260200191505060405180910390f35b34801561030e57600080fd5b50610317610f20565b6040518082815260200191505060405180910390f35b34801561033957600080fd5b50610342610f2c565b6040518082815260200191505060405180910390f35b34801561036457600080fd5b5061036d610f37565b005b34801561037b57600080fd5b5061038461141d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bc57600080fd5b506103c5611443565b005b3480156103d357600080fd5b506103dc6115be565b005b3480156103ea57600080fd5b506103f36116b1565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b5061041e6116b7565b60405180821515815260200191505060405180910390f35b34801561044257600080fd5b5061046f6004803603602081101561045957600080fd5b81019080803590602001909291905050506116ca565b005b34801561047d57600080fd5b506104866117aa565b6040518082815260200191505060405180910390f35b3480156104a857600080fd5b506104b16117b0565b6040518082815260200191505060405180910390f35b3480156104d357600080fd5b506104dc6117b6565b60405180821515815260200191505060405180910390f35b34801561050057600080fd5b506105096117c9565b005b34801561051757600080fd5b50610520611944565b005b34801561052e57600080fd5b50610537611b7f565b6040518082815260200191505060405180910390f35b34801561055957600080fd5b50610562611b85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059a57600080fd5b506105a3611bab565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105db57600080fd5b506105e4611bd1565b6040518082815260200191505060405180910390f35b34801561060657600080fd5b506106336004803603602081101561061d57600080fd5b8101908080359060200190929190505050611bd7565b005b34801561064157600080fd5b5061064a611cb7565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b50610675611cbd565b005b34801561068357600080fd5b5061068c611edc565b005b34801561069a57600080fd5b506106a3611efe565b60405180821515815260200191505060405180910390f35b3480156106c757600080fd5b506106d0611f11565b6040518082815260200191505060405180910390f35b3480156106f257600080fd5b506107356004803603602081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f17565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611f2f565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b506107c56004803603602081101561079957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b005b3480156107d357600080fd5b506107dc61215b565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b50610807612161565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083f57600080fd5b50610848612187565b60405180821515815260200191505060405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b671bc16d674ec80000341015610964576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180612e7b6043913960600191505060405180910390fd5b60003490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006109b98261219a565b90506109c583826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610a4782600a5461287490919063ffffffff16565b600a81905550610a6281600c5461287490919063ffffffff16565b600c81905550600e54600a5411610ae157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610adb573d6000803e3d6000fd5b50610b09565b600e54600a5410610b08576000601160006101000a81548160ff0219169083151502179055505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b6608e1bc9bf04000341015610c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612db3603e913960400191505060405180910390fd5b60003490506000610c21826128fc565b9050610c2d83826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610caf8260095461287490919063ffffffff16565b600981905550610cca81600b5461287490919063ffffffff16565b600b81905550610d2282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610d7e600a5460095461287490919063ffffffff16565b9050600f548110158015610d9457506010548111155b15610e0357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e01573d6000803e3d6000fd5b505b6010548110610e28576000601160016101000a81548160ff0219169083151502179055505b50505050565b60015481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b610f1160018261293690919063ffffffff16565b60108190555050565b600f5481565b671bc16d674ec8000081565b6608e1bc9bf0400081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160019054906101000a900460ff161580156110245750601160009054906101000a900460ff16155b611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4661696c656420612073616c6573206973206f6e676f696e670000000000000081525060200191505060405180910390fd5b6110ae6276a70060065461287490919063ffffffff16565b4211806110bf57506110be6129bc565b5b611114576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e536028913960400191505060405180910390fd5b61111c6129bc565b1561120b576000611131600d546064036129df565b905061115f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d4565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a24b5b6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b81019080805190602001909291905050505050611277565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6009549081150290604051600060405180830381858888f19350505050158015611275573d6000803e3d6000fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561130257600080fd5b505afa158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b8101908080519060200190929190505050111561141b576000600b549050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506040513d602081101561140757600080fd5b810190808051906020019092919050505050505b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1615801561152f5750601160019054906101000a900460ff165b6115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b6115c6612a2a565b6115cf57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161161b57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ae3382612ac5565b50565b60085481565b601160019054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b6117a160018261293690919063ffffffff16565b60088190555050565b600e5481565b60105481565b601360009054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1680156118b55750601160019054906101000a900460ff16155b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360019054906101000a900460ff168015611a305750601160009054906101000a900460ff16155b611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612ebe603e913960400191505060405180910390fd5b611a9b622a30004261287490919063ffffffff16565b6006819055506001601160016101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b8101908080519060200190929190505050506000601360016101000a81548160ff021916908315150217905550565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b611cae60018261293690919063ffffffff16565b60078190555050565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360009054906101000a900460ff168015611da95750601160019054906101000a900460ff16155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612df16041913960600191505060405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506000601360006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b810190808051906020019092919050505050565b611ee4612a2a565b611eed57600080fd5b611ef5612b77565b47600981905550565b601360019054906101000a900460ff1681565b600b5481565b60006020528060005260406000206000915090505481565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416464726573732073686f756c646e2774206265207a65726f0000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000806121c96402540be4006121bb60075486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b81019080805190602001909291905050501061237a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561233157600080fd5b505af1158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b810190808051906020019092919050505061237557600080fd5b612870565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d602081101561242f57600080fd5b8101908080519060200190929190505050141561252257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050506040513d602081101561250357600080fd5b810190808051906020019092919050505061251d57600080fd5b61286f565b60006125fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b057600080fd5b505afa1580156125c4573d6000803e3d6000fd5b505050506040513d60208110156125da57600080fd5b810190808051906020019092919050505083612d0790919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050506040513d602081101561277c57600080fd5b810190808051906020019092919050505061279657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d602081101561285357600080fd5b810190808051906020019092919050505061286d57600080fd5b505b5b5050565b6000808284019050838110156128f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008061292b6402540be40061291d60085486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b60008083141561294957600090506129b6565b600082840290508284828161295a57fe5b04146129b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e326021913960400191505060405180910390fd5b809150505b92915050565b6000600f546129d8600a5460095461287490919063ffffffff16565b1015905090565b6000806129f9600c54600b5461287490919063ffffffff16565b9050612a22600d54612a14838661293690919063ffffffff16565b612c7890919063ffffffff16565b915050919050565b6000612a346129bc565b15612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d916022913960400191505060405180910390fd5b601160019054906101000a900460ff16158015612ab45750601360019054906101000a900460ff16155b80612ac0575060065442115b905090565b612b16816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6d8160015461287490919063ffffffff16565b6001819055505050565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612bcd57600080fd5b80471015612bda57600080fd5b612bef81600154612d0790919063ffffffff16565b60018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c7457fe5b5050565b6000808211612cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481612cfa57fe5b0490508091505092915050565b600082821115612d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b60008284039050809150509291505056fe4661696c656420726566756e6420706572696f64206973206e6f74206f70656e65644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662049434f4661696c6564207468652050726573616c652077617320616c72656164792073746172746564206f7220616e6f746865722073616c65206973206f6e676f696e67536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c65642074686520726566756e6420706572696f64206973206e6f742066696e69736865644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662050726573616c65204661696c6564207468652049434f2077617320616c72656164792073746172746564206f7220616e6f746865722073616c6165206973206f6e676f696e67a2646970667358221220f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a64736f6c634300060c0033000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf900000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1

Deployed Bytecode

0x6080604052600436106101fc5760003560e01c80637fa8c1581161010d578063d3927c15116100a0578063e4f8a6221161006f578063e4f8a6221461074b578063f2fde38b14610776578063f607493e146107c7578063fc0c546a146107f2578063fdea8e0b1461083357610241565b8063d3927c1514610677578063da3fca8d1461068e578063de78b109146106bb578063e2982c21146106e657610241565b8063a6a3b5b4116100dc578063a6a3b5b4146105cf578063a9af75fa146105fa578063b4a97fca14610635578063b6b4e4671461066057610241565b80637fa8c1581461050b5780638ac27f5f146105225780638da5cb5b1461054d578063a4475ce41461058e57610241565b806354238645116101905780635dfb98961161015f5780635dfb989614610436578063614138e414610471578063725504ab1461049c57806372959388146104c75780637adc7233146104f457610241565b806354238645146103b0578063590e1ae3146103c75780635c81fd48146103de5780635d4522011461040957610241565b806333128f8f116101cc57806333128f8f146103025780634862b6311461032d5780634c0aac9a14610358578063521eb2731461036f57610241565b80625b44871461024657806306466ec914610271578063215c38f51461029c5780632378bac6146102d757610241565b3661024157601160009054906101000a900460ff16156102205761021f33610860565b5b601160019054906101000a900460ff161561023f5761023e33610b0e565b5b005b600080fd5b34801561025257600080fd5b5061025b610e2e565b6040518082815260200191505060405180910390f35b34801561027d57600080fd5b50610286610e34565b6040518082815260200191505060405180910390f35b3480156102a857600080fd5b506102d5600480360360208110156102bf57600080fd5b8101908080359060200190929190505050610e3a565b005b3480156102e357600080fd5b506102ec610f1a565b6040518082815260200191505060405180910390f35b34801561030e57600080fd5b50610317610f20565b6040518082815260200191505060405180910390f35b34801561033957600080fd5b50610342610f2c565b6040518082815260200191505060405180910390f35b34801561036457600080fd5b5061036d610f37565b005b34801561037b57600080fd5b5061038461141d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bc57600080fd5b506103c5611443565b005b3480156103d357600080fd5b506103dc6115be565b005b3480156103ea57600080fd5b506103f36116b1565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b5061041e6116b7565b60405180821515815260200191505060405180910390f35b34801561044257600080fd5b5061046f6004803603602081101561045957600080fd5b81019080803590602001909291905050506116ca565b005b34801561047d57600080fd5b506104866117aa565b6040518082815260200191505060405180910390f35b3480156104a857600080fd5b506104b16117b0565b6040518082815260200191505060405180910390f35b3480156104d357600080fd5b506104dc6117b6565b60405180821515815260200191505060405180910390f35b34801561050057600080fd5b506105096117c9565b005b34801561051757600080fd5b50610520611944565b005b34801561052e57600080fd5b50610537611b7f565b6040518082815260200191505060405180910390f35b34801561055957600080fd5b50610562611b85565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059a57600080fd5b506105a3611bab565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105db57600080fd5b506105e4611bd1565b6040518082815260200191505060405180910390f35b34801561060657600080fd5b506106336004803603602081101561061d57600080fd5b8101908080359060200190929190505050611bd7565b005b34801561064157600080fd5b5061064a611cb7565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b50610675611cbd565b005b34801561068357600080fd5b5061068c611edc565b005b34801561069a57600080fd5b506106a3611efe565b60405180821515815260200191505060405180910390f35b3480156106c757600080fd5b506106d0611f11565b6040518082815260200191505060405180910390f35b3480156106f257600080fd5b506107356004803603602081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f17565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611f2f565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b506107c56004803603602081101561079957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b005b3480156107d357600080fd5b506107dc61215b565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b50610807612161565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083f57600080fd5b50610848612187565b60405180821515815260200191505060405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b671bc16d674ec80000341015610964576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180612e7b6043913960600191505060405180910390fd5b60003490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006109b98261219a565b90506109c583826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610a4782600a5461287490919063ffffffff16565b600a81905550610a6281600c5461287490919063ffffffff16565b600c81905550600e54600a5411610ae157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610adb573d6000803e3d6000fd5b50610b09565b600e54600a5410610b08576000601160006101000a81548160ff0219169083151502179055505b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4661696c6564207468652077616c6c6574206973206e6f7420616c6c6f77656481525060200191505060405180910390fd5b6608e1bc9bf04000341015610c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612db3603e913960400191505060405180910390fd5b60003490506000610c21826128fc565b9050610c2d83826121d4565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610caf8260095461287490919063ffffffff16565b600981905550610cca81600b5461287490919063ffffffff16565b600b81905550610d2282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610d7e600a5460095461287490919063ffffffff16565b9050600f548110158015610d9457506010548111155b15610e0357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e01573d6000803e3d6000fd5b505b6010548110610e28576000601160016101000a81548160ff0219169083151502179055505b50505050565b60015481565b600c5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b610f1160018261293690919063ffffffff16565b60108190555050565b600f5481565b671bc16d674ec8000081565b6608e1bc9bf0400081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160019054906101000a900460ff161580156110245750601160009054906101000a900460ff16155b611096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4661696c656420612073616c6573206973206f6e676f696e670000000000000081525060200191505060405180910390fd5b6110ae6276a70060065461287490919063ffffffff16565b4211806110bf57506110be6129bc565b5b611114576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e536028913960400191505060405180910390fd5b61111c6129bc565b1561120b576000611131600d546064036129df565b905061115f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826121d4565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318a24b5b6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b81019080805190602001909291905050505050611277565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6009549081150290604051600060405180830381858888f19350505050158015611275573d6000803e3d6000fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561130257600080fd5b505afa158015611316573d6000803e3d6000fd5b505050506040513d602081101561132c57600080fd5b8101908080519060200190929190505050111561141b576000600b549050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506040513d602081101561140757600080fd5b810190808051906020019092919050505050505b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1615801561152f5750601160019054906101000a900460ff165b6115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160016101000a81548160ff021916908315150217905550565b6115c6612a2a565b6115cf57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161161b57600080fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116ae3382612ac5565b50565b60085481565b601160019054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b6117a160018261293690919063ffffffff16565b60088190555050565b600e5481565b60105481565b601360009054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601160009054906101000a900460ff1680156118b55750601160019054906101000a900460ff16155b611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4661696c65642069742077617320616c726561647920636c6f7365640000000081525060200191505060405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360019054906101000a900460ff168015611a305750601160009054906101000a900460ff16155b611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612ebe603e913960400191505060405180910390fd5b611a9b622a30004261287490919063ffffffff16565b6006819055506001601160016101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b8101908080519060200190929190505050506000601360016101000a81548160ff021916908315150217905550565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b611cae60018261293690919063ffffffff16565b60078190555050565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b601360009054906101000a900460ff168015611da95750601160019054906101000a900460ff16155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612df16041913960600191505060405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506000601360006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bca7a9e26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b810190808051906020019092919050505050565b611ee4612a2a565b611eed57600080fd5b611ef5612b77565b47600981905550565b601360019054906101000a900460ff1681565b600b5481565b60006020528060005260406000206000915090505481565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f7420617574686f72697a6564206f7065726174696f6e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f416464726573732073686f756c646e2774206265207a65726f0000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000806121c96402540be4006121bb60075486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b81019080805190602001909291905050501061237a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561233157600080fd5b505af1158015612345573d6000803e3d6000fd5b505050506040513d602081101561235b57600080fd5b810190808051906020019092919050505061237557600080fd5b612870565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240557600080fd5b505afa158015612419573d6000803e3d6000fd5b505050506040513d602081101561242f57600080fd5b8101908080519060200190929190505050141561252257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050506040513d602081101561250357600080fd5b810190808051906020019092919050505061251d57600080fd5b61286f565b60006125fa600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b057600080fd5b505afa1580156125c4573d6000803e3d6000fd5b505050506040513d60208110156125da57600080fd5b810190808051906020019092919050505083612d0790919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050506040513d602081101561277c57600080fd5b810190808051906020019092919050505061279657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d602081101561285357600080fd5b810190808051906020019092919050505061286d57600080fd5b505b5b5050565b6000808284019050838110156128f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008061292b6402540be40061291d60085486612c7890919063ffffffff16565b61293690919063ffffffff16565b905080915050919050565b60008083141561294957600090506129b6565b600082840290508284828161295a57fe5b04146129b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e326021913960400191505060405180910390fd5b809150505b92915050565b6000600f546129d8600a5460095461287490919063ffffffff16565b1015905090565b6000806129f9600c54600b5461287490919063ffffffff16565b9050612a22600d54612a14838661293690919063ffffffff16565b612c7890919063ffffffff16565b915050919050565b6000612a346129bc565b15612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d916022913960400191505060405180910390fd5b601160019054906101000a900460ff16158015612ab45750601360019054906101000a900460ff16155b80612ac0575060065442115b905090565b612b16816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6d8160015461287490919063ffffffff16565b6001819055505050565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612bcd57600080fd5b80471015612bda57600080fd5b612bef81600154612d0790919063ffffffff16565b60018190555060008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c7457fe5b5050565b6000808211612cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481612cfa57fe5b0490508091505092915050565b600082821115612d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b60008284039050809150509291505056fe4661696c656420726566756e6420706572696f64206973206e6f74206f70656e65644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662049434f4661696c6564207468652050726573616c652077617320616c72656164792073746172746564206f7220616e6f746865722073616c65206973206f6e676f696e67536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774661696c65642074686520726566756e6420706572696f64206973206e6f742066696e69736865644661696c65642074686520616d6f756e74206973206e6f742072657370656374696e6720746865206d696e696d756d206465706f736974206f662050726573616c65204661696c6564207468652049434f2077617320616c72656164792073746172746564206f7220616e6f746865722073616c6165206973206f6e676f696e67a2646970667358221220f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a64736f6c634300060c0033

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

000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf900000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1

-----Decoded View---------------
Arg [0] : _wallet (address): 0xDDeD117F6d7197912bDF8158bc161694CEF19FC5
Arg [1] : _token (address): 0xcF8f32e032f432B02393636B2092a6BEf975FBF9
Arg [2] : _project (address): 0x13bf02Ec805b4dab043FE003224C518874006BA1

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000dded117f6d7197912bdf8158bc161694cef19fc5
Arg [1] : 000000000000000000000000cf8f32e032f432b02393636b2092a6bef975fbf9
Arg [2] : 00000000000000000000000013bf02ec805b4dab043fe003224c518874006ba1


Deployed Bytecode Sourcemap

16374:12032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20020:7;;;;;;;;;;;20016:58;;;20038:28;20055:10;20038:16;:28::i;:::-;20016:58;20086:3;;;;;;;;;;;20082:50;;;20100:24;20113:10;20100:12;:24::i;:::-;20082:50;16374:12032;;;;;14820:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17524:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23430:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18207:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17781:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17903:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25267:783;;;;;;;;;;;;;:::i;:::-;;16551:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24455:123;;;;;;;;;;;;;:::i;:::-;;24850:221;;;;;;;;;;;;;:::i;:::-;;17112:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18517:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23107:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18058:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18350:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18746:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23819:132;;;;;;;;;;;;;:::i;:::-;;23973:460;;;;;;;;;;;;;:::i;:::-;;17648:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;357:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16627:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16699;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23266:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17259:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23570:223;;;;;;;;;;;;;:::i;:::-;;25077:133;;;;;;;;;;;;;:::i;:::-;;18844:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14767:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16850:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1050:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17344:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16478:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18419;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20143:1346;20240:1;20216:26;;:12;:26;;;;20208:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17828:7;20297:9;:33;;20289:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20482:17;20502:9;20482:29;;20695:1;20672:8;:20;20681:10;20672:20;;;;;;;;;;;;;;;:24;;;;20748:22;20773:33;20796:9;20773:22;:33::i;:::-;20748:58;;20813:53;20837:12;20851:14;20813:23;:53::i;:::-;20904:12;20878:66;;20892:10;20878:66;;;20918:9;20929:14;20878:66;;;;;;;;;;;;;;;;;;;;;;;;20993:31;21014:9;20993:16;;:20;;:31;;;;:::i;:::-;20974:16;:50;;;;21057:43;21085:14;21057:23;;:27;;:43;;;;:::i;:::-;21031:23;:69;;;;21238:18;;21218:16;;:38;21214:270;;21267:6;;;;;;;;;;;:15;;:38;21283:21;21267:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21214:270;;;21421:18;;21401:16;;:38;21397:80;;21462:5;21452:7;;:15;;;;;;;;;;;;;;;;;;21397:80;21214:270;20143:1346;;;:::o;21633:1400::-;21722:1;21698:26;;:12;:26;;;;21690:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17946:12;21779:9;:29;;21771:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21951:17;21971:9;21951:29;;22034:22;22059:26;22075:9;22059:15;:26::i;:::-;22034:51;;22181:53;22205:12;22219:14;22181:23;:53::i;:::-;22272:12;22246:66;;22260:10;22246:66;;;22286:9;22297:14;22246:66;;;;;;;;;;;;;;;;;;;;;;;;22357:27;22374:9;22357:12;;:16;;:27;;;;:::i;:::-;22342:12;:42;;;;22470:36;22491:14;22470:16;;:20;;:36;;;;:::i;:::-;22451:16;:55;;;;22582:37;22609:9;22582:8;:22;22591:12;22582:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;22557:8;:22;22566:12;22557:22;;;;;;;;;;;;;;;:62;;;;22628:22;22653:34;22670:16;;22653:12;;:16;;:34;;;;:::i;:::-;22628:59;;22812:9;;22794:14;:27;;:58;;;;;22843:9;;22825:14;:27;;22794:58;22790:119;;;22863:6;;;;;;;;;;;:15;;:38;22879:21;22863:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22790:119;22989:9;;22971:14;:27;22967:61;;23015:5;23009:3;;:11;;;;;;;;;;;;;;;;;;22967:61;21633:1400;;;;:::o;14820:28::-;;;;:::o;17524:38::-;;;;:::o;23430:114::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23513:25:::1;23532:5;23514:12;23513:18;;:25;;;;:::i;:::-;23501:9;:37;;;;23430:114:::0;:::o;18207:36::-;;;;:::o;17781:54::-;17828:7;17781:54;:::o;17903:55::-;17946:12;17903:55;:::o;25267:783::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25325:3:::1;;;;;;;;;;;25324:4;:16;;;;;25333:7;;;;;;;;;;;25332:8;25324:16;25316:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25391:25;25408:7;25391:12;;:16;;:25;;;;:::i;:::-;25385:3;:31;:50;;;;25420:15;:13;:15::i;:::-;25385:50;25377:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25536:15;:13;:15::i;:::-;25532:261;;;25562:28;25593:44;25627:9;;25621:3;:15;25593:27;:44::i;:::-;25562:75;;25646:59;25670:12;;;;;;;;;;;25684:20;25646:23;:59::i;:::-;25714:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;25532:261;;;;25756:6;;;;;;;;;;;:15;;:29;25772:12;;25756:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25532:261;25921:1;25888:5;;;;;;;;;;;:15;;;25912:4;25888:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:34;25884:161;;;25933:29;25965:16;;25933:48;;25990:5;;;;;;;;;;;:10;;;26009:4;26015:21;25990:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;25884:161;;25267:783::o:0;16551:29::-;;;;;;;;;;;;;:::o;24455:123::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24508:7:::1;;;;;;;;;;;24507:8;:15;;;;;24519:3;;;;;;;;;;;24507:15;24499:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24567:5;24561:3;;:11;;;;;;;;;;;;;;;;;;24455:123::o:0;24850:221::-;24890:15;:13;:15::i;:::-;24882:24;;;;;;24944:1;24921:8;:20;24930:10;24921:20;;;;;;;;;;;;;;;;:24;24913:33;;;;;;24955:17;24975:8;:20;24984:10;24975:20;;;;;;;;;;;;;;;;24955:40;;25025:1;25002:8;:20;25011:10;25002:20;;;;;;;;;;;;;;;:24;;;;25033:32;25043:10;25055:9;25033;:32::i;:::-;24850:221;:::o;17112:39::-;;;;:::o;18517:23::-;;;;;;;;;;;;;:::o;23107:113::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23189:25:::1;23208:5;23190:12;23189:18;;:25;;;;:::i;:::-;23179:7;:35;;;;23107:113:::0;:::o;18058:45::-;;;;:::o;18350:38::-;;;;:::o;18746:32::-;;;;;;;;;;;;;:::o;23819:132::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23875:7:::1;;;;;;;;;;;:15;;;;;23887:3;;;;;;;;;;;23886:4;23875:15;23867:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23940:5;23930:7;;:15;;;;;;;;;;;;;;;;;;23819:132::o:0;23973:460::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24116:8:::1;;;;;;;;;;;:20;;;;;24129:7;;;;;;;;;;;24128:8;24116:20;24108:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24227:16;24235:7;24227:3;:7;;:16;;;;:::i;:::-;24212:12;:31;;;;24302:4;24296:3;;:10;;;;;;;;;;;;;;;;;;24313:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;24422:5;24411:8;;:16;;;;;;;;;;;;;;;;;;23973:460::o:0;17648:29::-;;;;:::o;357:20::-;;;;;;;;;;;;;:::o;16627:27::-;;;;;;;;;;;;;:::o;16699:::-;;;;:::o;23266:121::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23356:25:::1;23375:5;23357:12;23356:18;;:25;;;;:::i;:::-;23342:11;:39;;;;23266:121:::0;:::o;17259:27::-;;;;:::o;23570:223::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23626:12:::1;;;;;;;;;;;:20;;;;;23643:3;;;;;;;;;;;23642:4;23626:20;23618:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23732:4;23722:7;;:14;;;;;;;;;;;;;;;;;;23758:5;23743:12;;:20;;;;;;;;;;;;;;;;;;23770:5;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;23570:223::o:0;25077:133::-;25120:15;:13;:15::i;:::-;25112:24;;;;;;25143:18;:16;:18::i;:::-;25183:21;25168:12;:36;;;;25077:133::o;18844:27::-;;;;;;;;;;;;;:::o;17435:31::-;;;;:::o;14767:44::-;;;;;;;;;;;;;;;;;:::o;16850:42::-;;;;:::o;1050:221::-;817:5;;;;;;;;;;;803:19;;:10;:19;;;795:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1151:1:::1;1131:22;;:8;:22;;;;1123:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1227:8;1199:37;;1220:5;;;;;;;;;;;1199:37;;;;;;;;;;;;1255:8;1247:5;;:16;;;;;;;;;;;;;;;;;;1050:221:::0;:::o;17344:31::-;;;;:::o;16478:26::-;;;;;;;;;;;;;:::o;18419:::-;;;;;;;;;;;;;:::o;26518:189::-;26593:7;26609:21;26633:41;26665:8;26633:27;26648:11;;26633:10;:14;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;26609:65;;26688:13;26681:20;;;26518:189;;;:::o;27384:617::-;27515:12;27481:5;;;;;;;;;;;:15;;;27505:4;27481:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;27477:519;;27546:5;;;;;;;;;;;:14;;;27561:12;27575;27546:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27538:51;;;;;;27477:519;;;27655:1;27621:5;;;;;;;;;;;:15;;;27645:4;27621:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;27617:372;;;27677:5;;;;;;;;;;;:10;;;27688:12;27702;27677:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:47;;;;;;27617:372;;;27750:30;27783:48;27800:5;;;;;;;;;;;:15;;;27824:4;27800:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27783:12;:16;;:48;;;;:::i;:::-;27750:81;;27850:5;;;;;;;;;;;:14;;;27865:12;27879:5;;;;;;;;;;;:15;;;27903:4;27879:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27842:69;;;;;;27930:5;;;;;;;;;;;:10;;;27941:12;27955:22;27930:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:57;;;;;;27617:372;;27477:519;27384:617;;:::o;2114:181::-;2172:7;2192:9;2208:1;2204;:5;2192:17;;2233:1;2228;:6;;2220:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:1;2279:8;;;2114:181;;;;:::o;26796:178::-;26864:7;26880:21;26904:37;26932:8;26904:23;26919:7;;26904:10;:14;;:23;;;;:::i;:::-;:27;;:37;;;;:::i;:::-;26880:61;;26955:13;26948:20;;;26796:178;;;:::o;3005:470::-;3063:7;3312:1;3307;:6;3303:47;;;3337:1;3330:8;;;;3303:47;3362:9;3378:1;3374;:5;3362:17;;3407:1;3402;3398;:5;;;;;;:10;3390:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3466:1;3459:8;;;3005:470;;;;;:::o;28279:122::-;28327:4;28385:9;;28347:34;28364:16;;28347:12;;:16;;:34;;;;:::i;:::-;:47;;28339:56;;28279:122;:::o;27079:224::-;27151:7;27167:23;27193:45;27214:23;;27193:16;;:20;;:45;;;;:::i;:::-;27167:71;;27253:41;27284:9;;27253:26;27263:15;27253:5;:9;;:26;;;;:::i;:::-;:30;;:41;;;;:::i;:::-;27245:50;;;27079:224;;;:::o;28049:187::-;28097:4;28118:15;:13;:15::i;:::-;28117:16;28109:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28188:3;;;;;;;;;;;28187:4;:17;;;;;28196:8;;;;;;;;;;;28195:9;28187:17;28186:43;;;;28216:12;;28210:3;:18;28186:43;28178:52;;28049:187;:::o;15057:171::-;15142:26;15161:6;15142:8;:14;15151:4;15142:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;15125:8;:14;15134:4;15125:14;;;;;;;;;;;;;;;:43;;;;15195:25;15213:6;15195:13;;:17;;:25;;;;:::i;:::-;15179:13;:41;;;;15057:171;;:::o;15312:344::-;15359:21;15383:10;15359:34;;15404:15;15422:8;:15;15431:5;15422:15;;;;;;;;;;;;;;;;15404:33;;15469:1;15458:7;:12;;15450:21;;;;;;15515:7;15490:21;:32;;15482:41;;;;;;15552:26;15570:7;15552:13;;:17;;:26;;;;:::i;:::-;15536:13;:42;;;;15607:1;15589:8;:15;15598:5;15589:15;;;;;;;;;;;;;;;:19;;;;15628:5;:10;;:19;15639:7;15628:19;;;;;;;;;;;;;;;;;;;;;;;15621:27;;;;15312:344;;:::o;3943:333::-;4001:7;4100:1;4096;:5;4088:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4143:9;4159:1;4155;:5;;;;;;4143:17;;4267:1;4260:8;;;3943:333;;;;:::o;2570:184::-;2628:7;2661:1;2656;:6;;2648:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:9;2724:1;2720;:5;2708:17;;2745:1;2738:8;;;2570:184;;;;:::o

Swarm Source

ipfs://f018810e0fd774f859bae9730f51529a368c8daaebc7280b9733b8bcc6a1fa9a

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  ]
[ 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.